<?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>77087</bug_id>
          
          <creation_ts>2012-01-26 02:58:04 -0800</creation_ts>
          <short_desc>[GStreamer] 0.11 video-sink</short_desc>
          <delta_ts>2012-06-19 22:44:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>77089</dependson>
    
    <dependson>79651</dependson>
          <blocked>77005</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>David.Ronis</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gustavo</cc>
    
    <cc>levin+threading</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>pnormand</cc>
    
    <cc>slomo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>543010</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-01-26 02:58:04 -0800</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543022</commentid>
    <comment_count>1</comment_count>
      <attachid>124093</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-01-26 03:25:10 -0800</bug_when>
    <thetext>Created attachment 124093
0.11 video-sink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543023</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-26 03:27:35 -0800</bug_when>
    <thetext>Attachment 124093 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/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:67:  webkit_video_sink_signals is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:71:  timeout_id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:72:  buffer_mutex is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:73:  data_cond is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:331:  need_pool is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:362:  n_param_values is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:363:  invocation_hint is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:387:  gobject_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:388:  gstbase_sink_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:389:  element_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 10 in 10 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>544971</commentid>
    <comment_count>3</comment_count>
      <attachid>124093</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2012-01-30 02:40:49 -0800</bug_when>
    <thetext>Comment on attachment 124093
0.11 video-sink

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

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCG.mm:30
&gt; +    return adoptRef(new ImageGStreamer(buffer, size));

Why don&apos;t you use the format at all here?

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCG.mm:51
&gt;          kCGBitmapByteOrder32Little | kCGImageAlphaFirst, provider.get(), 0, false, kCGRenderingIntentDefault);

I think it makes sense to use the format here

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:36
&gt;          cairoFormat = CAIRO_FORMAT_RGB24;

This is not true, GST_ARGB is CAIRO_ARGB32 on big endian systems and GST_BGRA is CAIRO_ARGB32 on little endian systems. Same for the one without alpha channel.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:55
&gt;      m_image = BitmapImage::create(surface);

Is it necessary to keep the buffer around until the object is destroyed? Same question for the other implementations

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:35
&gt;          imageFormat = QImage::Format_RGB32;

Same about endianness here too probably

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:100
&gt; +#if GLIB_CHECK_VERSION(2, 31, 0)

We depend on that version in GStreamer 0.11 anyway

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:182
&gt; +        gst_buffer_copy_into(newBuffer, buffer, (GstBufferCopyFlags) GST_BUFFER_COPY_ALL, 0, bufferSize);

You copy twice here. Just create and allocate a new buffer and fill the new buffer in the loop below

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:351
&gt; +        gst_buffer_pool_config_add_option(config, GST_BUFFER_POOL_OPTION_VIDEO_META);

Do you handle the video meta in the request-repaint signal handlers? There might be any possible stride used if you add this meta instead of the old GST_ROUND_UP_4(width) strides.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:356
&gt; +    gst_query_add_allocation_meta(query, GST_VIDEO_META_API);

You might want to add support for the crop meta too here</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545164</commentid>
    <comment_count>4</comment_count>
      <attachid>124093</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-30 09:30:41 -0800</bug_when>
    <thetext>Comment on attachment 124093
0.11 video-sink

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

I&apos;ve listed a bunch of style nits below. In general, GObject method names should use camelCase except for the few that cannot be (webkit_video_sink_class_init and webkit_video_sink_init). Be sure to use full words for variable names everywhere and function headers must be one line.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCG.mm:40
&gt; +    unsigned char* bufferData = reinterpret_cast&lt;unsigned char*&gt;(info.data);

Shouldn&apos;t you use Uint8* here as well?

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:47
&gt; +    unsigned char* bufferData = reinterpret_cast&lt;unsigned char*&gt;(info.data);

Should you use uchar* here as well?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1530
&gt; +    format = GST_VIDEO_INFO_FORMAT(&amp;info);
&gt; +    width = GST_VIDEO_INFO_WIDTH(&amp;info);
&gt; +    height = GST_VIDEO_INFO_HEIGHT(&amp;info);

I&apos;d move the delcaration of width, height and format to these lines.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1533
&gt; +    if (!gst_video_format_parse_caps(caps, &amp;format, &amp;width, &amp;height))

And here as well.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:32
&gt; +#include &quot;config.h&quot;
&gt; +
&gt; +#include &quot;VideoSinkGStreamer.h&quot;

No extra line necessary here.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:35
&gt; +#if USE(GSTREAMER)
&gt; +#ifdef GST_API_VERSION_1

Please combine these into a compound conditional.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:49
&gt; +#if G_BYTE_ORDER == G_LITTLE_ENDIAN
&gt; +#define VIDEO_FORMATS &quot;{ BGRx, BGRA }&quot;
&gt; +#else
&gt; +#define VIDEO_FORMATS &quot;{ xRGB, ARGB }&quot;
&gt; +#endif

Please use a staticconst char* for this.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:51
&gt; +                                                                   GST_PAD_SINK, GST_PAD_ALWAYS,

This can be one line.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:56
&gt; +GST_DEBUG_CATEGORY_STATIC(webkit_video_sink_debug);
&gt; +#define GST_CAT_DEFAULT webkit_video_sink_debug

I&apos;m not sure I understand this.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:67
&gt;&gt; +static guint webkit_video_sink_signals[LAST_SIGNAL] = { 0, };
&gt; 
&gt; webkit_video_sink_signals is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

Please fix the style bot not to complain about this. We do similar things for WebKit2. Take a look.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:84
&gt; +    gboolean unlocked;

Please use bool here and true/false when assigning.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:95
&gt; +static void
&gt; +webkit_video_sink_init(WebKitVideoSink* sink)

This should be one line.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:113
&gt; +static gboolean
&gt; +webkit_video_sink_timeout_func(gpointer data)

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:124
&gt; +    if (!buffer || priv-&gt;unlocked || G_UNLIKELY(!GST_IS_BUFFER(buffer))) {

You should use the WTF version of unlikely here, if possible.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:139
&gt; +static GstFlowReturn
&gt; +webkit_video_sink_render(GstBaseSink* bsink, GstBuffer* buffer)

One line also. :)

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:151
&gt; +    priv-&gt;buffer = gst_buffer_ref(buffer);

Could you use a RefPtr for this?

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:172
&gt; +        // could be passed multiple times to this method (in theory)

Missing a period here.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:176
&gt; +        // Check if allocation failed

Missing a period here.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:194
&gt; +        const guint8* source = (const guint8*) sourceInfo.data;
&gt; +        gst_buffer_map(newBuffer, &amp;destinationInfo, GST_MAP_WRITE);
&gt; +        guint8* destination = (guint8*) destinationInfo.data;

Please use a static_cast here or const_cast if necessary.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:229
&gt; +                                          (GDestroyNotify)gst_object_unref);

You should use reinterpret_cast.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:248
&gt; +#if GLIB_CHECK_VERSION(2, 31, 0)
&gt; +        g_cond_clear(priv-&gt;data_cond);
&gt; +        WTF::fastDelete(priv-&gt;data_cond);
&gt; +#else
&gt; +        g_cond_free(priv-&gt;data_cond);
&gt; +#endif

I&apos;d like to see these abstracted into a helper method.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:266
&gt; +static void
&gt; +unlock_buffer_mutex(WebKitVideoSinkPrivate* priv)

You should use camelCase for static methods.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:286
&gt; +    WebKitVideoSink* sink = WEBKIT_VIDEO_SINK(object);
&gt; +
&gt; +    unlock_buffer_mutex(sink-&gt;priv);

This can be one line.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:289
&gt; +    return GST_CALL_PARENT_WITH_DEFAULT(GST_BASE_SINK_CLASS, unlock,
&gt; +                                        (object), TRUE);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:296
&gt; +    WebKitVideoSink* sink = WEBKIT_VIDEO_SINK(object);
&gt; +    WebKitVideoSinkPrivate* priv = sink-&gt;priv;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:303
&gt; +    return GST_CALL_PARENT_WITH_DEFAULT(GST_BASE_SINK_CLASS, unlock_stop,
&gt; +                                        (object), TRUE);

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:361
&gt; +marshal_VOID__MINIOBJECT(GClosure * closure, GValue * return_value,

Please give this and the enclosed variables WebKit style names and ensure the asterisk placement is correct.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:411
&gt; +            (GSignalFlags)(G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION),

use static_cast here.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:415
&gt; +            0,
&gt; +            0,
&gt; +            0,
&gt; +            marshal_VOID__MINIOBJECT,

For parameters like these I think it&apos;s useful to put what each one does in a comment.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:425
&gt; +/**
&gt; + * webkit_video_sink_new:
&gt; + *
&gt; + * Creates a new GStreamer video sink.
&gt; + *
&gt; + * Return value: a #GstElement for the newly created video sink
&gt; + */

I don&apos;t think we need gtkdoc since this isn&apos;t public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550054</commentid>
    <comment_count>5</comment_count>
      <attachid>124093</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-06 09:18:48 -0800</bug_when>
    <thetext>Comment on attachment 124093
0.11 video-sink

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:55
&gt;&gt;      m_image = BitmapImage::create(surface);
&gt; 
&gt; Is it necessary to keep the buffer around until the object is destroyed? Same question for the other implementations

I don&apos;t think so because the ImageGStreamer ctors copy the buffer data to platform-dependant representations of the Image.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:182
&gt;&gt; +        gst_buffer_copy_into(newBuffer, buffer, (GstBufferCopyFlags) GST_BUFFER_COPY_ALL, 0, bufferSize);
&gt; 
&gt; You copy twice here. Just create and allocate a new buffer and fill the new buffer in the loop below

Oh hum I meant to copy only the metadata here, so I&apos;ll use  GST_BUFFER_COPY_METADATA instead of _ALL :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:248
&gt;&gt; +#endif
&gt; 
&gt; I&apos;d like to see these abstracted into a helper method.

Well I&apos;m not sure it&apos;s really needed. As Sebastian points out GStreamer 0.11 requires a quite recent glib anyway and these g_cond_ calls are not used in lots of places.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:351
&gt;&gt; +        gst_buffer_pool_config_add_option(config, GST_BUFFER_POOL_OPTION_VIDEO_META);
&gt; 
&gt; Do you handle the video meta in the request-repaint signal handlers? There might be any possible stride used if you add this meta instead of the old GST_ROUND_UP_4(width) strides.

Hum I don&apos;t use it in the signal handler. I guess it&apos;s best to remove this option from the pool then?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:356
&gt;&gt; +    gst_query_add_allocation_meta(query, GST_VIDEO_META_API);
&gt; 
&gt; You might want to add support for the crop meta too here

Is it really needed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>550814</commentid>
    <comment_count>6</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2012-02-07 04:03:09 -0800</bug_when>
    <thetext>(In reply to comment #5)

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:351
&gt; &gt;&gt; +        gst_buffer_pool_config_add_option(config, GST_BUFFER_POOL_OPTION_VIDEO_META);
&gt; &gt; 
&gt; &gt; Do you handle the video meta in the request-repaint signal handlers? There might be any possible stride used if you add this meta instead of the old GST_ROUND_UP_4(width) strides.
&gt; 
&gt; Hum I don&apos;t use it in the signal handler. I guess it&apos;s best to remove this option from the pool then?

Or support and use the metadata in the signal handler. Which would be preferred because it will give you better performance. And as you use cairo, supporting random strides should be quite easy.

&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:356
&gt; &gt;&gt; +    gst_query_add_allocation_meta(query, GST_VIDEO_META_API);
&gt; &gt; 
&gt; &gt; You might want to add support for the crop meta too here
&gt; 
&gt; Is it really needed?

No, but if you support it, it will give you much better performance if cropping is required somewhere (e.g. non-multiple of 16 widths/heights in h264 or Theora). I remember that adding cropping support to xvimagesink and gst-ffmpeg for this gave ~25% performance improvement for some videos. And cropping support is really easy if you use cairo for rendering anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565489</commentid>
    <comment_count>7</comment_count>
      <attachid>128989</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:07:17 -0800</bug_when>
    <thetext>Created attachment 128989
0.11 video-sink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565490</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-27 02:10:01 -0800</bug_when>
    <thetext>Attachment 128989 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/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:86:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:97:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:121:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:217:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:236:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:250:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:258:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:268:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:273:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:282:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:322:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:357:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/WebCore/platform/graphics/gstreamer/ImageGStreamer.h:39:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 13 in 10 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>565502</commentid>
    <comment_count>9</comment_count>
      <attachid>128989</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:25:54 -0800</bug_when>
    <thetext>Comment on attachment 128989
0.11 video-sink

Attachment 128989 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11628917</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565505</commentid>
    <comment_count>10</comment_count>
      <attachid>128993</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:26:54 -0800</bug_when>
    <thetext>Created attachment 128993
0.11 video-sink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565507</commentid>
    <comment_count>11</comment_count>
      <attachid>128995</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:28:56 -0800</bug_when>
    <thetext>Created attachment 128995
0.11 video-sink

Should make style-bot happier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565516</commentid>
    <comment_count>12</comment_count>
      <attachid>128997</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:35:33 -0800</bug_when>
    <thetext>Created attachment 128997
0.11 video-sink

Added forward declarations in ImageGStreamer.h and moved includes to implementations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565519</commentid>
    <comment_count>13</comment_count>
      <attachid>128997</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:40:57 -0800</bug_when>
    <thetext>Comment on attachment 128997
0.11 video-sink

Attachment 128997 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11630956</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565520</commentid>
    <comment_count>14</comment_count>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2012-02-27 02:42:20 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 128997 [details])
&gt; Attachment 128997 [details] did not pass gtk-ews (gtk):
&gt; Output: http://queues.webkit.org/results/11630956

Did you try on the Qt port or should I?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565525</commentid>
    <comment_count>15</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:50:59 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (From update of attachment 128997 [details] [details])
&gt; &gt; Attachment 128997 [details] [details] did not pass gtk-ews (gtk):
&gt; &gt; Output: http://queues.webkit.org/results/11630956
&gt; 
&gt; Did you try on the Qt port or should I?

Not yet, I probably should, and will :)
You can try too but you first need to build gst-0.11 git branches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565528</commentid>
    <comment_count>16</comment_count>
      <attachid>129001</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 02:58:15 -0800</bug_when>
    <thetext>Created attachment 129001
0.11 video-sink

Fix build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565533</commentid>
    <comment_count>17</comment_count>
      <attachid>129001</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 03:04:09 -0800</bug_when>
    <thetext>Comment on attachment 129001
0.11 video-sink

Attachment 129001 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11628945</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565544</commentid>
    <comment_count>18</comment_count>
      <attachid>129001</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-27 03:16:40 -0800</bug_when>
    <thetext>Comment on attachment 129001
0.11 video-sink

Attachment 129001 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11627987</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565558</commentid>
    <comment_count>19</comment_count>
      <attachid>129001</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-27 03:57:27 -0800</bug_when>
    <thetext>Comment on attachment 129001
0.11 video-sink

Attachment 129001 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11628967</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565667</commentid>
    <comment_count>20</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 08:23:39 -0800</bug_when>
    <thetext>Those build errors are expected because patch of bug 77089 is not landed yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565669</commentid>
    <comment_count>21</comment_count>
      <attachid>129041</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 08:26:22 -0800</bug_when>
    <thetext>Created attachment 129041
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565672</commentid>
    <comment_count>22</comment_count>
      <attachid>129041</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-27 08:30:48 -0800</bug_when>
    <thetext>Comment on attachment 129041
Patch

Attachment 129041 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11645025</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565771</commentid>
    <comment_count>23</comment_count>
      <attachid>129063</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 10:13:04 -0800</bug_when>
    <thetext>Created attachment 129063
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565778</commentid>
    <comment_count>24</comment_count>
      <attachid>129063</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-02-27 10:18:45 -0800</bug_when>
    <thetext>Comment on attachment 129063
Patch

Attachment 129063 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/11639137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565792</commentid>
    <comment_count>25</comment_count>
      <attachid>129063</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-27 10:32:08 -0800</bug_when>
    <thetext>Comment on attachment 129063
Patch

Attachment 129063 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11644084</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565806</commentid>
    <comment_count>26</comment_count>
      <attachid>129063</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-27 10:47:12 -0800</bug_when>
    <thetext>Comment on attachment 129063
Patch

Attachment 129063 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11641100</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>565847</commentid>
    <comment_count>27</comment_count>
      <attachid>129075</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-02-27 11:26:16 -0800</bug_when>
    <thetext>Created attachment 129075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569498</commentid>
    <comment_count>28</comment_count>
      <attachid>129865</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-02 03:30:08 -0800</bug_when>
    <thetext>Created attachment 129865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>571914</commentid>
    <comment_count>29</comment_count>
      <attachid>130394</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-06 09:41:15 -0800</bug_when>
    <thetext>Created attachment 130394
video-sink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579219</commentid>
    <comment_count>30</comment_count>
      <attachid>130394</attachid>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2012-03-15 02:19:05 -0700</bug_when>
    <thetext>Comment on attachment 130394
video-sink

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

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCG.mm:80
&gt; +        bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaFirst;

Just curious but can&apos;t you support ABGR and ARGB and RGBA and RGB (and all the other variants) here by setting the correct bitmapInfo value here? And maybe even the xRGB variants?

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:76
&gt; +    int stride = cairo_format_stride_for_width(cairoFormat, width);

This is not necessarily correct. The GStreamer stride for the two formats you support here is always GST_ROUND_UP_4 (width * 3) or GST_ROUND_UP_4 (width * 4)

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:363
&gt; +            marshal_VOID__MINIOBJECT, // Custom marshaller.

Why don&apos;t you use the generic GLib marshaller here? g_cclosure_marshal_generic() or how it&apos;s called</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579241</commentid>
    <comment_count>31</comment_count>
      <attachid>130394</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-15 03:11:31 -0700</bug_when>
    <thetext>Comment on attachment 130394
video-sink

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCG.mm:80
&gt;&gt; +        bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaFirst;
&gt; 
&gt; Just curious but can&apos;t you support ABGR and ARGB and RGBA and RGB (and all the other variants) here by setting the correct bitmapInfo value here? And maybe even the xRGB variants?

Hum not sure, I&apos;ll give this code another shot.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:76
&gt;&gt; +    int stride = cairo_format_stride_for_width(cairoFormat, width);
&gt; 
&gt; This is not necessarily correct. The GStreamer stride for the two formats you support here is always GST_ROUND_UP_4 (width * 3) or GST_ROUND_UP_4 (width * 4)

Ok I&apos;ll just use GST_ROUND_UP and handle both cases then :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:363
&gt;&gt; +            marshal_VOID__MINIOBJECT, // Custom marshaller.
&gt; 
&gt; Why don&apos;t you use the generic GLib marshaller here? g_cclosure_marshal_generic() or how it&apos;s called

I&apos;ve just copied this code from the other video-sink. I think you wrote this actually ;)
But yeah I guess the signal definition can be simplified indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579242</commentid>
    <comment_count>32</comment_count>
      <attachid>130394</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-15 03:12:19 -0700</bug_when>
    <thetext>Comment on attachment 130394
video-sink

Needs work after Sebastian&apos;s review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603016</commentid>
    <comment_count>33</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-16 03:35:00 -0700</bug_when>
    <thetext>I&apos;m having issues testing the ImageGstreamerCG changes. Since this code is not enabled in default builds (and I doubt anyone actually uses it these days) I&apos;ll remove it and update it in a follow-up patch. It will remain in the SVN history anyway, in case anyone cares :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603093</commentid>
    <comment_count>34</comment_count>
      <attachid>137331</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-16 06:18:15 -0700</bug_when>
    <thetext>Created attachment 137331
video-sink</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>603095</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-16 06:21:02 -0700</bug_when>
    <thetext>Attachment 137331 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/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 9 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>603113</commentid>
    <comment_count>36</comment_count>
      <attachid>137337</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-04-16 06:51:15 -0700</bug_when>
    <thetext>Created attachment 137337
video-sink

Fix code style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606155</commentid>
    <comment_count>37</comment_count>
      <attachid>137337</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-04-19 16:43:25 -0700</bug_when>
    <thetext>Comment on attachment 137337
video-sink

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

r- mostly for the code duplication. Below is list of quite picky style nits. :)

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamer.h:63
&gt; +        ImageGStreamer(GstBuffer*&amp;, GstCaps*);

Probably should just use a pointer here.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:66
&gt; +    if (format == GST_VIDEO_FORMAT_BGRA)
&gt; +        cairoFormat = CAIRO_FORMAT_ARGB32;
&gt; +    else
&gt; +        cairoFormat = CAIRO_FORMAT_RGB24;

It might be better to express this as a one-liner:

cairoFormat = (format == GST_VIDEO_FORMAT_BGRA) ? CAIRO_FORMAT_ARGB32 : CAIRO_FORMAT_RGB24;

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:71
&gt; +    if (format == GST_VIDEO_FORMAT_ARGB)
&gt;          cairoFormat = CAIRO_FORMAT_ARGB32;
&gt;      else
&gt;          cairoFormat = CAIRO_FORMAT_RGB24;

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:81
&gt; +    int stride;
&gt; +    if (format == GST_VIDEO_FORMAT_BGRA)
&gt; +        stride = GST_ROUND_UP_4(width * 4);
&gt; +    else
&gt; +        stride = GST_ROUND_UP_4(width * 3);

This might be cleaner as a single line:

int stride = GST_ROUND_UP_4(width * (format == GST_VIDEO_FORMAT_BGRA ? 4 : 3));

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:89
&gt; +

Extra newline here.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:50
&gt; +    GstVideoInfo videoInfo;
&gt; +    gst_video_info_from_caps(&amp;videoInfo, caps);
&gt;  
&gt; -    gst_caps_unref(caps);
&gt; +    GstVideoFormat format = GST_VIDEO_INFO_FORMAT(&amp;videoInfo);
&gt; +    int width = GST_VIDEO_INFO_WIDTH(&amp;videoInfo);
&gt; +    int height = GST_VIDEO_INFO_HEIGHT(&amp;videoInfo);
&gt;  
&gt; +    GstMapInfo info;
&gt; +    gst_buffer_map(buffer, &amp;info, GST_MAP_READ);
&gt; +    uchar* bufferData = reinterpret_cast&lt;uchar*&gt;(info.data);

This seems common to both implementations. Could you move it to a place that&apos;s platform independent and share it?

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:56
&gt; +    uchar* bufferData = reinterpret_cast&lt;uchar*&gt;(GST_BUFFER_DATA(buffer));
&gt; +    int width = 0, height = 0;
&gt; +    GstVideoFormat format;
&gt; +    gst_video_format_parse_caps(caps, &amp;format, &amp;width, &amp;height);
&gt; +#endif

Ditto.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:62
&gt; +    if (format == GST_VIDEO_FORMAT_BGRA)
&gt; +        imageFormat = QImage::Format_RGB32;
&gt; +    else
&gt;          imageFormat = QImage::Format_RGB888;

You could also play the same trick with one liners here.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:30
&gt;  G_BEGIN_DECLS

You shouldn&apos;t need G_BEGIN_DECLS/G_END_DECLS in this file.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:78
&gt;  GType       webkit_video_sink_get_type(void) G_GNUC_CONST;

No need for the void here. It makes sense for this declaration to use WebKit style.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:84
&gt; +#ifndef GST_API_VERSION_1
&gt;  GstElement *webkit_video_sink_new(WebCore::GStreamerGWorld*);
&gt; +#else
&gt; +GstElement *webkit_video_sink_new();
&gt; +#endif
&gt;  

Your asterisk is in the wrong place here. I think in this case it would be cleaner to have both constructors take the GStreamerGWorld argument (if it exists for both). In the new constructor, just could just leave it unused.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:67
&gt; +    GstBuffer* buffer;
&gt; +    guint timeout_id;
&gt; +    GMutex* buffer_mutex;
&gt; +    GCond* data_cond;
&gt; +    GstVideoInfo info;
&gt; +

You should use WebKit style for these variable names.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:88
&gt; +    WebKitVideoSinkPrivate* priv;

No need to declare your variable here, just declare it when you use it.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:102
&gt; +    WebKitVideoSinkPrivate* priv = sink-&gt;priv;
&gt; +    GstBuffer* buffer;

Ditto with these variables.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:123
&gt; +static GstFlowReturn webkit_video_sink_render(GstBaseSink* bsink, GstBuffer* buffer)

bsink -&gt; baseSink?

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:156
&gt; +    // Cairo&apos;s ARGB has pre-multiplied alpha while GStreamer&apos;s doesn&apos;t.
&gt; +    // Here we convert to Cairo&apos;s ARGB.
&gt; +    if (format == GST_VIDEO_FORMAT_ARGB || format == GST_VIDEO_FORMAT_BGRA) {
&gt; +        // Because GstBaseSink::render() only owns the buffer reference in the
&gt; +        // method scope we can&apos;t use gst_buffer_make_writable() here. Also
&gt; +        // The buffer content should not be changed here because the same buffer
&gt; +        // could be passed multiple times to this method (in theory).

Instead of duplicating this code between both implementations it should be shared somehow. perhaps a ultity file or a VideoSinkGstreamerShared.cpp.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:159
&gt; +        gsize bufferSize = gst_buffer_get_size(buffer);
&gt; +        GstBuffer* newBuffer = gst_buffer_new_and_alloc(bufferSize);
&gt; +

The code here looks like it should be moved to a helper function.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:183
&gt; +                alpha = source[3];

You should define alpha here instead of above.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:214
&gt; +    // This should likely use a lower priority, but glib currently starves
&gt; +    // lower priority sources.
&gt; +    // See: https://bugzilla.gnome.org/show_bug.cgi?id=610830.
&gt; +    priv-&gt;timeout_id = g_timeout_add_full(G_PRIORITY_DEFAULT, 0,
&gt; +                                          webkit_video_sink_timeout_func,
&gt; +                                          gst_object_ref(sink),
&gt; +                                          reinterpret_cast&lt;GDestroyNotify&gt;(gst_object_unref));
&gt; +

This can also be shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613521</commentid>
    <comment_count>38</comment_count>
      <attachid>137337</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-01 10:51:39 -0700</bug_when>
    <thetext>Comment on attachment 137337
video-sink

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:50
&gt;&gt; +    uchar* bufferData = reinterpret_cast&lt;uchar*&gt;(info.data);
&gt; 
&gt; This seems common to both implementations. Could you move it to a place that&apos;s platform independent and share it?

What do you want me to refactor/share exactly?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:56
&gt;&gt; +#endif
&gt; 
&gt; Ditto.

Hum, not sure what you mean, a new utility function in GStreamerVersioning to parse video caps?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:102
&gt;&gt; +    GstBuffer* buffer;
&gt; 
&gt; Ditto with these variables.

Ok for the buffer variable, but the 2 others are used immediately after. So... :)

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:156
&gt;&gt; +        // could be passed multiple times to this method (in theory).
&gt; 
&gt; Instead of duplicating this code between both implementations it should be shared somehow. perhaps a ultity file or a VideoSinkGstreamerShared.cpp.

I&apos;ll investigate this, maybe GStreamerVersioning can be used too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613572</commentid>
    <comment_count>39</comment_count>
      <attachid>137337</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-01 11:55:40 -0700</bug_when>
    <thetext>Comment on attachment 137337
video-sink

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

Sorry for the bad review habits. I&apos;ve tried to clarify it a bit below.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:50
&gt;&gt;&gt; +    uchar* bufferData = reinterpret_cast&lt;uchar*&gt;(info.data);
&gt;&gt; 
&gt;&gt; This seems common to both implementations. Could you move it to a place that&apos;s platform independent and share it?
&gt; 
&gt; What do you want me to refactor/share exactly?

For instance you could create a helper like

static void ImageGStreamer::getVideoSizeAndFormatFromCaps(GstCaps*, IntRect&amp; size, GstVideoFormat&amp; format);

This helper could be used by both the Qt and Cairo versions of this code (instead of the copypasta) and know all about the different GStreamer versions. This would keep those details out of all the platform specific files and reduce the size of the patch.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer1.cpp:102
&gt;&gt;&gt; +    GstBuffer* buffer;
&gt;&gt; 
&gt;&gt; Ditto with these variables.
&gt; 
&gt; Ok for the buffer variable, but the 2 others are used immediately after. So... :)

Fair enough. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>614055</commentid>
    <comment_count>40</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-02 00:35:26 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; (From update of attachment 137337 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=137337&amp;action=review
&gt; 
&gt; Sorry for the bad review habits. I&apos;ve tried to clarify it a bit below.
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:50
&gt; &gt;&gt;&gt; +    uchar* bufferData = reinterpret_cast&lt;uchar*&gt;(info.data);
&gt; &gt;&gt; 
&gt; &gt;&gt; This seems common to both implementations. Could you move it to a place that&apos;s platform independent and share it?
&gt; &gt; 
&gt; &gt; What do you want me to refactor/share exactly?
&gt; 
&gt; For instance you could create a helper like
&gt; 
&gt; static void ImageGStreamer::getVideoSizeAndFormatFromCaps(GstCaps*, IntRect&amp; size, GstVideoFormat&amp; format);
&gt; 
&gt; This helper could be used by both the Qt and Cairo versions of this code (instead of the copypasta) and know all about the different GStreamer versions. This would keep those details out of all the platform specific files and reduce the size of the patch.
&gt; 

Ok, yes it makes a lot of sense :) Actually I might implement that function in GStreamerVersioning and use it in both the media player and ImageGStreamer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615208</commentid>
    <comment_count>41</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-03 05:55:06 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 130394 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130394&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCG.mm:80
&gt; &gt; +        bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaFirst;
&gt; 
&gt; Just curious but can&apos;t you support ABGR and ARGB and RGBA and RGB (and all the other variants) here by setting the correct bitmapInfo value here? And maybe even the xRGB variants?
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:76
&gt; &gt; +    int stride = cairo_format_stride_for_width(cairoFormat, width);
&gt; 
&gt; This is not necessarily correct. The GStreamer stride for the two formats you support here is always GST_ROUND_UP_4 (width * 3) or GST_ROUND_UP_4 (width * 4)
&gt; 

The GStreamer stride might like this yes but on Cairo side bothCAIRO_FORMAT_ARGB32 and  CAIRO_FORMAT_RGB24 assume each pixel is a 32-bit quantity but for the RGB24 format the upper 8 bits are unused. So this means, I think, that the stride used to create the Cairo surface should always be GST_ROUND_UP_4(width * 4) in our case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615211</commentid>
    <comment_count>42</comment_count>
    <who name="Sebastian Dröge (slomo)">slomo</who>
    <bug_when>2012-05-03 06:03:42 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (In reply to comment #30)
&gt; &gt; (From update of attachment 130394 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=130394&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCG.mm:80
&gt; &gt; &gt; +        bitmapInfo = kCGBitmapByteOrder32Big | kCGImageAlphaFirst;
&gt; &gt; 
&gt; &gt; Just curious but can&apos;t you support ABGR and ARGB and RGBA and RGB (and all the other variants) here by setting the correct bitmapInfo value here? And maybe even the xRGB variants?
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:76
&gt; &gt; &gt; +    int stride = cairo_format_stride_for_width(cairoFormat, width);
&gt; &gt; 
&gt; &gt; This is not necessarily correct. The GStreamer stride for the two formats you support here is always GST_ROUND_UP_4 (width * 3) or GST_ROUND_UP_4 (width * 4)
&gt; &gt; 
&gt; 
&gt; The GStreamer stride might like this yes but on Cairo side bothCAIRO_FORMAT_ARGB32 and  CAIRO_FORMAT_RGB24 assume each pixel is a 32-bit quantity but for the RGB24 format the upper 8 bits are unused. So this means, I think, that the stride used to create the Cairo surface should always be GST_ROUND_UP_4(width * 4) in our case.

Ah so you only support the cairo formats. In that case you want GST_VIDEO_FORMAT_xRGB and GST_VIDEO_FORMAT_ARGB on big endian architectures and GST_VIDEO_FORMAT_BGRx and GST_VIDEO_FORMAT_BGRA on little endian architectures.

The default stride for them on the GStreamer side will be width*4 (obviously not necessary to round up to a multiple of four as it already will be a multiple of four ;) ). If there&apos;s GstVideoMeta attached to the buffer the stride might be different (larger) though but cairo can happily support this.

I hope this helps?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615229</commentid>
    <comment_count>43</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-03 06:33:09 -0700</bug_when>
    <thetext>Yes, it&apos;s all clear now!
I&apos;ll upload a new version of this patch adressing the latest reviews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615248</commentid>
    <comment_count>44</comment_count>
      <attachid>140004</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-03 07:07:38 -0700</bug_when>
    <thetext>Created attachment 140004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615250</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-03 07:10:18 -0700</bug_when>
    <thetext>Attachment 140004 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/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:75:  webkit_video_sink_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:78:  webkit_video_sink_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:80:  webkit_video_sink_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 9 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>615253</commentid>
    <comment_count>46</comment_count>
      <attachid>140004</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-03 07:13:31 -0700</bug_when>
    <thetext>Comment on attachment 140004
Patch

Attachment 140004 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12606177</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615255</commentid>
    <comment_count>47</comment_count>
      <attachid>140004</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-03 07:14:37 -0700</bug_when>
    <thetext>Comment on attachment 140004
Patch

Attachment 140004 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/12608241</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615266</commentid>
    <comment_count>48</comment_count>
      <attachid>140009</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-03 07:32:01 -0700</bug_when>
    <thetext>Created attachment 140009
Patch

Qt build fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615268</commentid>
    <comment_count>49</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-03 07:34:43 -0700</bug_when>
    <thetext>Attachment 140009 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/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:75:  webkit_video_sink_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:78:  webkit_video_sink_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:80:  webkit_video_sink_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 9 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>622615</commentid>
    <comment_count>50</comment_count>
      <attachid>141630</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-13 19:19:55 -0700</bug_when>
    <thetext>Created attachment 141630
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622617</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-13 19:22:52 -0700</bug_when>
    <thetext>Attachment 141630 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/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:75:  webkit_video_sink_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:78:  webkit_video_sink_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.h:80:  webkit_video_sink_ is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 10 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>625663</commentid>
    <comment_count>52</comment_count>
      <attachid>141630</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-16 11:19:09 -0700</bug_when>
    <thetext>Comment on attachment 141630
Patch

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

Okay. This looks good to me, though it&apos;s hard to review it thoroughly since it&apos;s such a big patch. It looks like most of the work is mechanical. The biggest change I&apos;d like to see (other than a lot of nit picky stylistic stuff) is to isolate as much of the version dependent #ifndef/#else stuff into helper functions. This will make it easier to understand long methods, because they won&apos;t be laced with these preprocessor commands.

&gt; Source/WebCore/ChangeLog:10
&gt; +        Video frame rendering changes for GStreamer 0.11/1.0. The
&gt; +        ImageGStreamerCG abstraction is being removed until I manage to
&gt; +        port my gst-mac WebKit branch over to WebKit2 mac port.

Do you mind splitting the CG removal into another patch? r+ in advance.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamer.h:57
&gt; +            return FloatRect(0, 0, -1, -1);

A comment here explaining these values might be good. Are these numbers that Gstreamer expects?

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1505
&gt; +            const gchar * const * extensions;

The asterisks should be attached to the typenames here.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:187
&gt; +#ifndef GST_API_VERSION_1
&gt;      // For the unlikely case where the buffer has no caps, the caps
&gt;      // are implicitely the caps of the pad. This shouldn&apos;t happen.
&gt; -    if (G_UNLIKELY(!GST_BUFFER_CAPS(buffer))) {
&gt; +    if (UNLIKELY(!GST_BUFFER_CAPS(buffer))) {
&gt;          buffer = priv-&gt;buffer = gst_buffer_make_metadata_writable(priv-&gt;buffer);
&gt; -        gst_buffer_set_caps(priv-&gt;buffer, GST_PAD_CAPS(GST_BASE_SINK_PAD(bsink)));
&gt; +        gst_buffer_set_caps(priv-&gt;buffer, GST_PAD_CAPS(GST_BASE_SINK_PAD(baseSink)));
&gt;      }
&gt;  
&gt;      GstCaps *caps = GST_BUFFER_CAPS(buffer);
&gt;      GstVideoFormat format;
&gt;      int width, height;
&gt; -    if (G_UNLIKELY(!gst_video_format_parse_caps(caps, &amp;format, &amp;width, &amp;height))) {
&gt; +    if (UNLIKELY(!gst_video_format_parse_caps(caps, &amp;format, &amp;width, &amp;height))) {
&gt; +        gst_buffer_unref(buffer);
&gt; +        g_mutex_unlock(priv-&gt;bufferMutex);
&gt; +        return GST_FLOW_ERROR;
&gt; +    }
&gt; +#else
&gt; +    GstVideoFrame frame;
&gt; +    if (!gst_video_frame_map(&amp;frame, &amp;priv-&gt;info, buffer, GST_MAP_READ)) {

I think it makes sense to split this off into a helper function like, getFormatAndDimensions().

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:214
&gt; +#ifndef GST_API_VERSION_1
&gt;          GstBuffer *newBuffer = gst_buffer_try_new_and_alloc(GST_BUFFER_SIZE(buffer));
&gt; +#else
&gt; +        gsize bufferSize = gst_buffer_get_size(buffer);
&gt; +        GstBuffer* newBuffer = gst_buffer_new_and_alloc(bufferSize);
&gt; +#endif
&gt;  

Again this would probably be better as a helper called, createBuffer.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:225
&gt; +#ifndef GST_API_VERSION_1
&gt; +        gst_buffer_copy_metadata(newBuffer, buffer, static_cast&lt;GstBufferCopyFlags&gt;(GST_BUFFER_COPY_ALL));
&gt; +#else
&gt; +        gst_buffer_copy_into(newBuffer, buffer, static_cast&lt;GstBufferCopyFlags&gt;(GST_BUFFER_COPY_METADATA), 0, bufferSize);
&gt; +#endif

It might even make sense to isolate all  #ifdeffed sections in this method into helpers.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:233
&gt;          const guint8 *source = GST_BUFFER_DATA(buffer);
&gt;          guint8 *destination = GST_BUFFER_DATA(newBuffer);

The asterisks are in the wrong place here.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:266
&gt; +#ifdef GST_API_VERSION_1
&gt; +        gst_buffer_unmap(buffer, &amp;sourceInfo);
&gt; +        gst_buffer_unmap(newBuffer, &amp;destinationInfo);
&gt; +#endif

Could you eliminate these calls by creating an OwnPtr for GstBuffer?

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:271
&gt; +

Extra line?

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:365
&gt; +static gboolean webkit_video_sink_propose_allocation(GstBaseSink* baseSink, GstQuery* query)

New method should have WebKit styled naming conventions, so this can be webkitVideoSinkProposeAllocation.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:369
&gt; +    gboolean need_pool;

need_pool -&gt; needPool.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:387
&gt;  static void
&gt;  marshal_VOID__MINIOBJECT(GClosure * closure, GValue * return_value,

You might consider fixing the style here too.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:447
&gt; +            0, // Class offset.
&gt; +            0, // Accumulator.
&gt; +            0, // Accumulator data.
&gt; +#ifndef GST_API_VERSION_1

Super nit: No need for periods here since these aren&apos;t sentences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631791</commentid>
    <comment_count>53</comment_count>
      <attachid>141630</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-23 10:49:39 -0700</bug_when>
    <thetext>Comment on attachment 141630
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        port my gst-mac WebKit branch over to WebKit2 mac port.
&gt; 
&gt; Do you mind splitting the CG removal into another patch? r+ in advance.

Sure!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamer.h:57
&gt;&gt; +            return FloatRect(0, 0, -1, -1);
&gt; 
&gt; A comment here explaining these values might be good. Are these numbers that Gstreamer expects?

These numbers are what the GraphicsContext draw method expect in the case where there is no crop rectangle.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:1505
&gt;&gt; +            const gchar * const * extensions;
&gt; 
&gt; The asterisks should be attached to the typenames here.

Right. Anyway, this code is no longer necessary since the mimeTypeCache() refactoring.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:187
&gt;&gt; +    if (!gst_video_frame_map(&amp;frame, &amp;priv-&gt;info, buffer, GST_MAP_READ)) {
&gt; 
&gt; I think it makes sense to split this off into a helper function like, getFormatAndDimensions().

Well there is already, webkitGetVideoSizeAndFormatFromCaps but I couldn&apos; t use it with a GstVideoFrame.
I fully understand the motivation for these utility functions but IMHO they restrain what the GStreamer APIs allow us to do. Will we need a utility function for each way to get those information using gst APIs?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:214
&gt;&gt;  
&gt; 
&gt; Again this would probably be better as a helper called, createBuffer.

Sure.

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:233
&gt;&gt;          guint8 *destination = GST_BUFFER_DATA(newBuffer);
&gt; 
&gt; The asterisks are in the wrong place here.

Indeed!

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:266
&gt;&gt; +#endif
&gt; 
&gt; Could you eliminate these calls by creating an OwnPtr for GstBuffer?

Hum.... I need to think about that and how to integrate this with GstMapInfo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632091</commentid>
    <comment_count>54</comment_count>
      <attachid>141630</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-23 15:02:16 -0700</bug_when>
    <thetext>Comment on attachment 141630
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.h:32
&gt; +bool webkitGetVideoSizeAndFormatFromCaps(GstCaps*, WebCore::IntSize&amp;, GstVideoFormat&amp;, int&amp;, int&amp;, int&amp;);

There&apos;s no need to prefix this helper with &quot;webkit.&quot; Generic types like int&amp; should include the variable name so it&apos;s possible to see how to call the helper by looking at the header. The style checker only complains in situations like &quot;GstVideoFormat&amp; format&quot; where there is some repetition.

&gt;&gt;&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:187
&gt;&gt;&gt; +    if (!gst_video_frame_map(&amp;frame, &amp;priv-&gt;info, buffer, GST_MAP_READ)) {
&gt;&gt; 
&gt;&gt; I think it makes sense to split this off into a helper function like, getFormatAndDimensions().
&gt; 
&gt; Well there is already, webkitGetVideoSizeAndFormatFromCaps but I couldn&apos; t use it with a GstVideoFrame.
&gt; I fully understand the motivation for these utility functions but IMHO they restrain what the GStreamer APIs allow us to do. Will we need a utility function for each way to get those information using gst APIs?

Hrm. In this case perhaps it makes sense to create helper called getVideoSizeAndFormatFromBuffer(buffer, int) and then for GST &lt; 0.11 have it call getVidoeSizeAndFormatFromCaps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634674</commentid>
    <comment_count>55</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-05-26 15:16:54 -0700</bug_when>
    <thetext>I&apos;ll send the code style WebKit-ification as a separate patch too and focus only on the 0.11 port for this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644953</commentid>
    <comment_count>56</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-08 12:50:02 -0700</bug_when>
    <thetext>*** Bug 88578 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645379</commentid>
    <comment_count>57</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-09 11:52:21 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:266
&gt; &gt; +#ifdef GST_API_VERSION_1
&gt; &gt; +        gst_buffer_unmap(buffer, &amp;sourceInfo);
&gt; &gt; +        gst_buffer_unmap(newBuffer, &amp;destinationInfo);
&gt; &gt; +#endif
&gt; 
&gt; Could you eliminate these calls by creating an OwnPtr for GstBuffer?
&gt; 

Hum, how would I do that taking into account the GstMapInfo? I&apos;m not sure how to integrate this notion in an OwnPtr.

For now I&apos;ll send the revised patch minus this update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645381</commentid>
    <comment_count>58</comment_count>
      <attachid>146714</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-09 11:54:50 -0700</bug_when>
    <thetext>Created attachment 146714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645382</commentid>
    <comment_count>59</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-09 11:57:04 -0700</bug_when>
    <thetext>Attachment 146714 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/platform/graphics/gstreamer...&quot; exit_code: 1
Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp:84:  gst_buffer_try__and_alloc is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 1 in 10 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>645383</commentid>
    <comment_count>60</comment_count>
      <attachid>146715</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-09 11:58:11 -0700</bug_when>
    <thetext>Created attachment 146715
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645470</commentid>
    <comment_count>61</comment_count>
      <attachid>146715</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-06-10 02:14:26 -0700</bug_when>
    <thetext>Comment on attachment 146715
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:39
&gt; +    QPixmap* surface = new QPixmap;

This seems like an unused and leaked variable :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>645576</commentid>
    <comment_count>62</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-10 10:23:50 -0700</bug_when>
    <thetext>(In reply to comment #61)
&gt; (From update of attachment 146715 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=146715&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerQt.cpp:39
&gt; &gt; +    QPixmap* surface = new QPixmap;
&gt; 
&gt; This seems like an unused and leaked variable :)

It&apos;s used later on to create the BitmapImage. About leakage, maybe it&apos;d be convenient to use an OwnPtr?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>651918</commentid>
    <comment_count>63</comment_count>
      <attachid>146715</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-18 17:44:07 -0700</bug_when>
    <thetext>Comment on attachment 146715
Patch

Pulling out of review queue. I need to rework some parts of the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652027</commentid>
    <comment_count>64</comment_count>
      <attachid>148244</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-18 22:05:45 -0700</bug_when>
    <thetext>Created attachment 148244
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652030</commentid>
    <comment_count>65</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-18 22:07:28 -0700</bug_when>
    <thetext>New patch, rebased against trunk, with ChangeLogs (hrm) and a small change in webkitwebsrc (gst_tag_list_free -&gt; _unref).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>652038</commentid>
    <comment_count>66</comment_count>
      <attachid>148244</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-06-18 22:34:06 -0700</bug_when>
    <thetext>Comment on attachment 148244
Patch

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

This version is a lot better! I&apos;m still a bit sad to see all of the #ifdefs splitting everything though. :( Please fix the following things before landing.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp:52
&gt; +bool webkitGetVideoSizeAndFormatFromCaps(GstCaps* caps, WebCore::IntSize&amp; size, GstVideoFormat&amp; format, int&amp; pixelAspectRatioNumerator, int&amp; pixelAspectRatioDenominator, int&amp; stride)

Please don&apos;t use the webkit prefix here.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp:80
&gt; +GstBuffer* webkitGstCreateBuffer(GstBuffer* buffer)

This should probably be called createGstBuffer.

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp:90
&gt; +    if (!newBuffer)
&gt; +        return 0;

ASSERT(newBuffer) maybe. Do you handle returning zero at the callers? If not, this should be an assert instead of a return.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamer.h:33
&gt; +typedef struct _GstBuffer GstBuffer;
&gt; +typedef struct _GstCaps GstCaps;

GstVersioning.h now includes gst.h, so perhaps you can get rid of these typedefs now?

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:33
&gt;  #include &lt;wtf/gobject/GOwnPtr.h&gt;

This should go before the conditional includes according to WebKit style, I believe.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:39
&gt; +    : m_image(0)

m_image is a RefPtr so you don&apos;t need to initialize it here.

&gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:68
&gt; +    GstVideoCropMeta* cropMeta = gst_buffer_get_video_crop_meta(buffer);
&gt; +    if (cropMeta)
&gt; +        setCropRect(FloatRect(cropMeta-&gt;x, cropMeta-&gt;y, cropMeta-&gt;width, cropMeta-&gt;height));

This can simply be:
if (GstVideoCropMeta* cropMeta = gst_buffer_get_video_crop_meta(buffer))
    setCropRect(FloatRect(cropMeta-&gt;x, cropMeta-&gt;y, cropMeta-&gt;width, cropMeta-&gt;height));

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:502
&gt; +    int pixelAspectRatioNumerator, pixelAspectRatioDenominator, stride;

It&apos;d be better to move these down to where you first use them.

&gt; Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:505
&gt;      int displayWidth, displayHeight, displayAspectRatioGCD;
&gt; -    int originalWidth = 0, originalHeight = 0;
&gt; +    IntSize originalSize;
&gt; +    GstVideoFormat format;

The same for all of these variables really.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:349
&gt; +    WebKitVideoSink* sink = WEBKIT_VIDEO_SINK(baseSink);

Might as well move sink down to where it&apos;s first used.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:403
&gt; +#ifdef GST_API_VERSION_1
&gt; +    gst_element_class_set_metadata(elementClass,
&gt; +#else
&gt;      gst_element_class_set_details_simple(elementClass,
&gt; +#endif
&gt;              &quot;WebKit video sink&quot;,
&gt;              &quot;Sink/Video&quot;, &quot;Sends video data from a GStreamer pipeline to a Cairo surface&quot;,
&gt;              &quot;Alp Toker &lt;alp@atoker.com&gt;&quot;);

It&apos;d be better to wrap this into a helper method like:

void setGstElementClassMetadata(GstElementClass* elementClass, const char* name, const char* longName, const char* description, const char* author)
{
#ifdef GST_API_VERSION_1
    gst_element_class_set_metadata(elementClass, name, longNmae, description, author);
#else
    gst_element_class_set_details_simple(elementClass, name, longNmae, description, author);
#endif
}

It&apos;s a bit icky here to have the #ifdef breaking the actual line of code. I think the goal should be to move all of this code to more and more isolated helpers that abstract away the differences between the versions.

&gt; Source/WebCore/platform/graphics/gstreamer/VideoSinkGStreamer.cpp:428
&gt; +            g_cclosure_marshal_generic, // Custom marshaller

I think you can probably remove the comment here.

&gt; configure.ac:351
&gt; -GSTREAMER_1_0_REQUIRED_VERSION=1.0
&gt; +GSTREAMER_1_0_REQUIRED_VERSION=0.11.90

Why is this fix necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653103</commentid>
    <comment_count>67</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-19 19:15:43 -0700</bug_when>
    <thetext>(In reply to comment #66)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gstreamer/GStreamerVersioning.cpp:90
&gt; &gt; +    if (!newBuffer)
&gt; &gt; +        return 0;
&gt; 
&gt; ASSERT(newBuffer) maybe. Do you handle returning zero at the callers? If not, this should be an assert instead of a return.
&gt; 

The zero test is handled by the caller yes.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamer.h:33
&gt; &gt; +typedef struct _GstBuffer GstBuffer;
&gt; &gt; +typedef struct _GstCaps GstCaps;
&gt; 
&gt; GstVersioning.h now includes gst.h, so perhaps you can get rid of these typedefs now?
&gt; 

Oh yes, good point.

&gt; &gt; Source/WebCore/platform/graphics/gstreamer/ImageGStreamerCairo.cpp:33
&gt; &gt;  #include &lt;wtf/gobject/GOwnPtr.h&gt;
&gt; 
&gt; This should go before the conditional includes according to WebKit style, I believe.
&gt; 

Indeed!
 
&gt; 
&gt; &gt; configure.ac:351
&gt; &gt; -GSTREAMER_1_0_REQUIRED_VERSION=1.0
&gt; &gt; +GSTREAMER_1_0_REQUIRED_VERSION=0.11.90
&gt; 
&gt; Why is this fix necessary?

Because the current Version value in gstreamer-1.0.pc is not 1.0 yet.
Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653108</commentid>
    <comment_count>68</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-19 19:26:20 -0700</bug_when>
    <thetext>Committed r120790: &lt;http://trac.webkit.org/changeset/120790&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653199</commentid>
    <comment_count>69</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-06-19 22:22:52 -0700</bug_when>
    <thetext>(In reply to comment #68)
&gt; Committed r120790: &lt;http://trac.webkit.org/changeset/120790&gt;

And Qt buildfix landed in http://trac.webkit.org/changeset/120799</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>653218</commentid>
    <comment_count>70</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-06-19 22:44:52 -0700</bug_when>
    <thetext>(In reply to comment #69)
&gt; (In reply to comment #68)
&gt; &gt; Committed r120790: &lt;http://trac.webkit.org/changeset/120790&gt;
&gt; 
&gt; And Qt buildfix landed in http://trac.webkit.org/changeset/120799

Oops. Thanks Ossy!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124093</attachid>
            <date>2012-01-26 03:25:10 -0800</date>
            <delta_ts>2012-02-27 02:07:17 -0800</delta_ts>
            <desc>0.11 video-sink</desc>
            <filename>011-video-sink.patch</filename>
            <type>text/plain</type>
            <size>29089</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBmMmZmOGNjZDZkZTQ4MDA2MjY1NTZiOTc3OGFhYzZhYWZiNzgyNjEwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDI2IEphbiAyMDEyIDEyOjE5OjU3ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
MC4xMSB2aWRlby1zaW5rCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICA0MyArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSAgICAgICAgICAgICAgICAgfCAgICAxICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaCAgIHwgICAgMiArLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1l
ci9JbWFnZUdTdHJlYW1lckNHLm1tICAgICAgICAgfCAgIDMwICstCiAuLi4vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwICAgICB8ICAgMjcgKy0KIC4uLi9ncmFwaGlj
cy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgICAgICAgIHwgICAyNyArLQogLi4uL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDMwICsrLQog
Li4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwICAgICAgfCAgICAy
ICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggICAgICAgIHwg
ICAgNSArCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwICAg
ICB8ICA0MzIgKysrKysrKysrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDU1OSBpbnNl
cnRpb25zKCspLCA0MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMDZjYzljMi4uNmYyMzRlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQ4
IEBACiAyMDEyLTAxLTI2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
IAorICAgICAgICBbR1N0cmVhbWVyXSAwLjExIHZpZGVvLXNpbmsKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQg
bmV3IHZpZGVvIHNpbmsgY29kZSB0byB0aGUgYnVpbGQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmg6IGNyZWF0ZUltYWdlIEFQSQorICAgICAg
ICB1cGRhdGUgc28gaW1wbGVtZW50YXRpb25zIGRvbid0IG5lZWQgdG8gdXNlCisgICAgICAgIGdz
dF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGluIGdzdC0w
LjExLgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tOgorICAgICAgICAoSW1hZ2VHU3RyZWFt
ZXI6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cik6IFVzZSB0aGUgbmV3IGdzdF9idWZmZXJfeyx1bn1tYXAgQVBJcy4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHA6CisgICAgICAg
IChJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6
OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJRdC5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90
YWxCeXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHA6IEJ1aWxkIG9ubHkKKyAgICAgICAgZm9yIGdzdC0wLjEwLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaDogTm8g
bmVlZCBmb3IKKyAgICAgICAgR1N0cmVhbWVyR1dvcmxkIGluIHRoZSBnc3QtMC4xMSB2aWRlbyBz
aW5rLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3Ry
ZWFtZXIxLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAuCisgICAgICAgIChfV2ViS2l0VmlkZW9T
aW5rUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19pbml0KToKKyAgICAgICAg
KHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyk6CisgICAgICAgICh3ZWJraXRfdmlkZW9f
c2lua19yZW5kZXIpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZSk6CisgICAg
ICAgICh1bmxvY2tfYnVmZmVyX211dGV4KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3Vu
bG9jayk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcCk6CisgICAgICAg
ICh3ZWJraXRfdmlkZW9fc2lua19zdG9wKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0
YXJ0KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbik6Cisg
ICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19uZXcpOgorCisy
MDEyLTAxLTI2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwogICAg
ICAgICBbR1N0cmVhbWVyXSAwLjExIHN1cHBvcnQgaW4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4
OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAyMTk1ODZmLi43ZGZlYTRmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ0NjgsNiArNDQ2OCw3IEBAIHdlYmNv
cmVndGtfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBcCisJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJl
YW1lcjEuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
V2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyLmgKaW5kZXggYWI3OTliYS4uMTczZGFkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgSW50U2l6ZTsKIAogY2xhc3MgSW1hZ2VHU3RyZWFtZXIg
OiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZl
ciopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1h
Z2UoR3N0QnVmZmVyKiwgSW50U2l6ZSwgR3N0VmlkZW9Gb3JtYXQpOwogICAgICAgICB+SW1hZ2VH
U3RyZWFtZXIoKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBpbWFnZSgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmluZGV4IGZlMDkyOGIuLjIyODA0NmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lckNHLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9JbWFnZUdTdHJlYW1lckNHLm1tCkBAIC0yNSwyOSArMjUsMzUgQEAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVy
OjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK1Bhc3NSZWZQdHI8SW1hZ2VHU3RyZWFt
ZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlciwgSW50U2l6
ZSBzaXplLCBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQpCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVp
Z2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIp
OwotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRf
cGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdz
dF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVy
LCBzaXplKSk7CiB9CiAKIEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIq
JiBidWZmZXIsIEludFNpemUgc2l6ZSkKICAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBBU1NFUlQo
R1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikpOwogCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gZGF0
YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgc3RhdGljX2Nhc3Q8VUlu
dDgqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSksIEdTVF9CVUZGRVJfU0laRShidWZmZXIpLCBr
Q0ZBbGxvY2F0b3JOdWxsKSk7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RNYXBJ
bmZvIGluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFE
KTsKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgZ3VpbnQgYnVmZmVyU2l6ZSA9IEdT
VF9CVUZGRVJfU0laRShidWZmZXIpOworICAgIGNvbnN0IFVJbnQ4KiBidWZmZXJEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyNl
bmRpZgorCisgICAgQVNTRVJUKGJ1ZmZlclNpemUpOworCisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgYnVmZmVyRGF0
YSwgYnVmZmVyU2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOwogICAgIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4gcHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZE
YXRhKGRhdGEuZ2V0KCkpKTsKICAgICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2UgPSBDR0ltYWdlQ3Jl
YXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUud2lkdGgoKSo0LCBk
ZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCiAgICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0
dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRl
KGZyYW1lSW1hZ2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVy
X3VubWFwKGJ1ZmZlciwgJmluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1h
Z2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4IDhi
M2EwNzYuLmMxZmVmNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKQEAg
LTI3LDM1ICsyNywzNiBAQAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3Jl
YXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJ
bWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIsIEludFNpemUgc2l6
ZSwgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0KQogewotICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9
IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKLSAg
ICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNl
X2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fw
c191bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNf
dW5yZWYoY2Fwcyk7Ci0KICAgICBjYWlyb19mb3JtYXRfdCBjYWlyb0Zvcm1hdDsKICAgICBpZiAo
Zm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZP
Uk1BVF9CR1JBKQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CiAg
ICAgZWxzZQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IyNDsKIAotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpLCBjYWlyb0Zvcm1hdCkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VH
U3RyZWFtZXIoYnVmZmVyLCBzaXplLCBjYWlyb0Zvcm1hdCkpOwogfQogCiBJbWFnZUdTdHJlYW1l
cjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIGNhaXJv
X2Zvcm1hdF90JiBjYWlyb0Zvcm1hdCkKICAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShH
U1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgY2Fpcm9Gb3JtYXQsCisjaWZkZWYgR1NUX0FQSV9WRVJT
SU9OXzEKKyAgICBHc3RNYXBJbmZvIGluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAm
aW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5z
aWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyNlbmRpZgorICAgIGNhaXJvX3N1cmZhY2VfdCog
c3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ1ZmZlckRhdGEs
IGNhaXJvRm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19mb3JtYXRfc3RyaWRlX2Zv
cl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53aWR0aCgpKSk7CiAgICAgQVNTRVJUKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKHN1cmZhY2UpID09IENBSVJPX1NUQVRVU19TVUNDRVNTKTsKICAgICBtX2lt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJmYWNlKTsKKworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZpbmZvKTsKKyNlbmRpZgogfQog
CiBJbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
clF0LmNwcAppbmRleCAxODhjMGJiLi5jMjUzNDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
UXQuY3BwCkBAIC0yNiwzNCArMjYsMzUgQEAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3Ry
ZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQorUGFzc1JlZlB0cjxJbWFnZUdT
dHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyLCBJ
bnRTaXplIHNpemUsIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCkKIHsKLSAgICBpbnQgd2lkdGggPSAw
LCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1
ZmZlcik7Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zv
cm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAg
ICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IGdzdF9jYXBzX3VucmVmKGNhcHMpOwotCiAgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQ7
CiAgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX1JHQikKICAgICAgICAgaW1hZ2VG
b3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7CiAgICAgZWxzZQogICAgICAgICBpbWFnZUZv
cm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGltYWdlRm9ybWF0
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIHNpemUs
IGltYWdlRm9ybWF0KSk7CiB9CiAKIEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RC
dWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSwgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQp
CiAgICAgOiBtX2ltYWdlKDApCiB7CiAgICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFw
OwotICAgIFFJbWFnZSBpbWFnZShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCBpbWFnZUZvcm1hdCk7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEK
KyAgICBHc3RNYXBJbmZvIGluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywg
R1NUX01BUF9SRUFEKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgdWNoYXIqIGJ1
ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PHVjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZl
cikpOworI2VuZGlmCisgICAgUUltYWdlIGltYWdlKGJ1ZmZlckRhdGEsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2UtPmNvbnZlcnRGcm9tSW1h
Z2UoaW1hZ2UpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOwor
CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwg
JmluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA1
ODgzNjE5Li5iOTVlMGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcApAQCAtMTUxMCw3ICsxNTEwLDMxIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmCiAgICAgaWYgKCFtX2J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPElt
YWdlR1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShtX2J1
ZmZlcik7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2luaywgInNpbmsiKSk7CisgICAgaWYgKCFwYWQp
CisgICAgICAgIHJldHVybjsKKworICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAg
R3N0VmlkZW9Gb3JtYXQgZm9ybWF0OworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBH
c3RDYXBzKiBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHBhZC5nZXQoKSk7CisgICAg
aWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisgICAg
aWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJmluZm8sIGNhcHMpKQorICAgICAgICByZXR1
cm47CisKKyAgICBmb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQoJmluZm8pOworICAgIHdp
ZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJmluZm8pOworICAgIGhlaWdodCA9IEdTVF9WSURF
T19JTkZPX0hFSUdIVCgmaW5mbyk7CisjZWxzZQorICAgIEdzdENhcHMqIGNhcHMgPSBHU1RfUEFE
X0NBUFMocGFkLmdldCgpKTsKKyAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2Fwcyhj
YXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKQorICAgICAgICByZXR1cm47CisjZW5kaWYK
KworICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2UgPSBJbWFnZUdTdHJlYW1lcjo6
Y3JlYXRlSW1hZ2UobV9idWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGZvcm1hdCk7CiAg
ICAgaWYgKCFnc3RJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNzM4LDcgKzE3NjIsMTEg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJB
Q0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBn
X3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1l
ZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKKyNpZm5kZWYg
R1NUX0FQSV9WRVJTSU9OXzEKICAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdF92aWRlb19z
aW5rX25ldyhtX2dzdEdXb3JsZC5nZXQoKSk7CisjZWxzZQorICAgIG1fd2Via2l0VmlkZW9TaW5r
ID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CisjZW5kaWYKIAogICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV93ZWJraXRWaWRlb1NpbmssICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sobWVk
aWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhpcyk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
U2lua0dTdHJlYW1lci5jcHAKaW5kZXggNDM2MzAzNi4uMzIyMzVhZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1Zp
ZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNpZiBFTkFCTEUoVklERU8pICYm
IFVTRShHU1RSRUFNRVIpCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAKICNpbmNsdWRlIDxn
bGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgpAQCAtMzk4LDQgKzM5OSw1IEBAIEdzdEVsZW1l
bnQqIHdlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdX
b3JsZCkKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAorI2VuZGlmIC8vIEdTVF9BUElfVkVSU0lP
Tl8xCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
aAppbmRleCA1MDE4NTBmLi43OWY3ZWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
aApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgogI2luY2x1
ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgor
I2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTc1LDcg
Kzc2LDExIEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3MgewogCiAKIEdUeXBlICAgICAg
IHdlYmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKyNpZm5kZWYg
R1NUX0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldyhXZWJD
b3JlOjpHU3RyZWFtZXJHV29ybGQqKTsKKyNlbHNlCitHc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9f
c2lua19uZXcoKTsKKyNlbmRpZgogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5r
R1N0cmVhbWVyMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5NGNm
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApAQCAtMCwwICsxLDQzMiBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZAorICogIENvcHlyaWdodCAoQykgMjAwNyBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwg
MjAxMSwgMjAxMiBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisv
KioKKyAqIFNFQ1RJT046d2Via2l0LXZpZGVvLXNpbmsKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjog
R1N0cmVhbWVyIHZpZGVvIHNpbmsKKyAqCisgKiAjV2ViS2l0VmlkZW9TaW5rIGlzIGEgR1N0cmVh
bWVyIHNpbmsgZWxlbWVudCB0aGF0IHRyaWdnZXJzCisgKiByZXBhaW50cyBpbiB0aGUgV2ViS2l0
IEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIgZm9yIHRoZQorICogY3VycmVudCB2aWRlbyBidWZmZXIu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVh
bWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSKQorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisK
KyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92
aWRlby9nc3R2aWRlb21ldGEuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+
CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jh
c2UuaD4KKworLy8gQ0FJUk9fRk9STUFUX1JHQjI0IHVzZWQgdG8gcmVuZGVyIHRoZSB2aWRlbyBi
dWZmZXJzIGlzIGxpdHRsZS9iaWcgZW5kaWFuIGRlcGVuZGFudC4KKyNpZiBHX0JZVEVfT1JERVIg
PT0gR19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIFZJREVPX0ZPUk1BVFMgInsgQkdSeCwgQkdSQSB9
IgorI2Vsc2UKKyNkZWZpbmUgVklERU9fRk9STUFUUyAieyB4UkdCLCBBUkdCIH0iCisjZW5kaWYK
K3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElDX1BB
RF9URU1QTEFURSgic2luayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZ
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNfTUFLRShWSURFT19G
T1JNQVRTKSkpOworCisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3ZpZGVvX3Np
bmtfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3ZpZGVvX3NpbmtfZGVi
dWcKKworZW51bSB7CisgICAgUkVQQUlOVF9SRVFVRVNURUQsCisgICAgTEFTVF9TSUdOQUwKK307
CisKK2VudW0geworICAgIFBST1BfMAorfTsKKworc3RhdGljIGd1aW50IHdlYmtpdF92aWRlb19z
aW5rX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitzdHJ1Y3QgX1dlYktpdFZpZGVv
U2lua1ByaXZhdGUgeworICAgIEdzdEJ1ZmZlciogYnVmZmVyOworICAgIGd1aW50IHRpbWVvdXRf
aWQ7CisgICAgR011dGV4KiBidWZmZXJfbXV0ZXg7CisgICAgR0NvbmQqIGRhdGFfY29uZDsKKyAg
ICBHc3RWaWRlb0luZm8gaW5mbzsKKworICAgIC8vIElmIHRoaXMgaXMgVFJVRSBhbGwgcHJvY2Vz
c2luZyBzaG91bGQgZmluaXNoIEFTQVAKKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNl
IHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBiZXR3ZWVuCisgICAgLy8gdW5sb2NrKCkgYW5kIHJlbmRl
cigpLCB3aGVyZSB1bmxvY2soKSB3aW5zLCBzaWduYWxzIHRoZQorICAgIC8vIEdDb25kLCB0aGVu
IHJlbmRlcigpIHRyaWVzIHRvIHJlbmRlciBhIGZyYW1lIGFsdGhvdWdoCisgICAgLy8gZXZlcnl0
aGluZyBlbHNlIGlzbid0IHJ1bm5pbmcgYW55bW9yZS4gVGhpcyB3aWxsIGxlYWQKKyAgICAvLyB0
byBkZWFkbG9ja3MgYmVjYXVzZSByZW5kZXIoKSBob2xkcyB0aGUgc3RyZWFtIGxvY2suCisgICAg
Ly8KKyAgICAvLyBQcm90ZWN0ZWQgYnkgdGhlIGJ1ZmZlciBtdXRleAorICAgIGdib29sZWFuIHVu
bG9ja2VkOworfTsKKworI2RlZmluZSB3ZWJraXRfdmlkZW9fc2lua19wYXJlbnRfY2xhc3MgcGFy
ZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRWaWRlb1NpbmssIHdlYmtp
dF92aWRlb19zaW5rLCBHU1RfVFlQRV9WSURFT19TSU5LLCBHU1RfREVCVUdfQ0FURUdPUllfSU5J
VCh3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ3ZWJraXRzaW5rIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0IHZpZGVvIHNpbmsiKSk7CisKKworc3RhdGlj
IHZvaWQKK3dlYmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rKQorewor
ICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXY7CisKKyAgICBzaW5rLT5wcml2ID0gcHJp
diA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19T
SU5LLCBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKTsKKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwg
MzEsIDApCisgICAgcHJpdi0+ZGF0YV9jb25kID0gV1RGOjpmYXN0TmV3PEdDb25kPigpOworICAg
IGdfY29uZF9pbml0KHByaXYtPmRhdGFfY29uZCk7CisgICAgcHJpdi0+YnVmZmVyX211dGV4ID0g
V1RGOjpmYXN0TmV3PEdNdXRleD4oKTsKKyAgICBnX211dGV4X2luaXQocHJpdi0+YnVmZmVyX211
dGV4KTsKKyNlbHNlCisgICAgcHJpdi0+ZGF0YV9jb25kID0gZ19jb25kX25ldygpOworICAgIHBy
aXYtPmJ1ZmZlcl9tdXRleCA9IGdfbXV0ZXhfbmV3KCk7CisjZW5kaWYKKyAgICBnc3RfdmlkZW9f
aW5mb19pbml0KCZwcml2LT5pbmZvKTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfdmlk
ZW9fc2lua190aW1lb3V0X2Z1bmMoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRWaWRlb1Np
bmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdlYktpdFZpZGVvU2luayo+KGRhdGEpOworICAg
IFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworICAgIEdzdEJ1ZmZl
ciogYnVmZmVyOworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAg
YnVmZmVyID0gcHJpdi0+YnVmZmVyOworICAgIHByaXYtPmJ1ZmZlciA9IDA7CisgICAgcHJpdi0+
dGltZW91dF9pZCA9IDA7CisKKyAgICBpZiAoIWJ1ZmZlciB8fCBwcml2LT51bmxvY2tlZCB8fCBH
X1VOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7CisgICAgICAgIGdfY29uZF9zaWdu
YWwocHJpdi0+ZGF0YV9jb25kKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVy
X211dGV4KTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGdfc2lnbmFsX2Vt
aXQoc2luaywgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0sIDAs
IGJ1ZmZlcik7CisgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgIGdfY29uZF9zaWdu
YWwocHJpdi0+ZGF0YV9jb25kKTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0
ZXgpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybgord2Vi
a2l0X3ZpZGVvX3NpbmtfcmVuZGVyKEdzdEJhc2VTaW5rKiBic2luaywgR3N0QnVmZmVyKiBidWZm
ZXIpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYnNp
bmspOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisg
ICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+dW5s
b2NrZWQpIHsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIHByaXYtPmJ1ZmZlciA9IGdz
dF9idWZmZXJfcmVmKGJ1ZmZlcik7CisKKyAgICBHc3RWaWRlb0ZyYW1lIGZyYW1lOworICAgIGlm
ICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCgmZnJhbWUsICZwcml2LT5pbmZvLCBidWZmZXIsIEdTVF9N
QVBfUkVBRCkpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgICAgICBn
X211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfRVJST1I7CisgICAgfQorCisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVP
X0ZSQU1FX0ZPUk1BVCgmZnJhbWUpOworICAgIGludCB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9X
SURUSCgmZnJhbWUpOworICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUKCZm
cmFtZSk7CisKKyAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAoJmZyYW1lKTsKKworICAgIC8vIENh
aXJvJ3MgQVJHQiBoYXMgcHJlLW11bHRpcGxpZWQgYWxwaGEgd2hpbGUgR1N0cmVhbWVyJ3MgZG9l
c24ndC4KKyAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdG8gQ2Fpcm8ncyBBUkdCLgorICAgIGlmIChm
b3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1hdCA9PSBHU1RfVklERU9fRk9S
TUFUX0JHUkEpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBHc3RCYXNlU2luazo6cmVuZGVyKCkgb25s
eSBvd25zIHRoZSBidWZmZXIgcmVmZXJlbmNlIGluIHRoZQorICAgICAgICAvLyBtZXRob2Qgc2Nv
cGUgd2UgY2FuJ3QgdXNlIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIGhlcmUuIEFsc28KKyAg
ICAgICAgLy8gVGhlIGJ1ZmZlciBjb250ZW50IHNob3VsZCBub3QgYmUgY2hhbmdlZCBoZXJlIGJl
Y2F1c2UgdGhlIHNhbWUgYnVmZmVyCisgICAgICAgIC8vIGNvdWxkIGJlIHBhc3NlZCBtdWx0aXBs
ZSB0aW1lcyB0byB0aGlzIG1ldGhvZCAoaW4gdGhlb3J5KQorICAgICAgICBnc2l6ZSBidWZmZXJT
aXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworICAgICAgICBHc3RCdWZmZXIqIG5l
d0J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKworICAgICAg
ICAvLyBDaGVjayBpZiBhbGxvY2F0aW9uIGZhaWxlZAorICAgICAgICBpZiAoR19VTkxJS0VMWSgh
bmV3QnVmZmVyKSkgeworICAgICAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211
dGV4KTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgICAgICAgfQorCisg
ICAgICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1ZmZlciwgYnVmZmVyLCAoR3N0QnVmZmVy
Q29weUZsYWdzKSBHU1RfQlVGRkVSX0NPUFlfQUxMLCAwLCBidWZmZXJTaXplKTsKKworICAgICAg
ICAvLyBXZSBkb24ndCB1c2UgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgaGVy
ZSBiZWNhdXNlCisgICAgICAgIC8vIG9uZSBmdW5jdGlvbiBjYWxsIHBlciB2aWRlbyBwaXhlbCBp
cyBqdXN0IHRvbyBleHBlbnNpdmU6CisgICAgICAgIC8vIEZvciA3MjBwL1BBTCBmb3IgZXhhbXBs
ZSB0aGlzIG1lYW5zIDEyODAqNzIwKjI1PTIzMDQwMDAwCisgICAgICAgIC8vIGZ1bmN0aW9uIGNh
bGxzIHBlciBzZWNvbmQhCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGFscGhhOworICAgICAgICBH
c3RNYXBJbmZvIHNvdXJjZUluZm87CisgICAgICAgIEdzdE1hcEluZm8gZGVzdGluYXRpb25JbmZv
OworICAgICAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZzb3VyY2VJbmZvLCBHU1RfTUFQX1JF
QUQpOworICAgICAgICBjb25zdCBndWludDgqIHNvdXJjZSA9IChjb25zdCBndWludDgqKSBzb3Vy
Y2VJbmZvLmRhdGE7CisgICAgICAgIGdzdF9idWZmZXJfbWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0
aW9uSW5mbywgR1NUX01BUF9XUklURSk7CisgICAgICAgIGd1aW50OCogZGVzdGluYXRpb24gPSAo
Z3VpbnQ4KikgZGVzdGluYXRpb25JbmZvLmRhdGE7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7
IHggPCBoZWlnaHQ7IHgrKykgeworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB3aWR0
aDsgeSsrKSB7CisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgICAgICAg
ICAgICAgIGFscGhhID0gc291cmNlWzNdOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gKHNvdXJjZVswXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvblsxXSA9IChzb3VyY2VbMV0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25bMl0gPSAoc291cmNlWzJdICogYWxwaGEgKyAxMjgpIC8gMjU1Owor
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gYWxwaGE7CisjZWxzZQorICAgICAgICAg
ICAgICAgIGFscGhhID0gc291cmNlWzBdOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzBd
ID0gYWxwaGE7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMV0gPSAoc291cmNlWzFdICog
YWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gKHNv
dXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
blszXSA9IChzb3VyY2VbM10gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisjZW5kaWYKKyAgICAgICAg
ICAgICAgICBzb3VyY2UgKz0gNDsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiArPSA0Owor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVy
LCAmc291cmNlSW5mbyk7CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAobmV3QnVmZmVyLCAmZGVz
dGluYXRpb25JbmZvKTsKKworICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CisgICAg
ICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICB9CisKKworICAgIC8v
IFRoaXMgc2hvdWxkIGxpa2VseSB1c2UgYSBsb3dlciBwcmlvcml0eSwgYnV0IGdsaWIgY3VycmVu
dGx5IHN0YXJ2ZXMKKyAgICAvLyBsb3dlciBwcmlvcml0eSBzb3VyY2VzLgorICAgIC8vIFNlZTog
aHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDgzMC4KKyAgICBw
cml2LT50aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF92aWRl
b19zaW5rX3RpbWVvdXRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdzdF9vYmplY3RfcmVmKHNpbmspLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKEdEZXN0cm95Tm90aWZ5KWdzdF9vYmplY3RfdW5yZWYpOworCisgICAg
Z19jb25kX3dhaXQocHJpdi0+ZGF0YV9jb25kLCBwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdf
bXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09L
OworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTkso
b2JqZWN0KTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsK
KworICAgIGlmIChwcml2LT5kYXRhX2NvbmQpIHsKKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwg
MzEsIDApCisgICAgICAgIGdfY29uZF9jbGVhcihwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBX
VEY6OmZhc3REZWxldGUocHJpdi0+ZGF0YV9jb25kKTsKKyNlbHNlCisgICAgICAgIGdfY29uZF9m
cmVlKHByaXYtPmRhdGFfY29uZCk7CisjZW5kaWYKKyAgICAgICAgcHJpdi0+ZGF0YV9jb25kID0g
MDsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+YnVmZmVyX211dGV4KSB7CisjaWYgR0xJQl9DSEVD
S19WRVJTSU9OKDIsIDMxLCAwKQorICAgICAgICBnX211dGV4X2NsZWFyKHByaXYtPmJ1ZmZlcl9t
dXRleCk7CisgICAgICAgIFdURjo6ZmFzdERlbGV0ZShwcml2LT5idWZmZXJfbXV0ZXgpOworI2Vs
c2UKKyAgICAgICAgZ19tdXRleF9mcmVlKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisjZW5kaWYKKyAg
ICAgICAgcHJpdi0+YnVmZmVyX211dGV4ID0gMDsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFT
UyhwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkCit1bmxv
Y2tfYnVmZmVyX211dGV4KFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYpCit7CisgICAgZ19t
dXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+YnVmZmVyKSB7
CisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYocHJpdi0+YnVmZmVyKTsKKyAgICAgICAgcHJpdi0+
YnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBwcml2LT51bmxvY2tlZCA9IFRSVUU7CisKKyAgICBn
X2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+
YnVmZmVyX211dGV4KTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfdmlkZW9fc2lua191
bmxvY2soR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsg
PSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworCisgICAgdW5sb2NrX2J1ZmZlcl9tdXRleChz
aW5rLT5wcml2KTsKKworICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdT
VF9CQVNFX1NJTktfQ0xBU1MsIHVubG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAob2JqZWN0KSwgVFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0
X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3AoR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworICAgIFdlYktp
dFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgZ19tdXRleF9sb2Nr
KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJpdi0+dW5sb2NrZWQgPSBGQUxTRTsKKyAgICBn
X211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAgcmV0dXJuIEdTVF9DQUxM
X1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrX3N0b3AsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCksIFRSVUUpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4KK3dlYmtpdF92aWRlb19zaW5rX3N0b3AoR3N0QmFzZVNpbmsq
IGJhc2Vfc2luaykKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lU
X1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdjsKKworICAgIHVubG9ja19idWZmZXJfbXV0ZXgo
cHJpdik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbgord2Via2l0X3Zp
ZGVvX3Npbmtfc3RhcnQoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sKKyAgICBXZWJLaXRWaWRl
b1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdjsK
KworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHByaXYtPnVubG9j
a2VkID0gRkFMU0U7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAg
ICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuCit3ZWJraXRfdmlkZW9fc2lua19w
cm9wb3NlX2FsbG9jYXRpb24oR3N0QmFzZVNpbmsqIGJhc2Vfc2luaywgR3N0UXVlcnkqIHF1ZXJ5
KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJhc2Vf
c2luayk7CisgICAgR3N0Q2FwcyogY2FwczsKKyAgICBnYm9vbGVhbiBuZWVkX3Bvb2w7CisKKyAg
ICBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbihxdWVyeSwgJmNhcHMsICZuZWVkX3Bvb2wpOwor
CisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoIWdzdF92
aWRlb19pbmZvX2Zyb21fY2Fwcygmc2luay0+cHJpdi0+aW5mbywgY2FwcykpCisgICAgICAgIHJl
dHVybiBGQUxTRTsKKworICAgIEdzdEJ1ZmZlclBvb2wqIHBvb2w7CisgICAgZ3VpbnQgc2l6ZSwg
bWluLCBtYXgsIHByZWZpeCwgYWxpZ25tZW50OworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9j
YXRpb25fcGFyYW1zKHF1ZXJ5LCAmc2l6ZSwgJm1pbiwgJm1heCwgJnByZWZpeCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFsaWdubWVudCwgJnBvb2wpOworCisgICAg
aWYgKHBvb2wpIHsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBjb25maWc7CisKKyAgICAgICAgY29u
ZmlnID0gZ3N0X2J1ZmZlcl9wb29sX2dldF9jb25maWcocG9vbCk7CisgICAgICAgIGdzdF9idWZm
ZXJfcG9vbF9jb25maWdfYWRkX29wdGlvbihjb25maWcsIEdTVF9CVUZGRVJfUE9PTF9PUFRJT05f
VklERU9fTUVUQSk7CisgICAgICAgIGdzdF9idWZmZXJfcG9vbF9zZXRfY29uZmlnKHBvb2wsIGNv
bmZpZyk7CisgICAgfQorCisgICAgZ3N0X3F1ZXJ5X3NldF9hbGxvY2F0aW9uX3BhcmFtcyhxdWVy
eSwgc2l6ZSwgbWluLCBtYXgsIHByZWZpeCwgYWxpZ25tZW50LCBwb29sKTsKKyAgICBnc3RfcXVl
cnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJKTsKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQKK21hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVChH
Q2xvc3VyZSAqIGNsb3N1cmUsIEdWYWx1ZSAqIHJldHVybl92YWx1ZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBndWludCBuX3BhcmFtX3ZhbHVlcywgY29uc3QgR1ZhbHVlICogcGFyYW1fdmFs
dWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGludm9jYXRpb25faGludCwg
Z3BvaW50ZXIgbWFyc2hhbF9kYXRhKQoreworICAgIHR5cGVkZWYgdm9pZCAoKm1hcnNoYWxmdW5j
X1ZPSURfX01JTklPQkpFQ1QpIChncG9pbnRlciBvYmosIGdwb2ludGVyIGFyZzEsIGdwb2ludGVy
IGRhdGEyKTsKKyAgICBtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUIGNhbGxiYWNrOworICAg
IEdDQ2xvc3VyZSogY2MgPSAoR0NDbG9zdXJlICopIGNsb3N1cmU7CisgICAgZ3BvaW50ZXIgZGF0
YTEsIGRhdGEyOworCisgICAgZ19yZXR1cm5faWZfZmFpbChuX3BhcmFtX3ZhbHVlcyA9PSAyKTsK
KworICAgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQShjbG9zdXJlKSkgeworICAgICAgICBkYXRh
MSA9IGNsb3N1cmUtPmRhdGE7CisgICAgICAgIGRhdGEyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIo
cGFyYW1fdmFsdWVzICsgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0YTEgPSBnX3ZhbHVl
X3BlZWtfcG9pbnRlcihwYXJhbV92YWx1ZXMgKyAwKTsKKyAgICAgICAgZGF0YTIgPSBjbG9zdXJl
LT5kYXRhOworICAgIH0KKyAgICBjYWxsYmFjayA9IChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JK
RUNUKSAobWFyc2hhbF9kYXRhID8gbWFyc2hhbF9kYXRhIDogY2MtPmNhbGxiYWNrKTsKKworICAg
IGNhbGxiYWNrKGRhdGExLCBnX3ZhbHVlX2dldF9ib3hlZChwYXJhbV92YWx1ZXMgKyAxKSwgZGF0
YTIpOworfQorCitzdGF0aWMgdm9pZAord2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJL
aXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2Ns
YXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIEdzdEJhc2VTaW5rQ2xhc3MqIGdzdGJh
c2Vfc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1l
bnRDbGFzcyogZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKworICAg
IGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudF9jbGFzcywgZ3N0X3N0
YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzaW5rdGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9j
bGFzc19zZXRfbWV0YWRhdGEoZWxlbWVudF9jbGFzcywKKyAgICAgICAgICAgICJXZWJLaXQgdmlk
ZW8gc2luayIsCisgICAgICAgICAgICAiU2luay9WaWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZy
b20gYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8gYSBDYWlybyBzdXJmYWNlIiwKKyAgICAgICAgICAg
ICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPiIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSkpOworCisgICAgZ29i
amVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bvc2U7CisKKyAgICBn
c3RiYXNlX3NpbmtfY2xhc3MtPnVubG9jayA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKKyAg
ICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVubG9ja19zdG9wID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5s
b2NrX3N0b3A7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9f
c2lua19yZW5kZXI7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xsID0gd2Via2l0X3Zp
ZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3RvcCA9IHdlYmtpdF92
aWRlb19zaW5rX3N0b3A7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5zdGFydCA9IHdlYmtpdF92
aWRlb19zaW5rX3N0YXJ0OworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJvcG9zZV9hbGxvY2F0
aW9uID0gd2Via2l0X3ZpZGVvX3NpbmtfcHJvcG9zZV9hbGxvY2F0aW9uOworCisgICAgd2Via2l0
X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJl
cGFpbnQtcmVxdWVzdGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwK
KyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxf
QUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAxLCBHU1RfVFlQRV9CVUZGRVIpOworfQorCisvKioKKyAqIHdlYmtpdF92aWRlb19z
aW5rX25ldzoKKyAqCisgKiBDcmVhdGVzIGEgbmV3IEdTdHJlYW1lciB2aWRlbyBzaW5rLgorICoK
KyAqIFJldHVybiB2YWx1ZTogYSAjR3N0RWxlbWVudCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgdmlk
ZW8gc2luaworICovCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoKQoreworICAg
IHJldHVybiBHU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklERU9fU0lOSywg
MCkpOworfQorCisjZW5kaWYgLy8gR1NUX0FQSV9WRVJTSU9OXzEKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSKQotLSAKMS43LjguMw==
</data>
<flag name="review"
          id="125268"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128989</attachid>
            <date>2012-02-27 02:07:17 -0800</date>
            <delta_ts>2012-02-27 02:26:54 -0800</delta_ts>
            <desc>0.11 video-sink</desc>
            <filename>011-video-sink.patch</filename>
            <type>text/plain</type>
            <size>30577</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA5YmU0NTA2ZWEyOTlhZmEyNDdjNGYyNDU4OGMxYTYxMDY2ZjFmYTYzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDEwOjQ3OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
MC4xMSB2aWRlby1zaW5rCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAzOSArKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gICAgICAgICAgICAgICAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggICB8ICAgMTcgKy0KIC4uLi9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSAgICAgICAgIHwgICA2OSArKystCiAuLi4vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwICAgICB8ICAgNjIgKysrLQogLi4uL2dy
YXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCAgICAgICAgfCAgIDUwICsrLQog
Li4uL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDEw
ICstCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgICAgICB8
ICAgIDIgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCAgICAg
ICAgfCAgICA1ICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5j
cHAgICAgIHwgIDM2MSArKysrKysrKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgNTUy
IGluc2VydGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIx
LmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZwppbmRleCBkNTg0NWZhLi5jYWRkYzI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUg
KzEsNDQgQEAKIDIwMTItMDItMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEu
Y29tPgogCisgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEgdmlkZW8tc2luaworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwODcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06
IEFkZCBuZXcgdmlkZW8gc2luayBjb2RlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaDogY3JlYXRlSW1hZ2UgQVBJCisg
ICAgICAgIHVwZGF0ZSBzbyBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byB1c2UKKyAgICAg
ICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgaW4g
Z3N0LTAuMTEuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2Up
OgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6
OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJDYWlyby5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VH
U3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdT
dHJlYW1lclF0LmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1Zp
ZGVvU2lua0dTdHJlYW1lci5jcHA6IEJ1aWxkIG9ubHkKKyAgICAgICAgZm9yIGdzdC0wLjEwLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
aDogTm8gbmVlZCBmb3IKKyAgICAgICAgR1N0cmVhbWVyR1dvcmxkIGluIHRoZSBnc3QtMC4xMSB2
aWRlbyBzaW5rLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1Np
bmtHU3RyZWFtZXIxLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAuCisgICAgICAgIChfV2ViS2l0
VmlkZW9TaW5rUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0X2Z1
bmMpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKToKKyAgICAgICAgKHdlYmtp
dF92aWRlb19zaW5rX2Rpc3Bvc2UpOgorICAgICAgICAodW5sb2NrQnVmZmVyTXV0ZXgpOgorICAg
ICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19z
aW5rX3VubG9ja19zdG9wKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0b3ApOgorICAg
ICAgICAod2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Np
bmtfcHJvcG9zZV9hbGxvY2F0aW9uKToKKyAgICAgICAgKG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVD
VCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF92aWRlb19zaW5rX25ldyk6CisKKzIwMTItMDItMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEgc3VwcG9ydCBp
biBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CmluZGV4IDdiM2RlMzEuLjU1NTVkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1h
a2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpA
QCAtNDUzMyw2ICs0NTMzLDcgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvdy5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291
cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9D
b2xvckd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAppbmRleCBhYjc5OWJhLi4wZjM3Zjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaApAQCAtMzYsNyArMzYsOSBAQCBjbGFzcyBJbnRTaXpl
OwogCiBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlR1N0cmVh
bWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdTdHJl
YW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RDYXBzKiBjYXBz
KSB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBj
YXBzKSk7CisgICAgfQogICAgICAgICB+SW1hZ2VHU3RyZWFtZXIoKTsKIAogICAgICAgICBQYXNz
UmVmUHRyPEJpdG1hcEltYWdlPiBpbWFnZSgpCkBAIC00OCwxOCArNTAsNyBAQCBjbGFzcyBJbWFn
ZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHJp
dmF0ZToKICAgICAgICAgUmVmUHRyPEJpdG1hcEltYWdlPiBtX2ltYWdlOwogCi0jaWYgVVNFKENB
SVJPKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9f
Zm9ybWF0X3QmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIEltYWdlR1N0
cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXplLCBRSW1hZ2U6OkZvcm1hdCk7Ci0jZW5kaWYKLQot
I2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIElu
dFNpemUpOwotI2VuZGlmCi0KKyAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEdz
dENhcHMqKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmluZGV4IGZl
MDkyOGIuLmM3MjJlODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCkBAIC0yNSwyOSAr
MjUsNjggQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VH
U3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikK
K0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENh
cHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05f
MQorICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9j
YXBzKCZ2aWRlb0luZm8sIGNhcHMpOworCisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NU
X1ZJREVPX0lORk9fRk9STUFUKCZ2aWRlb0luZm8pOworICAgIGludCB3aWR0aCA9IEdTVF9WSURF
T19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pOworICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9fSU5G
T19IRUlHSFQoJnZpZGVvSW5mbyk7CisKKyAgICBHc3RNYXBJbmZvIGluZm87CisgICAgZ3N0X2J1
ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICBjb25zdCBVSW50OCog
YnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihpbmZvLmRhdGEpOwor
I2Vsc2UKICAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMg
PSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0
OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3
aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAg
IHJldHVybiBOVUxMOwotICAgIH0KKyAgICBnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2Fw
cywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKSk7Ci19CisgICAg
Z3VpbnQgYnVmZmVyU2l6ZSA9IEdTVF9CVUZGRVJfU0laRShidWZmZXIpOworICAgIGNvbnN0IFVJ
bnQ4KiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KEdTVF9CVUZG
RVJfREFUQShidWZmZXIpKTsKKyNlbmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFt
ZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUpCi0gICAgOiBtX2ltYWdlKDApCi17
Ci0gICAgQVNTRVJUKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKKyAgICBBU1NFUlQoYnVmZmVy
U2l6ZSk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNy
ZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KEdTVF9CVUZGRVJfREFU
QShidWZmZXIpKSwgR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlciksIGtDRkFsbG9jYXRvck51bGwpKTsK
KyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0YUNyZWF0ZVdpdGhC
eXRlc05vQ29weSgwLCBidWZmZXJEYXRhLCBidWZmZXJTaXplLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7
CiAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlcihBZG9wdENGLCBDR0Rh
dGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQoKSkpOwotICAgIENHSW1hZ2VSZWYg
ZnJhbWVJbWFnZSA9IENHSW1hZ2VDcmVhdGUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCA4
LCAzMiwgc2l6ZS53aWR0aCgpKjQsIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAg
a0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmlyc3QsIHByb3ZpZGVy
LmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CisKKyAgICBzaXpl
X3QgYml0c1BlckNvbXBvbmVudCA9IDg7CisgICAgc2l6ZV90IGJpdHNQZXJQaXhlbDsKKyAgICBz
aXplX3QgYnl0ZXNQZXJSb3c7CisgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcEluZm87CisKKyNpZiBH
X0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklE
RU9fRk9STUFUX0JHUkEpIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRl
cjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDMy
OworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhh
Tm9uZTsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5dGVzUGVyUm93ID0g
d2lkdGggKiAzOworICAgIH0KKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9S
TUFUX0FSR0IpIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmln
IHwga0NHSW1hZ2VBbHBoYUZpcnN0OworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAzMjsKKyAgICAg
ICAgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYml0bWFw
SW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYU5vbmU7CisgICAg
ICAgIGJpdHNQZXJQaXhlbCA9IDI0OworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogMzsK
KyAgICB9CisjZW5kaWYKKworICAgIENHSW1hZ2VSZWYgZnJhbWVJbWFnZSA9IENHSW1hZ2VDcmVh
dGUod2lkdGgsIGhlaWdodCwgYml0c1BlckNvbXBvbmVudCwgYml0c1BlclBpeGVsLCBieXRlc1Bl
clJvdywgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvLCBwcm92aWRlci5nZXQo
KSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAgIG1faW1hZ2UgPSBC
aXRtYXBJbWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9O
XzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJmluZm8pOworI2VuZGlmCiB9CiAKIElt
YWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
Q2Fpcm8uY3BwCmluZGV4IDhiM2EwNzYuLjU2Y2Y0ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3Ry
ZWFtZXJDYWlyby5jcHAKQEAgLTIyLDQwICsyMiw2OCBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBVU0UoR1NUUkVBTUVSKQogCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxn
c3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgIkdPd25QdHIuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNz
UmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVm
ZmVyKiBidWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYg
YnVmZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgIDogbV9pbWFnZSgwKQogeworI2lmZGVmIEdTVF9B
UElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3RfdmlkZW9f
aW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBm
b3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRo
ID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdT
VF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcEluZm8gbWFwSW5m
bzsKKyAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZtYXBJbmZvLCBHU1RfTUFQX1JFQUQpOwor
CisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KG1hcEluZm8uZGF0YSk7CisjZWxzZQorICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZl
ckRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihHU1RfQlVGRkVSX0RBVEEo
YnVmZmVyKSk7CiAgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBj
YXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwogICAgIEdzdFZpZGVvRm9ybWF0IGZv
cm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0
LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKyAgICBn
c3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0
KTsKKyNlbmRpZgogCiAgICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9Gb3JtYXQ7Ci0gICAgaWYgKGZv
cm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19GT1JN
QVRfQkdSQSkKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgaWYgKGZv
cm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCiAgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJ
Uk9fRk9STUFUX0FSR0IzMjsKICAgICBlbHNlCiAgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJUk9f
Rk9STUFUX1JHQjI0OworI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRf
QVJHQikKKyAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOworICAgIGVs
c2UKKyAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZW5kaWYKIAot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdp
ZHRoLCBoZWlnaHQpLCBjYWlyb0Zvcm1hdCkpOwotfQorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
CisgICAgaW50IHN0cmlkZSA9IEdTVF9WSURFT19JTkZPX1BMQU5FX1NUUklERSgmdmlkZW9JbmZv
LCAwKTsKKyNlbHNlCisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dp
ZHRoKGNhaXJvRm9ybWF0LCB3aWR0aCk7CisjZW5kaWYKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdl
R1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXplLCBjYWlyb19mb3JtYXRf
dCYgY2Fpcm9Gb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoR1NUX0JVRkZF
Ul9EQVRBKGJ1ZmZlciksIGNhaXJvRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19m
b3JtYXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53aWR0aCgpKSk7CisgICAg
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y
X2RhdGEoYnVmZmVyRGF0YSwgY2Fpcm9Gb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7CiAg
ICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpID09IENBSVJPX1NUQVRVU19T
VUNDRVNTKTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJmYWNlKTsKKwor
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisKKyAgICBHc3RWaWRlb0Nyb3BNZXRhKiBjcm9wTWV0
YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3BfbWV0YShidWZmZXIpOworICAgIGlmIChjcm9w
TWV0YSkKKyAgICAgICAgbV9pbWFnZS0+Y3JvcChJbnRSZWN0KGNyb3BNZXRhLT54LCBjcm9wTWV0
YS0+eSwgY3JvcE1ldGEtPndpZHRoLCBjcm9wTWV0YS0+aGVpZ2h0KSk7CisKKyAgICBnc3RfYnVm
ZmVyX3VubWFwKGJ1ZmZlciwgJm1hcEluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVy
Ojp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCmluZGV4IDE4
OGMwYmIuLmNjOGMxMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKQEAgLTI2LDM0
ICsyNiw0OCBAQAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0
QnVmZmVyKiYgYnVmZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgIDogbV9pbWFnZSgwKQogewotICAg
IGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9idWZm
ZXJfZ2V0X2NhcHMoYnVmZmVyKTsKLSAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYg
KCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVp
Z2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKKyNpZmRlZiBHU1Rf
QVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVv
X2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpOwogCi0gICAgZ3N0X2NhcHNfdW5yZWYo
Y2Fwcyk7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFU
KCZ2aWRlb0luZm8pOworICAgIGludCB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRl
b0luZm8pOworICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5m
byk7CiAKKyAgICBHc3RNYXBJbmZvIGluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAm
aW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWNoYXIqPihpbmZvLmRhdGEpOworI2Vsc2UKKyAgICB1Y2hhciogYnVmZmVyRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7CisgICAg
aW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Cisg
ICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhl
aWdodCk7CisjZW5kaWYKICAgICBRSW1hZ2U6OkZvcm1hdCBpbWFnZUZvcm1hdDsKLSAgICBpZiAo
Zm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfUkdCKQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJ
VFRMRV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKKyAg
ICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsKKyAgICBlbHNlCiAgICAg
ICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCODg4OworI2Vsc2UKKyAgICBpZiAo
Zm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQikKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBR
SW1hZ2U6OkZvcm1hdF9BUkdCMzI7CiAgICAgZWxzZQotICAgICAgICBpbWFnZUZvcm1hdCA9IFFJ
bWFnZTo6Rm9ybWF0X1JHQjMyOworICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0
X1JHQjg4ODsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1l
cihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGltYWdlRm9ybWF0KSk7Ci19CisgICAg
UUltYWdlIGltYWdlKGJ1ZmZlckRhdGEsIHdpZHRoLCBoZWlnaHQsIGltYWdlRm9ybWF0KTsKIAot
SW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6
ZSBzaXplLCBRSW1hZ2U6OkZvcm1hdCBpbWFnZUZvcm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsK
LSAgICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQaXhtYXA7Ci0gICAgUUltYWdlIGltYWdlKEdT
VF9CVUZGRVJfREFUQShidWZmZXIpLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGltYWdl
Rm9ybWF0KTsKICAgICBzdXJmYWNlLT5jb252ZXJ0RnJvbUltYWdlKGltYWdlKTsKICAgICBtX2lt
YWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJmYWNlKTsKKworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZpbmZvKTsKKyNlbmRpZgogfQog
CiBJbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggNmY3Y2FhZS4uMTc1NTU1ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE1
MDgsNyArMTUwOCwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JgogICAgIGlmICghbV9idWZm
ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1h
Z2UgPSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9idWZmZXIpOworICAgIEdzdENhcHMq
IGNhcHMgPSB3ZWJraXRfZ3N0X2VsZW1lbnRfZ2V0X3BhZF9jYXBzKG1fd2Via2l0VmlkZW9TaW5r
LCAic2luayIpOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRy
PEltYWdlR1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZSht
X2J1ZmZlciwgY2Fwcyk7CiAgICAgaWYgKCFnc3RJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0xNzM5LDcgKzE3NDMsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNy
ZWF0ZUdTVFBsYXlCaW4oKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAidmlkZW8t
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJh
Y2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgImF1ZGlvLWNoYW5n
ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwg
dGhpcyk7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBtX3dlYmtpdFZpZGVvU2lu
ayA9IHdlYmtpdF92aWRlb19zaW5rX25ldyhtX2dzdEdXb3JsZC5nZXQoKSk7CisjZWxzZQorICAg
IG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CisjZW5kaWYKIAog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmssICJyZXBhaW50LXJlcXVlc3Rl
ZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhpcyk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggNDM2MzAzNi4uMzIyMzVh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaWZuZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgpAQCAtMzk4LDQg
KzM5OSw1IEBAIEdzdEVsZW1lbnQqIHdlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3JlOjpHU3Ry
ZWFtZXJHV29ybGQqIGdzdEdXb3JsZCkKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAorI2VuZGlm
IC8vIEdTVF9BUElfVkVSU0lPTl8xCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1NpbmtHU3RyZWFtZXIuaAppbmRleCA1MDE4NTBmLi43OWY3ZWQ1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJl
YW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1l
ckdXb3JsZC5oIgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVv
L2dzdHZpZGVvc2luay5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogCiBHX0JFR0lO
X0RFQ0xTCiAKQEAgLTc1LDcgKzc2LDExIEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3Mg
ewogCiAKIEdUeXBlICAgICAgIHdlYmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05V
Q19DT05TVDsKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQgKndlYmtpdF92
aWRlb19zaW5rX25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqKTsKKyNlbHNlCitHc3RFbGVt
ZW50ICp3ZWJraXRfdmlkZW9fc2lua19uZXcoKTsKKyNlbmRpZgogCiBHX0VORF9ERUNMUwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9TaW5rR1N0cmVhbWVyMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZDAxNGYwYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApAQCAtMCww
ICsxLDM2MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZAorICogIENv
cHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdo
dCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisvKgorICoKKyAqIFdlYktpdFZpZGVvU2luayBpcyBhIEdTdHJlYW1l
ciBzaW5rIGVsZW1lbnQgdGhhdCB0cmlnZ2VycworICogcmVwYWludHMgaW4gdGhlIFdlYktpdCBH
U3RyZWFtZXIgbWVkaWEgcGxheWVyIGZvciB0aGUKKyAqIGN1cnJlbnQgdmlkZW8gYnVmZmVyLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVk
KEdTVF9BUElfVkVSU0lPTl8xKQorI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgorCisj
aW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3Qvdmlk
ZW8vZ3N0dmlkZW9tZXRhLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgor
I2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNl
Lmg+CisKKy8vIENBSVJPX0ZPUk1BVF9SR0IyNCB1c2VkIHRvIHJlbmRlciB0aGUgdmlkZW8gYnVm
ZmVycyBpcyBsaXR0bGUvYmlnIGVuZGlhbiBkZXBlbmRhbnQuCisjaWYgR19CWVRFX09SREVSID09
IEdfTElUVExFX0VORElBTgorc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0
ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFE
X0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTKEdTVF9WSURFT19DQVBTX01BS0UoInsgQkdSeCwgQkdS
QSB9IikpKTsKKyNlbHNlCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRl
ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURf
QUxXQVlTLCBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNfTUFLRSgieyB4UkdCLCBBUkdC
IH0iKSkpOworI2VuZGlmCisKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfdmlk
ZW9fc2lua19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfdmlkZW9fc2lu
a19kZWJ1ZworCitlbnVtIHsKKyAgICBSRVBBSU5UX1JFUVVFU1RFRCwKKyAgICBMQVNUX1NJR05B
TAorfTsKKworZW51bSB7CisgICAgUFJPUF8wCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X3Zp
ZGVvX3Npbmtfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK3N0cnVjdCBfV2ViS2l0
VmlkZW9TaW5rUHJpdmF0ZSB7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7CisgICAgZ3VpbnQgdGlt
ZW91dF9pZDsKKyAgICBHTXV0ZXgqIGJ1ZmZlcl9tdXRleDsKKyAgICBHQ29uZCogZGF0YV9jb25k
OworICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgLy8gSWYgdGhpcyBpcyBUUlVFIGFsbCBw
cm9jZXNzaW5nIHNob3VsZCBmaW5pc2ggQVNBUAorICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2UgdGhlcmUgY291bGQgYmUgYSByYWNlIGJldHdlZW4KKyAgICAvLyB1bmxvY2soKSBhbmQg
cmVuZGVyKCksIHdoZXJlIHVubG9jaygpIHdpbnMsIHNpZ25hbHMgdGhlCisgICAgLy8gR0NvbmQs
IHRoZW4gcmVuZGVyKCkgdHJpZXMgdG8gcmVuZGVyIGEgZnJhbWUgYWx0aG91Z2gKKyAgICAvLyBl
dmVyeXRoaW5nIGVsc2UgaXNuJ3QgcnVubmluZyBhbnltb3JlLiBUaGlzIHdpbGwgbGVhZAorICAg
IC8vIHRvIGRlYWRsb2NrcyBiZWNhdXNlIHJlbmRlcigpIGhvbGRzIHRoZSBzdHJlYW0gbG9jay4K
KyAgICAvLworICAgIC8vIFByb3RlY3RlZCBieSB0aGUgYnVmZmVyIG11dGV4CisgICAgYm9vbCB1
bmxvY2tlZDsKK307CisKKyNkZWZpbmUgd2Via2l0X3ZpZGVvX3NpbmtfcGFyZW50X2NsYXNzIHBh
cmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0VmlkZW9TaW5rLCB3ZWJr
aXRfdmlkZW9fc2luaywgR1NUX1RZUEVfVklERU9fU0lOSywgR1NUX0RFQlVHX0NBVEVHT1JZX0lO
SVQod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAid2Via2l0c2luayIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdCB2aWRlbyBzaW5rIikpOworCisKK3N0YXRp
YyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rKSB7Cisg
ICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdjsKKworICAgIHNpbmstPnByaXYgPSBwcml2
ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNpbmssIFdFQktJVF9UWVBFX1ZJREVPX1NJ
TkssIFdlYktpdFZpZGVvU2lua1ByaXZhdGUpOworICAgIHByaXYtPmRhdGFfY29uZCA9IFdURjo6
ZmFzdE5ldzxHQ29uZD4oKTsKKyAgICBnX2NvbmRfaW5pdChwcml2LT5kYXRhX2NvbmQpOworICAg
IHByaXYtPmJ1ZmZlcl9tdXRleCA9IFdURjo6ZmFzdE5ldzxHTXV0ZXg+KCk7CisgICAgZ19tdXRl
eF9pbml0KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ3N0X3ZpZGVvX2luZm9faW5pdCgmcHJp
di0+aW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0
X2Z1bmMoZ3BvaW50ZXIgZGF0YSkgeworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IHJlaW50
ZXJwcmV0X2Nhc3Q8V2ViS2l0VmlkZW9TaW5rKj4oZGF0YSk7CisgICAgV2ViS2l0VmlkZW9TaW5r
UHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7CisKKyAg
ICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBidWZmZXIgPSBwcml2LT5i
dWZmZXI7CisgICAgcHJpdi0+YnVmZmVyID0gMDsKKyAgICBwcml2LT50aW1lb3V0X2lkID0gMDsK
KworICAgIGlmICghYnVmZmVyIHx8IHByaXYtPnVubG9ja2VkIHx8IFVOTElLRUxZKCFHU1RfSVNf
QlVGRkVSKGJ1ZmZlcikpKSB7CisgICAgICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25k
KTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGdfc2lnbmFsX2VtaXQoc2luaywgd2Via2l0X3Zp
ZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0sIDAsIGJ1ZmZlcik7CisgICAgZ3N0
X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25k
KTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAgcmV0dXJu
IEZBTFNFOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRfdmlkZW9fc2lua19yZW5k
ZXIoR3N0QmFzZVNpbmsqIGJzaW5rLCBHc3RCdWZmZXIqIGJ1ZmZlcikgeworICAgIFdlYktpdFZp
ZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJzaW5rKTsKKyAgICBXZWJLaXRWaWRl
b1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOworCisgICAgaWYgKHByaXYtPnVubG9ja2VkKSB7CisgICAgICAgIGdf
bXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBHU1RfRkxP
V19PSzsKKyAgICB9CisKKyAgICBwcml2LT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZihidWZmZXIp
OworCisgICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKKyAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9t
YXAoJmZyYW1lLCAmcHJpdi0+aW5mbywgYnVmZmVyLCBHU1RfTUFQX1JFQUQpKSB7CisgICAgICAg
IGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+
YnVmZmVyX211dGV4KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgIH0KKwor
ICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19GUkFNRV9GT1JNQVQoJmZyYW1l
KTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEgoJmZyYW1lKTsKKyAgICBp
bnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCgmZnJhbWUpOworCisgICAgZ3N0X3Zp
ZGVvX2ZyYW1lX3VubWFwKCZmcmFtZSk7CisKKyAgICAvLyBDYWlybydzIEFSR0IgaGFzIHByZS1t
dWx0aXBsaWVkIGFscGhhIHdoaWxlIEdTdHJlYW1lcidzIGRvZXNuJ3QuCisgICAgLy8gSGVyZSB3
ZSBjb252ZXJ0IHRvIENhaXJvJ3MgQVJHQi4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSB7CisgICAgICAg
IC8vIEJlY2F1c2UgR3N0QmFzZVNpbms6OnJlbmRlcigpIG9ubHkgb3ducyB0aGUgYnVmZmVyIHJl
ZmVyZW5jZSBpbiB0aGUKKyAgICAgICAgLy8gbWV0aG9kIHNjb3BlIHdlIGNhbid0IHVzZSBnc3Rf
YnVmZmVyX21ha2Vfd3JpdGFibGUoKSBoZXJlLiBBbHNvCisgICAgICAgIC8vIFRoZSBidWZmZXIg
Y29udGVudCBzaG91bGQgbm90IGJlIGNoYW5nZWQgaGVyZSBiZWNhdXNlIHRoZSBzYW1lIGJ1ZmZl
cgorICAgICAgICAvLyBjb3VsZCBiZSBwYXNzZWQgbXVsdGlwbGUgdGltZXMgdG8gdGhpcyBtZXRo
b2QgKGluIHRoZW9yeSkuCisgICAgICAgIGdzaXplIGJ1ZmZlclNpemUgPSBnc3RfYnVmZmVyX2dl
dF9zaXplKGJ1ZmZlcik7CisgICAgICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gZ3N0X2J1ZmZl
cl9uZXdfYW5kX2FsbG9jKGJ1ZmZlclNpemUpOworCisgICAgICAgIC8vIENoZWNrIGlmIGFsbG9j
YXRpb24gZmFpbGVkLgorICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0J1ZmZlcikpIHsKKyAgICAg
ICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgICAgICBy
ZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBnc3RfYnVmZmVyX2Nv
cHlfaW50byhuZXdCdWZmZXIsIGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0QnVmZmVyQ29weUZsYWdz
PihHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEpLCAwLCBidWZmZXJTaXplKTsKKworICAgICAgICAv
LyBXZSBkb24ndCB1c2UgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgaGVyZSBi
ZWNhdXNlCisgICAgICAgIC8vIG9uZSBmdW5jdGlvbiBjYWxsIHBlciB2aWRlbyBwaXhlbCBpcyBq
dXN0IHRvbyBleHBlbnNpdmU6CisgICAgICAgIC8vIEZvciA3MjBwL1BBTCBmb3IgZXhhbXBsZSB0
aGlzIG1lYW5zIDEyODAqNzIwKjI1PTIzMDQwMDAwCisgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxz
IHBlciBzZWNvbmQhCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGFscGhhOworICAgICAgICBHc3RN
YXBJbmZvIHNvdXJjZUluZm87CisgICAgICAgIEdzdE1hcEluZm8gZGVzdGluYXRpb25JbmZvOwor
ICAgICAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZzb3VyY2VJbmZvLCBHU1RfTUFQX1JFQUQp
OworICAgICAgICBjb25zdCBndWludDgqIHNvdXJjZSA9IGNvbnN0X2Nhc3Q8Z3VpbnQ4Kj4oc291
cmNlSW5mby5kYXRhKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAobmV3QnVmZmVyLCAmZGVzdGlu
YXRpb25JbmZvLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAgZ3VpbnQ4KiBkZXN0aW5hdGlvbiA9
IHN0YXRpY19jYXN0PGd1aW50OCo+KGRlc3RpbmF0aW9uSW5mby5kYXRhKTsKKworICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IHdpZHRoOyB5KyspIHsKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5E
SUFOCisgICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2VbM107CisgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25bMF0gPSAoc291cmNlWzBdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1
NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSAr
IDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSBhbHBoYTsKKyNl
bHNlCisgICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2VbMF07CisgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25bMF0gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9
IChzb3VyY2VbMV0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bMl0gPSAoc291cmNlWzJdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gKHNvdXJjZVszXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIHNvdXJjZSArPSA0OworICAgICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ3N0X2J1ZmZl
cl91bm1hcChidWZmZXIsICZzb3VyY2VJbmZvKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChu
ZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8pOworCisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYo
YnVmZmVyKTsKKyAgICAgICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyID0gbmV3QnVmZmVyOworICAg
IH0KKworCisgICAgLy8gVGhpcyBzaG91bGQgbGlrZWx5IHVzZSBhIGxvd2VyIHByaW9yaXR5LCBi
dXQgZ2xpYiBjdXJyZW50bHkgc3RhcnZlcworICAgIC8vIGxvd2VyIHByaW9yaXR5IHNvdXJjZXMu
CisgICAgLy8gU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjEwODMwLgorICAgIHByaXYtPnRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklP
UklUWV9ERUZBVUxULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3N0X29iamVjdF9yZWYoc2luayksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CisKKyAgICBnX2NvbmRfd2FpdChwcml2LT5kYXRhX2Nv
bmQsIHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVy
X211dGV4KTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF92aWRlb19zaW5rX2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KSB7CisgICAgV2ViS2l0VmlkZW9T
aW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKKyAgICBXZWJLaXRWaWRlb1Np
bmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKworICAgIGlmIChwcml2LT5kYXRhX2NvbmQp
IHsKKyAgICAgICAgZ19jb25kX2NsZWFyKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIFdURjo6
ZmFzdERlbGV0ZShwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBwcml2LT5kYXRhX2NvbmQgPSAw
OworICAgIH0KKworICAgIGlmIChwcml2LT5idWZmZXJfbXV0ZXgpIHsKKyAgICAgICAgZ19tdXRl
eF9jbGVhcihwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJp
di0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgcHJpdi0+YnVmZmVyX211dGV4ID0gMDsKKyAgICB9
CisKKyAgICBHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9
CisKK3N0YXRpYyB2b2lkIHVubG9ja0J1ZmZlck11dGV4KFdlYktpdFZpZGVvU2lua1ByaXZhdGUq
IHByaXYpIHsKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIGlm
IChwcml2LT5idWZmZXIpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihwcml2LT5idWZmZXIp
OworICAgICAgICBwcml2LT5idWZmZXIgPSAwOworICAgIH0KKworICAgIHByaXYtPnVubG9ja2Vk
ID0gdHJ1ZTsKKworICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsKKyAgICBnX211
dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X3ZpZGVvX3NpbmtfdW5sb2NrKEdzdEJhc2VTaW5rKiBvYmplY3QpIHsKKyAgICBXZWJLaXRW
aWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworCisgICAgdW5sb2Nr
QnVmZmVyTXV0ZXgoc2luay0+cHJpdik7CisKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJ
VEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssIChvYmplY3QpLCBUUlVFKTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9wKEdzdEJh
c2VTaW5rKiBvYmplY3QpIHsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1ZJREVPX1NJTksob2JqZWN0KS0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5i
dWZmZXJfbXV0ZXgpOworICAgIHByaXYtPnVubG9ja2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91
bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRf
V0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVubG9ja19zdG9wLCAob2JqZWN0KSwg
VFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19zdG9wKEdzdEJh
c2VTaW5rKiBiYXNlX3NpbmspIHsKKyAgICB1bmxvY2tCdWZmZXJNdXRleChXRUJLSVRfVklERU9f
U0lOSyhiYXNlX3NpbmspLT5wcml2KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0KEdzdEJhc2VTaW5rKiBiYXNlX3NpbmspIHsK
KyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFz
ZV9zaW5rKS0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwor
ICAgIHByaXYtPnVubG9ja2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtp
dF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbihHc3RCYXNlU2luayogYmFzZV9zaW5rLCBH
c3RRdWVyeSogcXVlcnkpIHsKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklE
RU9fU0lOSyhiYXNlX3NpbmspOworICAgIEdzdENhcHMqIGNhcHM7CisgICAgZ2Jvb2xlYW4gbmVl
ZF9wb29sOworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24ocXVlcnksICZjYXBzLCAm
bmVlZF9wb29sKTsKKworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisg
ICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnNpbmstPnByaXYtPmluZm8sIGNhcHMp
KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25f
bWV0YShxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJKTsKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9j
YXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX0NST1BfTUVUQV9BUEkpOworICAgIHJldHVybiBU
UlVFOworfQorCitzdGF0aWMgdm9pZCBtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QoR0Nsb3N1cmUq
IGNsb3N1cmUsIEdWYWx1ZSogcmV0dXJuVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ3VpbnQgcGFyYW1ldGVyc051bWJlciwgY29uc3QgR1ZhbHVlKiBwYXJhbWV0
ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGludm9j
YXRpb25IaW50LCBncG9pbnRlciBtYXJzaGFsRGF0YSkgeworICAgIHR5cGVkZWYgdm9pZCAoKm1h
cnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QpIChncG9pbnRlciBvYmplY3QsIGdwb2ludGVyIGFy
ZzEsIGdwb2ludGVyIGRhdGEyKTsKKyAgICBtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUIGNh
bGxiYWNrOworICAgIEdDQ2xvc3VyZSogY2MgPSAoR0NDbG9zdXJlICopIGNsb3N1cmU7CisgICAg
Z3BvaW50ZXIgZGF0YTEsIGRhdGEyOworCisgICAgZ19yZXR1cm5faWZfZmFpbChwYXJhbWV0ZXJz
TnVtYmVyID09IDIpOworCisgICAgaWYgKEdfQ0NMT1NVUkVfU1dBUF9EQVRBKGNsb3N1cmUpKSB7
CisgICAgICAgIGRhdGExID0gY2xvc3VyZS0+ZGF0YTsKKyAgICAgICAgZGF0YTIgPSBnX3ZhbHVl
X3BlZWtfcG9pbnRlcihwYXJhbWV0ZXJzICsgMCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZGF0
YTEgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlcihwYXJhbWV0ZXJzICsgMCk7CisgICAgICAgIGRhdGEy
ID0gY2xvc3VyZS0+ZGF0YTsKKyAgICB9CisgICAgY2FsbGJhY2sgPSAobWFyc2hhbGZ1bmNfVk9J
RF9fTUlOSU9CSkVDVCkgKG1hcnNoYWxEYXRhID8gbWFyc2hhbERhdGEgOiBjYy0+Y2FsbGJhY2sp
OworCisgICAgY2FsbGJhY2soZGF0YTEsIGdfdmFsdWVfZ2V0X2JveGVkKHBhcmFtZXRlcnMgKyAx
KSwgZGF0YTIpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0
KFdlYktpdFZpZGVvU2lua0NsYXNzKiBrbGFzcykgeworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RCYXNlU2lua0NsYXNzKiBn
c3RiYXNlX3NpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RF
bGVtZW50Q2xhc3MqIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisK
KyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRfY2xhc3MsIGdz
dF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1l
bnRfY2xhc3Nfc2V0X21ldGFkYXRhKGVsZW1lbnRfY2xhc3MsCisgICAgICAgICAgICAiV2ViS2l0
IHZpZGVvIHNpbmsiLAorICAgICAgICAgICAgIlNpbmsvVmlkZW8iLCAiU2VuZHMgdmlkZW8gZGF0
YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCisgICAgICAg
ICAgICAiQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKKworICAgIGdfdHlwZV9jbGFzc19h
ZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZhdGUpKTsKKworICAg
IGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlOworCisg
ICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxvY2sgPSB3ZWJraXRfdmlkZW9fc2lua191bmxvY2s7
CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxvY2tfc3RvcCA9IHdlYmtpdF92aWRlb19zaW5r
X3VubG9ja19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cmVuZGVyID0gd2Via2l0X3Zp
ZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJlcm9sbCA9IHdlYmtp
dF92aWRlb19zaW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnN0b3AgPSB3ZWJr
aXRfdmlkZW9fc2lua19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3RhcnQgPSB3ZWJr
aXRfdmlkZW9fc2lua19zdGFydDsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnByb3Bvc2VfYWxs
b2NhdGlvbiA9IHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbjsKKworICAgIHdl
YmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3
KCJyZXBhaW50LXJlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFz
cyksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFMX1JVTl9M
QVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsIC8vIENsYXNzIG9mZnNldC4K
KyAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxhdG9yLgorICAgICAgICAgICAgMCwgLy8gQWNjdW11
bGF0b3IgZGF0YS4KKyAgICAgICAgICAgIG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCwgLy8gQ3Vz
dG9tIG1hcnNoYWxsZXIuCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgLy8gUmV0dXJuIHR5cGUu
CisgICAgICAgICAgICAxLCAvLyBPbmx5IG9uZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICBHU1Rf
VFlQRV9CVUZGRVIpOworfQorCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoKSB7
CisgICAgcmV0dXJuIEdTVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19T
SU5LLCAwKSk7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9B
UElfVkVSU0lPTl8xKQotLSAKMS43LjkuMQ==
</data>
<flag name="commit-queue"
          id="131520"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128993</attachid>
            <date>2012-02-27 02:26:54 -0800</date>
            <delta_ts>2012-02-27 02:28:56 -0800</delta_ts>
            <desc>0.11 video-sink</desc>
            <filename>011-video-sink.patch</filename>
            <type>text/plain</type>
            <size>31345</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBiNjg2NDZmNzMwYjRlMjY4NWVlNjI2OWQyOGEwNDNlZmM4MDk1YmI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDEwOjQ3OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
MC4xMSB2aWRlby1zaW5rCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAzOSArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggICB8ICAgMTcgKy0KIC4uLi9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSAgICAgICAgIHwgICA2OSArKystCiAuLi4vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwICAgICB8ICAgNjIgKysrLQogLi4u
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCAgICAgICAgfCAgIDUwICsr
LQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAg
IDEwICstCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgICAg
ICB8ICAgIDIgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCAg
ICAgICAgfCAgICA1ICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVy
MS5jcHAgICAgIHwgIDM3NCArKysrKysrKysrKysrKysrKysrKwogMTEgZmlsZXMgY2hhbmdlZCwg
NTY2IGluc2VydGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFt
ZXIxLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNTg0NWZhLi5jYWRkYzI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsNDQgQEAKIDIwMTItMDItMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgogCisgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEgdmlkZW8tc2luaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwODcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06IEFkZCBuZXcgdmlkZW8gc2luayBjb2RlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaDogY3JlYXRlSW1hZ2UgQVBJ
CisgICAgICAgIHVwZGF0ZSBzbyBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byB1c2UKKyAg
ICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQg
aW4gZ3N0LTAuMTEuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tOgorICAgICAgICAoSW1hZ2VHU3RyZWFt
ZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1h
Z2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lclF0LmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6IEJ1aWxkIG9ubHkKKyAgICAgICAgZm9yIGdzdC0wLjEw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFt
ZXIuaDogTm8gbmVlZCBmb3IKKyAgICAgICAgR1N0cmVhbWVyR1dvcmxkIGluIHRoZSBnc3QtMC4x
MSB2aWRlbyBzaW5rLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1NpbmtHU3RyZWFtZXIxLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAuCisgICAgICAgIChfV2Vi
S2l0VmlkZW9TaW5rUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0
X2Z1bmMpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKToKKyAgICAgICAgKHdl
YmtpdF92aWRlb19zaW5rX2Rpc3Bvc2UpOgorICAgICAgICAodW5sb2NrQnVmZmVyTXV0ZXgpOgor
ICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKToKKyAgICAgICAgKHdlYmtpdF92aWRl
b19zaW5rX3VubG9ja19zdG9wKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0b3ApOgor
ICAgICAgICAod2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfcHJvcG9zZV9hbGxvY2F0aW9uKToKKyAgICAgICAgKG1hcnNoYWxfVk9JRF9fTUlOSU9C
SkVDVCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KToKKyAgICAgICAg
KHdlYmtpdF92aWRlb19zaW5rX25ldyk6CisKKzIwMTItMDItMjcgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEgc3VwcG9y
dCBpbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IDdiM2RlMzEuLjU1NTVkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtNDUzMyw2ICs0NTMzLDcgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvdy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Db2xvckd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMmE0OGYyNy4uNjEzOTgyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC0zMjQ0LDYgKzMyNDQsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklE
RU89MSkgewogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
clZlcnNpb25pbmcuYyBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBcCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgXAogICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRm
b3JtVmlkZW9XaW5kb3dRdC5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCmluZGV4IGFi
Nzk5YmEuLjBmMzdmOGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCkBAIC0zNiw3ICszNiw5IEBA
IGNsYXNzIEludFNpemU7CiAKIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50
ZWQ8SW1hZ2VHU3RyZWFtZXI+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEltYWdlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIs
IEdzdENhcHMqIGNhcHMpIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJl
YW1lcihidWZmZXIsIGNhcHMpKTsKKyAgICB9CiAgICAgICAgIH5JbWFnZUdTdHJlYW1lcigpOwog
CiAgICAgICAgIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlKCkKQEAgLTQ4LDE4ICs1MCw3
IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3RyZWFt
ZXI+IHsKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IG1faW1hZ2U7
CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJ
bnRTaXplLCBjYWlyb19mb3JtYXRfdCYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLSAg
ICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUsIFFJbWFnZTo6Rm9ybWF0
KTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihH
c3RCdWZmZXIqJiwgSW50U2l6ZSk7Ci0jZW5kaWYKLQorICAgICAgICBJbWFnZUdTdHJlYW1lcihH
c3RCdWZmZXIqJiwgR3N0Q2FwcyopOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
Q0cubW0KaW5kZXggZmUwOTI4Yi4uYzcyMmU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cu
bW0KQEAgLTI1LDI5ICsyNSw2OCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUGFz
c1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1
ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciom
IGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKKworI2lmZGVmIEdT
VF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3Rfdmlk
ZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRlb0Zvcm1h
dCBmb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdp
ZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9
IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcEluZm8gaW5m
bzsKKyAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOworICAg
IGNvbnN0IFVJbnQ4KiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+
KGluZm8uZGF0YSk7CisjZWxzZQogICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAg
R3N0Q2FwcyogY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAgICBHc3RWaWRl
b0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2Fw
cywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihj
YXBzKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGdzdF92aWRlb19mb3JtYXRf
cGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOwogCi0gICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdo
dCkpKTsKLX0KKyAgICBndWludCBidWZmZXJTaXplID0gR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcik7
CisgICAgY29uc3QgVUludDgqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVJ
bnQ4Kj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworI2VuZGlmCiAKLUltYWdlR1N0cmVhbWVy
OjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSkKLSAgICA6
IG1faW1hZ2UoMCkKLXsKLSAgICBBU1NFUlQoR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikpOworICAg
IEFTU0VSVChidWZmZXJTaXplKTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRv
cHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4o
R1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpLCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxs
b2NhdG9yTnVsbCkpOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZE
YXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGtDRkFs
bG9jYXRvck51bGwpKTsKICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHByb3ZpZGVy
KEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhLmdldCgpKSk7Ci0g
ICAgQ0dJbWFnZVJlZiBmcmFtZUltYWdlID0gQ0dJbWFnZUNyZWF0ZShzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksIDgsIDMyLCBzaXplLndpZHRoKCkqNCwgZGV2aWNlUkdCQ29sb3JTcGFjZVJl
ZigpLAotICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFG
aXJzdCwgcHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0
KTsKKworICAgIHNpemVfdCBiaXRzUGVyQ29tcG9uZW50ID0gODsKKyAgICBzaXplX3QgYml0c1Bl
clBpeGVsOworICAgIHNpemVfdCBieXRlc1BlclJvdzsKKyAgICBDR0JpdG1hcEluZm8gYml0bWFw
SW5mbzsKKworI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9y
bWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NH
Qml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICAgICAgYml0
c1BlclBpeGVsID0gMzI7CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0OworICAgIH0g
ZWxzZSB7CisgICAgICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8
IGtDR0ltYWdlQWxwaGFOb25lOworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAyNDsKKyAgICAgICAg
Ynl0ZXNQZXJSb3cgPSB3aWR0aCAqIDM7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09
IEdTVF9WSURFT19GT1JNQVRfQVJHQikgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFw
Qnl0ZU9yZGVyMzJCaWcgfCBrQ0dJbWFnZUFscGhhRmlyc3Q7CisgICAgICAgIGJpdHNQZXJQaXhl
bCA9IDMyOworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcgfCBrQ0dJbWFnZUFs
cGhhTm9uZTsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5dGVzUGVyUm93
ID0gd2lkdGggKiAzOworICAgIH0KKyNlbmRpZgorCisgICAgQ0dJbWFnZVJlZiBmcmFtZUltYWdl
ID0gQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBiaXRzUGVyQ29tcG9uZW50LCBiaXRzUGVy
UGl4ZWwsIGJ5dGVzUGVyUm93LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8s
IHByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiAg
ICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoZnJhbWVJbWFnZSk7CisKKyNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7Cisj
ZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFt
ZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKaW5kZXggOGIzYTA3Ni4uNTZjZjRmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcApAQCAtMjIsNDAgKzIyLDY4IEBACiAKICNpZiBF
TkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05f
MQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiAjaW5jbHVk
ZSAiR093blB0ci5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVh
dGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7
CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOwor
ICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKKworICAgIEdz
dFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKTsK
KyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAgICBp
bnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pOworCisgICAgR3N0
TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJm1hcEluZm8sIEdT
VF9NQVBfUkVBRCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwSW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5zaWdu
ZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KEdT
VF9CVUZGRVJfREFUQShidWZmZXIpKTsKICAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0
VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBz
KGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5y
ZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGdzdF9jYXBzX3VucmVm
KGNhcHMpOworICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAm
d2lkdGgsICZoZWlnaHQpOworI2VuZGlmCiAKICAgICBjYWlyb19mb3JtYXRfdCBjYWlyb0Zvcm1h
dDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0g
R1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJ
QU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKICAgICAgICAgY2Fp
cm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwogICAgIGVsc2UKICAgICAgICAgY2Fpcm9G
b3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NU
X1ZJREVPX0ZPUk1BVF9BUkdCKQorICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9B
UkdCMzI7CisgICAgZWxzZQorICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0Iy
NDsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZm
ZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGNhaXJvRm9ybWF0KSk7Ci19CisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RS
SURFKCZ2aWRlb0luZm8sIDApOworI2Vsc2UKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0
X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3JtYXQsIHdpZHRoKTsKKyNlbmRpZgogCi1JbWFnZUdT
dHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUs
IGNhaXJvX2Zvcm1hdF90JiBjYWlyb0Zvcm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3Jf
ZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgY2Fpcm9Gb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKGNhaXJvRm9ybWF0LCBzaXplLndp
ZHRoKCkpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZV9mb3JfZGF0YShidWZmZXJEYXRhLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgPT0g
Q0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRl
KHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKworICAgIEdzdFZpZGVvQ3Jv
cE1ldGEqIGNyb3BNZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fY3JvcF9tZXRhKGJ1ZmZlcik7
CisgICAgaWYgKGNyb3BNZXRhKQorICAgICAgICBtX2ltYWdlLT5jcm9wKEludFJlY3QoY3JvcE1l
dGEtPngsIGNyb3BNZXRhLT55LCBjcm9wTWV0YS0+d2lkdGgsIGNyb3BNZXRhLT5oZWlnaHQpKTsK
KworICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmbWFwSW5mbyk7CisjZW5kaWYKIH0KIAog
SW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJR
dC5jcHAKaW5kZXggMTg4YzBiYi4uY2M4YzEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0
LmNwcApAQCAtMjYsMzQgKzI2LDQ4IEBACiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVh
bWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFn
ZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2lt
YWdlKDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBj
YXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAgIEdzdFZpZGVvRm9ybWF0IGZv
cm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0
LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFw
OworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsK
KyAgICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CiAKLSAgICBn
c3RfY2Fwc191bnJlZihjYXBzKTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklE
RU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVPX0lO
Rk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hF
SUdIVCgmdmlkZW9JbmZvKTsKIAorICAgIEdzdE1hcEluZm8gaW5mbzsKKyAgICBnc3RfYnVmZmVy
X21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOworICAgIHVjaGFyKiBidWZmZXJEYXRh
ID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGluZm8uZGF0YSk7CisjZWxzZQorICAgIHVjaGFy
KiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KEdTVF9CVUZGRVJfREFUQShi
dWZmZXIpKTsKKyAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIEdzdFZpZGVvRm9y
bWF0IGZvcm1hdDsKKyAgICBnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1h
dCwgJndpZHRoLCAmaGVpZ2h0KTsKKyNlbmRpZgogICAgIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9y
bWF0OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9SR0IpCisjaWYgR19CWVRF
X09SREVSID09IEdfTElUVExFX0VORElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZP
Uk1BVF9CR1JBKQorICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwor
ICAgIGVsc2UKICAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7Cisj
ZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQorICAgICAgICBp
bWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMjsKICAgICBlbHNlCi0gICAgICAgIGlt
YWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisgICAgICAgIGltYWdlRm9ybWF0ID0g
UUltYWdlOjpGb3JtYXRfUkdCODg4OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgaW1hZ2VGb3Jt
YXQpKTsKLX0KKyAgICBRSW1hZ2UgaW1hZ2UoYnVmZmVyRGF0YSwgd2lkdGgsIGhlaWdodCwgaW1h
Z2VGb3JtYXQpOwogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYg
YnVmZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0KQotICAgIDog
bV9pbWFnZSgwKQotewotICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKLSAgICBR
SW1hZ2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2UtPmNvbnZlcnRGcm9tSW1hZ2UoaW1h
Z2UpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZk
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJmluZm8p
OworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA2ZjdjYWFl
Li4xNzU1NTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcApAQCAtMTUwOCw3ICsxNTA4LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmCiAg
ICAgaWYgKCFtX2J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEltYWdlR1N0
cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShtX2J1ZmZlcik7
CisgICAgR3N0Q2FwcyogY2FwcyA9IHdlYmtpdF9nc3RfZWxlbWVudF9nZXRfcGFkX2NhcHMobV93
ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6
OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKICAgICBpZiAoIWdzdEltYWdlKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTE3MzksNyArMTc0MywxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3Bs
YXlCaW4sICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWaWRl
b0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5Qmlu
LCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlQXVkaW9DaGFu
Z2VkQ2FsbGJhY2spLCB0aGlzKTsKIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIG1f
d2Via2l0VmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KG1fZ3N0R1dvcmxkLmdldCgp
KTsKKyNlbHNlCisgICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRfdmlkZW9fc2lua19uZXco
KTsKKyNlbmRpZgogCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYmtpdFZpZGVvU2luaywgInJl
cGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2Fs
bGJhY2spLCB0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRleCA0
MzYzMDM2Li4zMjIzNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZpZGVvU2lua0dT
dHJlYW1lci5oIgogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKyNpZm5kZWYg
R1NUX0FQSV9WRVJTSU9OXzEKIAogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxnc3QvZ3N0
Lmg+CkBAIC0zOTgsNCArMzk5LDUgQEAgR3N0RWxlbWVudCogd2Via2l0X3ZpZGVvX3NpbmtfbmV3
KFdlYkNvcmU6OkdTdHJlYW1lckdXb3JsZCogZ3N0R1dvcmxkKQogICAgIHJldHVybiBlbGVtZW50
OwogfQogCisjZW5kaWYgLy8gR1NUX0FQSV9WRVJTSU9OXzEKICNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCmluZGV4IDUwMTg1MGYuLjc5ZjdlZDVi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VmlkZW9TaW5rR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5j
bHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNs
dWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVv
Lmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtNzUsNyArNzYsMTEgQEAgc3RydWN0IF9XZWJLaXRW
aWRlb1NpbmtDbGFzcyB7CiAKIAogR1R5cGUgICAgICAgd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3R5
cGUodm9pZCkgR19HTlVDX0NPTlNUOworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogR3N0RWxl
bWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1lckdXb3JsZCopOwor
I2Vsc2UKK0dzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldygpOworI2VuZGlmCiAKIEdf
RU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDkzYmUwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
cjEuY3BwCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwNyBPcGVu
ZWRIYW5kCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+
CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwKKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8qCisgKgorICogV2ViS2l0VmlkZW9TaW5r
IGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHRyaWdnZXJzCisgKiByZXBhaW50cyBp
biB0aGUgV2ViS2l0IEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIgZm9yIHRoZQorICogY3VycmVudCB2
aWRlbyBidWZmZXIuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVTRShHU1RSRUFN
RVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisjaW5jbHVkZSAiVmlkZW9TaW5rR1N0
cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2lu
Y2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0
dmlkZW9wb29sLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8d3Rm
L0Zhc3RBbGxvY0Jhc2UuaD4KKworLy8gQ0FJUk9fRk9STUFUX1JHQjI0IHVzZWQgdG8gcmVuZGVy
IHRoZSB2aWRlbyBidWZmZXJzIGlzIGxpdHRsZS9iaWcgZW5kaWFuIGRlcGVuZGFudC4KKyNpZiBH
X0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxh
dGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLCBHU1RfUEFE
X1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNfTUFL
RSgieyBCR1J4LCBCR1JBIH0iKSkpOworI2Vsc2UKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0
ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsIEdTVF9QQURf
U0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQU19NQUtF
KCJ7IHhSR0IsIEFSR0IgfSIpKSk7CisjZW5kaWYKKworCitHU1RfREVCVUdfQ0FURUdPUllfU1RB
VElDKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF92aWRlb19zaW5rX2RlYnVnCisKK2VudW0geworICAgIFJFUEFJTlRfUkVRVUVTVEVELAor
ICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsKKyAgICBQUk9QXzAKK307CisKK3N0YXRpYyBn
dWludCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKwor
c3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIHsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsK
KyAgICBndWludCB0aW1lb3V0X2lkOworICAgIEdNdXRleCogYnVmZmVyX211dGV4OworICAgIEdD
b25kKiBkYXRhX2NvbmQ7CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisKKyAgICAvLyBJZiB0aGlz
IGlzIFRSVUUgYWxsIHByb2Nlc3Npbmcgc2hvdWxkIGZpbmlzaCBBU0FQCisgICAgLy8gVGhpcyBp
cyBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHJhY2UgYmV0d2VlbgorICAgIC8v
IHVubG9jaygpIGFuZCByZW5kZXIoKSwgd2hlcmUgdW5sb2NrKCkgd2lucywgc2lnbmFscyB0aGUK
KyAgICAvLyBHQ29uZCwgdGhlbiByZW5kZXIoKSB0cmllcyB0byByZW5kZXIgYSBmcmFtZSBhbHRo
b3VnaAorICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBpc24ndCBydW5uaW5nIGFueW1vcmUuIFRoaXMg
d2lsbCBsZWFkCisgICAgLy8gdG8gZGVhZGxvY2tzIGJlY2F1c2UgcmVuZGVyKCkgaG9sZHMgdGhl
IHN0cmVhbSBsb2NrLgorICAgIC8vCisgICAgLy8gUHJvdGVjdGVkIGJ5IHRoZSBidWZmZXIgbXV0
ZXgKKyAgICBib29sIHVubG9ja2VkOworfTsKKworI2RlZmluZSB3ZWJraXRfdmlkZW9fc2lua19w
YXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRW
aWRlb1NpbmssIHdlYmtpdF92aWRlb19zaW5rLCBHU1RfVFlQRV9WSURFT19TSU5LLCBHU1RfREVC
VUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZywgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ3ZWJraXRzaW5rIiwgXAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0IHZpZGVvIHNpbmsi
KSk7CisKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfaW5pdChXZWJLaXRWaWRlb1Np
bmsqIHNpbmspCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdjsKKworICAgIHNp
bmstPnByaXYgPSBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNpbmssIFdFQktJ
VF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVvU2lua1ByaXZhdGUpOworICAgIHByaXYtPmRh
dGFfY29uZCA9IFdURjo6ZmFzdE5ldzxHQ29uZD4oKTsKKyAgICBnX2NvbmRfaW5pdChwcml2LT5k
YXRhX2NvbmQpOworICAgIHByaXYtPmJ1ZmZlcl9tdXRleCA9IFdURjo6ZmFzdE5ldzxHTXV0ZXg+
KCk7CisgICAgZ19tdXRleF9pbml0KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ3N0X3ZpZGVv
X2luZm9faW5pdCgmcHJpdi0+aW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlk
ZW9fc2lua190aW1lb3V0X2Z1bmMoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRWaWRlb1Np
bmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdlYktpdFZpZGVvU2luayo+KGRhdGEpOworICAg
IFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworICAgIEdzdEJ1ZmZl
ciogYnVmZmVyOworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAg
YnVmZmVyID0gcHJpdi0+YnVmZmVyOworICAgIHByaXYtPmJ1ZmZlciA9IDA7CisgICAgcHJpdi0+
dGltZW91dF9pZCA9IDA7CisKKyAgICBpZiAoIWJ1ZmZlciB8fCBwcml2LT51bmxvY2tlZCB8fCBV
TkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkgeworICAgICAgICBnX2NvbmRfc2lnbmFs
KHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9t
dXRleCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBnX3NpZ25hbF9lbWl0
KHNpbmssIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdLCAwLCBi
dWZmZXIpOworICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICBnX2NvbmRfc2lnbmFs
KHByaXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4
KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0
X3ZpZGVvX3NpbmtfcmVuZGVyKEdzdEJhc2VTaW5rKiBic2luaywgR3N0QnVmZmVyKiBidWZmZXIp
Cit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYnNpbmsp
OworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAg
Z19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+dW5sb2Nr
ZWQpIHsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIHByaXYtPmJ1ZmZlciA9IGdzdF9i
dWZmZXJfcmVmKGJ1ZmZlcik7CisKKyAgICBHc3RWaWRlb0ZyYW1lIGZyYW1lOworICAgIGlmICgh
Z3N0X3ZpZGVvX2ZyYW1lX21hcCgmZnJhbWUsICZwcml2LT5pbmZvLCBidWZmZXIsIEdTVF9NQVBf
UkVBRCkpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgICAgICBnX211
dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1df
RVJST1I7CisgICAgfQorCisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVPX0ZS
QU1FX0ZPUk1BVCgmZnJhbWUpOworICAgIGludCB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURU
SCgmZnJhbWUpOworICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUKCZmcmFt
ZSk7CisKKyAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAoJmZyYW1lKTsKKworICAgIC8vIENhaXJv
J3MgQVJHQiBoYXMgcHJlLW11bHRpcGxpZWQgYWxwaGEgd2hpbGUgR1N0cmVhbWVyJ3MgZG9lc24n
dC4KKyAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdG8gQ2Fpcm8ncyBBUkdCLgorICAgIGlmIChmb3Jt
YXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFU
X0JHUkEpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBHc3RCYXNlU2luazo6cmVuZGVyKCkgb25seSBv
d25zIHRoZSBidWZmZXIgcmVmZXJlbmNlIGluIHRoZQorICAgICAgICAvLyBtZXRob2Qgc2NvcGUg
d2UgY2FuJ3QgdXNlIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIGhlcmUuIEFsc28KKyAgICAg
ICAgLy8gVGhlIGJ1ZmZlciBjb250ZW50IHNob3VsZCBub3QgYmUgY2hhbmdlZCBoZXJlIGJlY2F1
c2UgdGhlIHNhbWUgYnVmZmVyCisgICAgICAgIC8vIGNvdWxkIGJlIHBhc3NlZCBtdWx0aXBsZSB0
aW1lcyB0byB0aGlzIG1ldGhvZCAoaW4gdGhlb3J5KS4KKyAgICAgICAgZ3NpemUgYnVmZmVyU2l6
ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKyAgICAgICAgR3N0QnVmZmVyKiBuZXdC
dWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MoYnVmZmVyU2l6ZSk7CisKKyAgICAgICAg
Ly8gQ2hlY2sgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAgIGlmIChVTkxJS0VMWSghbmV3
QnVmZmVyKSkgeworICAgICAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4
KTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgICAgICAgfQorCisgICAg
ICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1ZmZlciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxH
c3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSksIDAsIGJ1ZmZlclNp
emUpOworCisgICAgICAgIC8vIFdlIGRvbid0IHVzZSBDb2xvcjo6cHJlbXVsdGlwbGllZEFSR0JG
cm9tQ29sb3IoKSBoZXJlIGJlY2F1c2UKKyAgICAgICAgLy8gb25lIGZ1bmN0aW9uIGNhbGwgcGVy
IHZpZGVvIHBpeGVsIGlzIGp1c3QgdG9vIGV4cGVuc2l2ZToKKyAgICAgICAgLy8gRm9yIDcyMHAv
UEFMIGZvciBleGFtcGxlIHRoaXMgbWVhbnMgMTI4MCo3MjAqMjU9MjMwNDAwMDAKKyAgICAgICAg
Ly8gZnVuY3Rpb24gY2FsbHMgcGVyIHNlY29uZCEKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgYWxw
aGE7CisgICAgICAgIEdzdE1hcEluZm8gc291cmNlSW5mbzsKKyAgICAgICAgR3N0TWFwSW5mbyBk
ZXN0aW5hdGlvbkluZm87CisgICAgICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJnNvdXJjZUlu
Zm8sIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGNvbnN0IGd1aW50OCogc291cmNlID0gY29uc3Rf
Y2FzdDxndWludDgqPihzb3VyY2VJbmZvLmRhdGEpOworICAgICAgICBnc3RfYnVmZmVyX21hcChu
ZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8sIEdTVF9NQVBfV1JJVEUpOworICAgICAgICBndWlu
dDgqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8Z3VpbnQ4Kj4oZGVzdGluYXRpb25JbmZvLmRh
dGEpOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaGVpZ2h0OyB4KyspIHsKKyAgICAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgd2lkdGg7IHkrKykgeworI2lmIEdfQllURV9PUkRF
UiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgICAgICAgICBhbHBoYSA9IHNvdXJjZVszXTsK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IChzb3VyY2VbMF0gKiBhbHBoYSArIDEy
OCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMV0gPSAoc291cmNlWzFdICog
YWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gKHNv
dXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlv
blszXSA9IGFscGhhOworI2Vsc2UKKyAgICAgICAgICAgICAgICBhbHBoYSA9IHNvdXJjZVswXTsK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IGFscGhhOworICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSArIDEyOCkgLyAy
NTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSAoc291cmNlWzNdICogYWxwaGEg
KyAxMjgpIC8gMjU1OworI2VuZGlmCisgICAgICAgICAgICAgICAgc291cmNlICs9IDQ7CisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJnNvdXJjZUluZm8pOworICAgICAgICBn
c3RfYnVmZmVyX3VubWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0aW9uSW5mbyk7CisKKyAgICAgICAg
Z3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgICAgICBidWZmZXIgPSBwcml2LT5idWZmZXIg
PSBuZXdCdWZmZXI7CisgICAgfQorCisKKyAgICAvLyBUaGlzIHNob3VsZCBsaWtlbHkgdXNlIGEg
bG93ZXIgcHJpb3JpdHksIGJ1dCBnbGliIGN1cnJlbnRseSBzdGFydmVzCisgICAgLy8gbG93ZXIg
cHJpb3JpdHkgc291cmNlcy4KKyAgICAvLyBTZWU6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MTA4MzAuCisgICAgcHJpdi0+dGltZW91dF9pZCA9IGdfdGltZW91
dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0X2Z1bmMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3JlZihzaW5r
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdzdF9vYmplY3RfdW5yZWYpKTsKKworICAgIGdfY29uZF93
YWl0KHByaXYtPmRhdGFfY29uZCwgcHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBnX211dGV4X3Vu
bG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsK
KyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKworICAgIGlm
IChwcml2LT5kYXRhX2NvbmQpIHsKKyAgICAgICAgZ19jb25kX2NsZWFyKHByaXYtPmRhdGFfY29u
ZCk7CisgICAgICAgIFdURjo6ZmFzdERlbGV0ZShwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBw
cml2LT5kYXRhX2NvbmQgPSAwOworICAgIH0KKworICAgIGlmIChwcml2LT5idWZmZXJfbXV0ZXgp
IHsKKyAgICAgICAgZ19tdXRleF9jbGVhcihwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBX
VEY6OmZhc3REZWxldGUocHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgcHJpdi0+YnVmZmVy
X211dGV4ID0gMDsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5k
aXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja0J1ZmZlck11dGV4KFdlYktp
dFZpZGVvU2lua1ByaXZhdGUqIHByaXYpCit7CisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZl
cl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+YnVmZmVyKSB7CisgICAgICAgIGdzdF9idWZmZXJf
dW5yZWYocHJpdi0+YnVmZmVyKTsKKyAgICAgICAgcHJpdi0+YnVmZmVyID0gMDsKKyAgICB9CisK
KyAgICBwcml2LT51bmxvY2tlZCA9IHRydWU7CisKKyAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRh
dGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKK30KKwor
c3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9jayhHc3RCYXNlU2luayogb2Jq
ZWN0KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9i
amVjdCk7CisKKyAgICB1bmxvY2tCdWZmZXJNdXRleChzaW5rLT5wcml2KTsKKworICAgIHJldHVy
biBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVubG9j
aywgKG9iamVjdCksIFRSVUUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Np
bmtfdW5sb2NrX3N0b3AoR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1Np
bmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KS0+cHJpdjsKKworICAg
IGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHByaXYtPnVubG9ja2VkID0g
ZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIHJl
dHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVu
bG9ja19zdG9wLCAob2JqZWN0KSwgVFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
dmlkZW9fc2lua19zdG9wKEdzdEJhc2VTaW5rKiBiYXNlX3NpbmspCit7CisgICAgdW5sb2NrQnVm
ZmVyTXV0ZXgoV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdik7CisgICAgcmV0dXJu
IFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19zdGFydChHc3RC
YXNlU2luayogYmFzZV9zaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYg
PSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2OworCisgICAgZ19tdXRleF9sb2Nr
KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJpdi0+dW5sb2NrZWQgPSBmYWxzZTsKKyAgICBn
X211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfcHJvcG9zZV9hbGxvY2F0aW9uKEdz
dEJhc2VTaW5rKiBiYXNlX3NpbmssIEdzdFF1ZXJ5KiBxdWVyeSkKK3sKKyAgICBXZWJLaXRWaWRl
b1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspOworICAgIEdzdENhcHMq
IGNhcHM7CisgICAgZ2Jvb2xlYW4gbmVlZF9wb29sOworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2Fs
bG9jYXRpb24ocXVlcnksICZjYXBzLCAmbmVlZF9wb29sKTsKKworICAgIGlmICghY2FwcykKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMo
JnNpbmstPnByaXYtPmluZm8sIGNhcHMpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBn
c3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJKTsK
KyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX0NST1Bf
TUVUQV9BUEkpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBtYXJzaGFsX1ZP
SURfX01JTklPQkpFQ1QoR0Nsb3N1cmUqIGNsb3N1cmUsIEdWYWx1ZSogcmV0dXJuVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcGFyYW1ldGVyc051bWJl
ciwgY29uc3QgR1ZhbHVlKiBwYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyIGludm9jYXRpb25IaW50LCBncG9pbnRlciBtYXJzaGFsRGF0YSkK
K3sKKyAgICB0eXBlZGVmIHZvaWQgKCptYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUKSAoZ3Bv
aW50ZXIgb2JqZWN0LCBncG9pbnRlciBhcmcxLCBncG9pbnRlciBkYXRhMik7CisgICAgbWFyc2hh
bGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCBjYWxsYmFjazsKKyAgICBHQ0Nsb3N1cmUqIGNjID0gKEdD
Q2xvc3VyZSAqKSBjbG9zdXJlOworICAgIGdwb2ludGVyIGRhdGExLCBkYXRhMjsKKworICAgIGdf
cmV0dXJuX2lmX2ZhaWwocGFyYW1ldGVyc051bWJlciA9PSAyKTsKKworICAgIGlmIChHX0NDTE9T
VVJFX1NXQVBfREFUQShjbG9zdXJlKSkgeworICAgICAgICBkYXRhMSA9IGNsb3N1cmUtPmRhdGE7
CisgICAgICAgIGRhdGEyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIocGFyYW1ldGVycyArIDApOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGRhdGExID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIocGFyYW1l
dGVycyArIDApOworICAgICAgICBkYXRhMiA9IGNsb3N1cmUtPmRhdGE7CisgICAgfQorICAgIGNh
bGxiYWNrID0gKG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QpIChtYXJzaGFsRGF0YSA/IG1h
cnNoYWxEYXRhIDogY2MtPmNhbGxiYWNrKTsKKworICAgIGNhbGxiYWNrKGRhdGExLCBnX3ZhbHVl
X2dldF9ib3hlZChwYXJhbWV0ZXJzICsgMSksIGRhdGEyKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3Mp
OworICAgIEdzdEJhc2VTaW5rQ2xhc3MqIGdzdGJhc2Vfc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJ
TktfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudF9jbGFzcyA9IEdT
VF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRf
dGVtcGxhdGUoZWxlbWVudF9jbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzaW5r
VGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEoZWxlbWVudF9j
bGFzcywKKyAgICAgICAgICAgICJXZWJLaXQgdmlkZW8gc2luayIsCisgICAgICAgICAgICAiU2lu
ay9WaWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8g
YSBDYWlybyBzdXJmYWNlIiwKKyAgICAgICAgICAgICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PiIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0
VmlkZW9TaW5rUHJpdmF0ZSkpOworCisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtp
dF92aWRlb19zaW5rX2Rpc3Bvc2U7CisKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVubG9jayA9
IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVubG9j
a19zdG9wID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3A7CisgICAgZ3N0YmFzZV9zaW5r
X2NsYXNzLT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CisgICAgZ3N0YmFzZV9z
aW5rX2NsYXNzLT5wcmVyb2xsID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJh
c2Vfc2lua19jbGFzcy0+c3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7CisgICAgZ3N0YmFz
ZV9zaW5rX2NsYXNzLT5zdGFydCA9IHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0OworICAgIGdzdGJh
c2Vfc2lua19jbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uID0gd2Via2l0X3ZpZGVvX3NpbmtfcHJv
cG9zZV9hbGxvY2F0aW9uOworCisgICAgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5U
X1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQtcmVxdWVzdGVkIiwKKyAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdT
aWduYWxGbGFncz4oR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAg
ICAgICAgMCwgLy8gQ2xhc3Mgb2Zmc2V0LgorICAgICAgICAgICAgMCwgLy8gQWNjdW11bGF0b3Iu
CisgICAgICAgICAgICAwLCAvLyBBY2N1bXVsYXRvciBkYXRhLgorICAgICAgICAgICAgbWFyc2hh
bF9WT0lEX19NSU5JT0JKRUNULCAvLyBDdXN0b20gbWFyc2hhbGxlci4KKyAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAvLyBSZXR1cm4gdHlwZS4KKyAgICAgICAgICAgIDEsIC8vIE9ubHkgb25lIHBh
cmFtZXRlci4KKyAgICAgICAgICAgIEdTVF9UWVBFX0JVRkZFUik7Cit9CisKK0dzdEVsZW1lbnQq
IHdlYmtpdF92aWRlb19zaW5rX25ldygpCit7CisgICAgcmV0dXJuIEdTVF9FTEVNRU5UKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9CisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQotLSAKMS43LjkuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128995</attachid>
            <date>2012-02-27 02:28:56 -0800</date>
            <delta_ts>2012-02-27 02:35:33 -0800</delta_ts>
            <desc>0.11 video-sink</desc>
            <filename>011-video-sink.patch</filename>
            <type>text/plain</type>
            <size>31351</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBhMmQ0ZDQ3MDhjNjQxMzg4NDE4ODlkMzE2YzhhYTQ3NzgwY2I1MGE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDEwOjQ3OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
MC4xMSB2aWRlby1zaW5rCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAzOSArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggICB8ICAgMTggKy0KIC4uLi9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSAgICAgICAgIHwgICA2OSArKystCiAuLi4vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwICAgICB8ICAgNjIgKysrLQogLi4u
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCAgICAgICAgfCAgIDUwICsr
LQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAg
IDEwICstCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgICAg
ICB8ICAgIDIgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCAg
ICAgICAgfCAgICA1ICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVy
MS5jcHAgICAgIHwgIDM3NCArKysrKysrKysrKysrKysrKysrKwogMTEgZmlsZXMgY2hhbmdlZCwg
NTY3IGluc2VydGlvbnMoKyksIDY0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFt
ZXIxLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkNTg0NWZhLi5jYWRkYzI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDUgKzEsNDQgQEAKIDIwMTItMDItMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgogCisgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEgdmlkZW8tc2luaworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzcwODcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06IEFkZCBuZXcgdmlkZW8gc2luayBjb2RlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaDogY3JlYXRlSW1hZ2UgQVBJ
CisgICAgICAgIHVwZGF0ZSBzbyBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byB1c2UKKyAg
ICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQg
aW4gZ3N0LTAuMTEuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tOgorICAgICAgICAoSW1hZ2VHU3RyZWFt
ZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1h
Z2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lclF0LmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6IEJ1aWxkIG9ubHkKKyAgICAgICAgZm9yIGdzdC0wLjEw
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFt
ZXIuaDogTm8gbmVlZCBmb3IKKyAgICAgICAgR1N0cmVhbWVyR1dvcmxkIGluIHRoZSBnc3QtMC4x
MSB2aWRlbyBzaW5rLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1NpbmtHU3RyZWFtZXIxLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAuCisgICAgICAgIChfV2Vi
S2l0VmlkZW9TaW5rUHJpdmF0ZSk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0
X2Z1bmMpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKToKKyAgICAgICAgKHdl
YmtpdF92aWRlb19zaW5rX2Rpc3Bvc2UpOgorICAgICAgICAodW5sb2NrQnVmZmVyTXV0ZXgpOgor
ICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKToKKyAgICAgICAgKHdlYmtpdF92aWRl
b19zaW5rX3VubG9ja19zdG9wKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0b3ApOgor
ICAgICAgICAod2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfcHJvcG9zZV9hbGxvY2F0aW9uKToKKyAgICAgICAgKG1hcnNoYWxfVk9JRF9fTUlOSU9C
SkVDVCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KToKKyAgICAgICAg
KHdlYmtpdF92aWRlb19zaW5rX25ldyk6CisKKzIwMTItMDItMjcgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEgc3VwcG9y
dCBpbiBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIKICAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IDdiM2RlMzEuLjU1NTVkMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtNDUzMyw2ICs0NTMzLDcgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvdy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Db2xvckd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBi
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggMmE0OGYyNy4uNjEzOTgyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC0zMjQ0LDYgKzMyNDQsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfVklE
RU89MSkgewogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
clZlcnNpb25pbmcuYyBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBcCisgICAgICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgXAogICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJl
YW1lci5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRm
b3JtVmlkZW9XaW5kb3dRdC5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCmluZGV4IGFi
Nzk5YmEuLjdlMjUxNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCkBAIC0zNiw3ICszNiwxMCBA
QCBjbGFzcyBJbnRTaXplOwogCiBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVy
LCBHc3RDYXBzKiBjYXBzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFn
ZUdTdHJlYW1lcihidWZmZXIsIGNhcHMpKTsKKyAgICB9CiAgICAgICAgIH5JbWFnZUdTdHJlYW1l
cigpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlKCkKQEAgLTQ4LDE4
ICs1MSw3IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VH
U3RyZWFtZXI+IHsKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IG1f
aW1hZ2U7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZl
ciomLCBJbnRTaXplLCBjYWlyb19mb3JtYXRfdCYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShR
VCkKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUsIFFJbWFnZTo6
Rm9ybWF0KTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBJbWFnZUdTdHJl
YW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSk7Ci0jZW5kaWYKLQorICAgICAgICBJbWFnZUdTdHJl
YW1lcihHc3RCdWZmZXIqJiwgR3N0Q2FwcyopOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNH
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ0cubW0KaW5kZXggZmUwOTI4Yi4uYzcyMmU4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyQ0cubW0KQEAgLTI1LDI5ICsyNSw2OCBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdl
KEdzdEJ1ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1
ZmZlciomIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKKworI2lm
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBn
c3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRl
b0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAg
aW50IHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhl
aWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcElu
Zm8gaW5mbzsKKyAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQp
OworICAgIGNvbnN0IFVJbnQ4KiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBV
SW50OCo+KGluZm8uZGF0YSk7CisjZWxzZQogICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7
Ci0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAgICBH
c3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2Nh
cHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191
bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGdzdF92aWRlb19m
b3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOwogCi0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgs
IGhlaWdodCkpKTsKLX0KKyAgICBndWludCBidWZmZXJTaXplID0gR1NUX0JVRkZFUl9TSVpFKGJ1
ZmZlcik7CisgICAgY29uc3QgVUludDgqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PGNv
bnN0IFVJbnQ4Kj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworI2VuZGlmCiAKLUltYWdlR1N0
cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSkK
LSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBBU1NFUlQoR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikp
OworICAgIEFTU0VSVChidWZmZXJTaXplKTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRh
dGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJ
bnQ4Kj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpLCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwg
a0NGQWxsb2NhdG9yTnVsbCkpOworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRD
RiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUs
IGtDRkFsbG9jYXRvck51bGwpKTsKICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHBy
b3ZpZGVyKEFkb3B0Q0YsIENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhLmdldCgp
KSk7Ci0gICAgQ0dJbWFnZVJlZiBmcmFtZUltYWdlID0gQ0dJbWFnZUNyZWF0ZShzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIDgsIDMyLCBzaXplLndpZHRoKCkqNCwgZGV2aWNlUkdCQ29sb3JT
cGFjZVJlZigpLAotICAgICAgICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdl
QWxwaGFGaXJzdCwgcHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KTsKKworICAgIHNpemVfdCBiaXRzUGVyQ29tcG9uZW50ID0gODsKKyAgICBzaXplX3Qg
Yml0c1BlclBpeGVsOworICAgIHNpemVfdCBieXRlc1BlclJvdzsKKyAgICBDR0JpdG1hcEluZm8g
Yml0bWFwSW5mbzsKKworI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBp
ZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkgeworICAgICAgICBiaXRtYXBJbmZv
ID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICAg
ICAgYml0c1BlclBpeGVsID0gMzI7CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0Owor
ICAgIH0gZWxzZSB7CisgICAgICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxp
dHRsZSB8IGtDR0ltYWdlQWxwaGFOb25lOworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAyNDsKKyAg
ICAgICAgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDM7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZm9y
bWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQikgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NH
Qml0bWFwQnl0ZU9yZGVyMzJCaWcgfCBrQ0dJbWFnZUFscGhhRmlyc3Q7CisgICAgICAgIGJpdHNQ
ZXJQaXhlbCA9IDMyOworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVs
c2UgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcgfCBrQ0dJ
bWFnZUFscGhhTm9uZTsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5dGVz
UGVyUm93ID0gd2lkdGggKiAzOworICAgIH0KKyNlbmRpZgorCisgICAgQ0dJbWFnZVJlZiBmcmFt
ZUltYWdlID0gQ0dJbWFnZUNyZWF0ZSh3aWR0aCwgaGVpZ2h0LCBiaXRzUGVyQ29tcG9uZW50LCBi
aXRzUGVyUGl4ZWwsIGJ5dGVzUGVyUm93LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1h
cEluZm8sIHByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCk7CiAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoZnJhbWVJbWFnZSk7CisKKyNp
ZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5m
byk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VH
U3RyZWFtZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKaW5kZXggOGIzYTA3Ni4uNTZjZjRmMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdl
R1N0cmVhbWVyQ2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcApAQCAtMjIsNDAgKzIyLDY4IEBACiAK
ICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpZmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiAj
aW5jbHVkZSAiR093blB0ci5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVy
OjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdT
dHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdl
KDApCiB7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9J
bmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKKwor
ICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9J
bmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsK
KyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pOworCisg
ICAgR3N0TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJm1hcElu
Zm8sIEdTVF9NQVBfUkVBRCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwSW5mby5kYXRhKTsKKyNlbHNlCisgICAg
dW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKICAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQg
PSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAg
ICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJz
ZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2Nh
cHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGdzdF9jYXBz
X3VucmVmKGNhcHMpOworICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9y
bWF0LCAmd2lkdGgsICZoZWlnaHQpOworI2VuZGlmCiAKICAgICBjYWlyb19mb3JtYXRfdCBjYWly
b0Zvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3Jt
YXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRM
RV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKICAgICAg
ICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwogICAgIGVsc2UKICAgICAgICAg
Y2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZWxzZQorICAgIGlmIChmb3JtYXQg
PT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQorICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZP
Uk1BVF9BUkdCMzI7CisgICAgZWxzZQorICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1B
VF9SR0IyNDsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1l
cihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGNhaXJvRm9ybWF0KSk7Ci19CisjaWZk
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExB
TkVfU1RSSURFKCZ2aWRlb0luZm8sIDApOworI2Vsc2UKKyAgICBpbnQgc3RyaWRlID0gY2Fpcm9f
Zm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3JtYXQsIHdpZHRoKTsKKyNlbmRpZgogCi1J
bWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXpl
IHNpemUsIGNhaXJvX2Zvcm1hdF90JiBjYWlyb0Zvcm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsK
LSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgY2Fpcm9Gb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKGNhaXJvRm9ybWF0LCBz
aXplLndpZHRoKCkpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShidWZmZXJEYXRhLCBjYWlyb0Zvcm1hdCwgd2lkdGgs
IGhlaWdodCwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFj
ZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6
Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKworICAgIEdzdFZp
ZGVvQ3JvcE1ldGEqIGNyb3BNZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fY3JvcF9tZXRhKGJ1
ZmZlcik7CisgICAgaWYgKGNyb3BNZXRhKQorICAgICAgICBtX2ltYWdlLT5jcm9wKEludFJlY3Qo
Y3JvcE1ldGEtPngsIGNyb3BNZXRhLT55LCBjcm9wTWV0YS0+d2lkdGgsIGNyb3BNZXRhLT5oZWln
aHQpKTsKKworICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmbWFwSW5mbyk7CisjZW5kaWYK
IH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3Ry
ZWFtZXJRdC5jcHAKaW5kZXggMTg4YzBiYi4uY2M4YzEzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lclF0LmNwcApAQCAtMjYsMzQgKzI2LDQ4IEBACiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdl
R1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVy
OjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAg
OiBtX2ltYWdlKDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RD
YXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAgIEdzdFZpZGVvRm9y
bWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAm
Zm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBR
UGl4bWFwOworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVv
SW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CiAK
LSAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBH
U1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJ
REVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19J
TkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKIAorICAgIEdzdE1hcEluZm8gaW5mbzsKKyAgICBnc3Rf
YnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOworICAgIHVjaGFyKiBidWZm
ZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGluZm8uZGF0YSk7CisjZWxzZQorICAg
IHVjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KEdTVF9CVUZGRVJf
REFUQShidWZmZXIpKTsKKyAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIEdzdFZp
ZGVvRm9ybWF0IGZvcm1hdDsKKyAgICBnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2Fwcywg
JmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKKyNlbmRpZgogICAgIFFJbWFnZTo6Rm9ybWF0IGlt
YWdlRm9ybWF0OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9SR0IpCisjaWYg
R19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJ
REVPX0ZPUk1BVF9CR1JBKQorICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JH
QjMyOworICAgIGVsc2UKICAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4
ODg7CisjZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQorICAg
ICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMjsKICAgICBlbHNlCi0gICAg
ICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisgICAgICAgIGltYWdlRm9y
bWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCODg4OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgaW1h
Z2VGb3JtYXQpKTsKLX0KKyAgICBRSW1hZ2UgaW1hZ2UoYnVmZmVyRGF0YSwgd2lkdGgsIGhlaWdo
dCwgaW1hZ2VGb3JtYXQpOwogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVm
ZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0KQot
ICAgIDogbV9pbWFnZSgwKQotewotICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsK
LSAgICBRSW1hZ2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2UtPmNvbnZlcnRGcm9tSW1h
Z2UoaW1hZ2UpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOwor
CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwg
JmluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCA2
ZjdjYWFlLi4xNzU1NTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcApAQCAtMTUwOCw3ICsxNTA4LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmCiAgICAgaWYgKCFtX2J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPElt
YWdlR1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShtX2J1
ZmZlcik7CisgICAgR3N0Q2FwcyogY2FwcyA9IHdlYmtpdF9nc3RfZWxlbWVudF9nZXRfcGFkX2Nh
cHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAgaWYgKCFjYXBzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3Ry
ZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKICAgICBpZiAoIWdzdEltYWdlKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTE3MzksNyArMTc0MywxMSBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigpCiAgICAgZ19zaWduYWxfY29ubmVj
dChtX3BsYXlCaW4sICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZh
dGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9w
bGF5QmluLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlQXVk
aW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQog
ICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KG1fZ3N0R1dvcmxk
LmdldCgpKTsKKyNlbHNlCisgICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRfdmlkZW9fc2lu
a19uZXcoKTsKKyNlbmRpZgogCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYmtpdFZpZGVvU2lu
aywgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVSZXBh
aW50Q2FsbGJhY2spLCB0aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcApp
bmRleCA0MzYzMDM2Li4zMjIzNWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNw
cApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlZpZGVv
U2lua0dTdHJlYW1lci5oIgogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKyNp
Zm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIAogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CkBAIC0zOTgsNCArMzk5LDUgQEAgR3N0RWxlbWVudCogd2Via2l0X3ZpZGVvX3Np
bmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1lckdXb3JsZCogZ3N0R1dvcmxkKQogICAgIHJldHVybiBl
bGVtZW50OwogfQogCisjZW5kaWYgLy8gR1NUX0FQSV9WRVJTSU9OXzEKICNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCmluZGV4IDUwMTg1MGYuLjc5
ZjdlZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCkBAIC0yNSw2ICsyNSw3IEBA
CiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4K
ICNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVv
L3ZpZGVvLmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtNzUsNyArNzYsMTEgQEAgc3RydWN0IF9X
ZWJLaXRWaWRlb1NpbmtDbGFzcyB7CiAKIAogR1R5cGUgICAgICAgd2Via2l0X3ZpZGVvX3Npbmtf
Z2V0X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQog
R3N0RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1lckdXb3Js
ZCopOworI2Vsc2UKK0dzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldygpOworI2VuZGlm
CiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDkzYmUwCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dT
dHJlYW1lcjEuY3BwCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAw
NyBPcGVuZWRIYW5kCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tl
ci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBT
LkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8qCisgKgorICogV2ViS2l0Vmlk
ZW9TaW5rIGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHRyaWdnZXJzCisgKiByZXBh
aW50cyBpbiB0aGUgV2ViS2l0IEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIgZm9yIHRoZQorICogY3Vy
cmVudCB2aWRlbyBidWZmZXIuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVTRShH
U1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisjaW5jbHVkZSAiVmlkZW9T
aW5rR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5o
PgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNpbmNsdWRlIDxnc3Qvdmlk
ZW8vZ3N0dmlkZW9wb29sLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKworLy8gQ0FJUk9fRk9STUFUX1JHQjI0IHVzZWQgdG8g
cmVuZGVyIHRoZSB2aWRlbyBidWZmZXJzIGlzIGxpdHRsZS9iaWcgZW5kaWFuIGRlcGVuZGFudC4K
KyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCitzdGF0aWMgR3N0U3RhdGljUGFk
VGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLCBH
U1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NB
UFNfTUFLRSgieyBCR1J4LCBCR1JBIH0iKSkpOworI2Vsc2UKK3N0YXRpYyBHc3RTdGF0aWNQYWRU
ZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsIEdT
VF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQ
U19NQUtFKCJ7IHhSR0IsIEFSR0IgfSIpKSk7CisjZW5kaWYKKworCitHU1RfREVCVUdfQ0FURUdP
UllfU1RBVElDKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF92aWRlb19zaW5rX2RlYnVnCisKK2VudW0geworICAgIFJFUEFJTlRfUkVRVUVT
VEVELAorICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsKKyAgICBQUk9QXzAKK307CisKK3N0
YXRpYyBndWludCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwg
fTsKKworc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIHsKKyAgICBHc3RCdWZmZXIqIGJ1
ZmZlcjsKKyAgICBndWludCB0aW1lb3V0X2lkOworICAgIEdNdXRleCogYnVmZmVyX211dGV4Owor
ICAgIEdDb25kKiBkYXRhX2NvbmQ7CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisKKyAgICAvLyBJ
ZiB0aGlzIGlzIFRSVUUgYWxsIHByb2Nlc3Npbmcgc2hvdWxkIGZpbmlzaCBBU0FQCisgICAgLy8g
VGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHJhY2UgYmV0d2Vlbgor
ICAgIC8vIHVubG9jaygpIGFuZCByZW5kZXIoKSwgd2hlcmUgdW5sb2NrKCkgd2lucywgc2lnbmFs
cyB0aGUKKyAgICAvLyBHQ29uZCwgdGhlbiByZW5kZXIoKSB0cmllcyB0byByZW5kZXIgYSBmcmFt
ZSBhbHRob3VnaAorICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBpc24ndCBydW5uaW5nIGFueW1vcmUu
IFRoaXMgd2lsbCBsZWFkCisgICAgLy8gdG8gZGVhZGxvY2tzIGJlY2F1c2UgcmVuZGVyKCkgaG9s
ZHMgdGhlIHN0cmVhbSBsb2NrLgorICAgIC8vCisgICAgLy8gUHJvdGVjdGVkIGJ5IHRoZSBidWZm
ZXIgbXV0ZXgKKyAgICBib29sIHVubG9ja2VkOworfTsKKworI2RlZmluZSB3ZWJraXRfdmlkZW9f
c2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShX
ZWJLaXRWaWRlb1NpbmssIHdlYmtpdF92aWRlb19zaW5rLCBHU1RfVFlQRV9WSURFT19TSU5LLCBH
U1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZywgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXRzaW5rIiwgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0IHZpZGVv
IHNpbmsiKSk7CisKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfaW5pdChXZWJLaXRW
aWRlb1NpbmsqIHNpbmspCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdjsKKwor
ICAgIHNpbmstPnByaXYgPSBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKHNpbmss
IFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVvU2lua1ByaXZhdGUpOworICAgIHBy
aXYtPmRhdGFfY29uZCA9IFdURjo6ZmFzdE5ldzxHQ29uZD4oKTsKKyAgICBnX2NvbmRfaW5pdChw
cml2LT5kYXRhX2NvbmQpOworICAgIHByaXYtPmJ1ZmZlcl9tdXRleCA9IFdURjo6ZmFzdE5ldzxH
TXV0ZXg+KCk7CisgICAgZ19tdXRleF9pbml0KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ3N0
X3ZpZGVvX2luZm9faW5pdCgmcHJpdi0+aW5mbyk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfdmlkZW9fc2lua190aW1lb3V0X2Z1bmMoZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBXZWJLaXRW
aWRlb1NpbmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdlYktpdFZpZGVvU2luayo+KGRhdGEp
OworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworICAgIEdz
dEJ1ZmZlciogYnVmZmVyOworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7
CisgICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyOworICAgIHByaXYtPmJ1ZmZlciA9IDA7CisgICAg
cHJpdi0+dGltZW91dF9pZCA9IDA7CisKKyAgICBpZiAoIWJ1ZmZlciB8fCBwcml2LT51bmxvY2tl
ZCB8fCBVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkgeworICAgICAgICBnX2NvbmRf
c2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1
ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBnX3NpZ25h
bF9lbWl0KHNpbmssIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURd
LCAwLCBidWZmZXIpOworICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICBnX2NvbmRf
c2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVy
X211dGV4KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdzdEZsb3dSZXR1cm4g
d2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKEdzdEJhc2VTaW5rKiBic2luaywgR3N0QnVmZmVyKiBi
dWZmZXIpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTkso
YnNpbmspOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2Owor
CisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+
dW5sb2NrZWQpIHsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
KyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIHByaXYtPmJ1ZmZlciA9
IGdzdF9idWZmZXJfcmVmKGJ1ZmZlcik7CisKKyAgICBHc3RWaWRlb0ZyYW1lIGZyYW1lOworICAg
IGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCgmZnJhbWUsICZwcml2LT5pbmZvLCBidWZmZXIsIEdT
VF9NQVBfUkVBRCkpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgICAg
ICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4gR1NU
X0ZMT1dfRVJST1I7CisgICAgfQorCisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NUX1ZJ
REVPX0ZSQU1FX0ZPUk1BVCgmZnJhbWUpOworICAgIGludCB3aWR0aCA9IEdTVF9WSURFT19GUkFN
RV9XSURUSCgmZnJhbWUpOworICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hU
KCZmcmFtZSk7CisKKyAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAoJmZyYW1lKTsKKworICAgIC8v
IENhaXJvJ3MgQVJHQiBoYXMgcHJlLW11bHRpcGxpZWQgYWxwaGEgd2hpbGUgR1N0cmVhbWVyJ3Mg
ZG9lc24ndC4KKyAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdG8gQ2Fpcm8ncyBBUkdCLgorICAgIGlm
IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1hdCA9PSBHU1RfVklERU9f
Rk9STUFUX0JHUkEpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBHc3RCYXNlU2luazo6cmVuZGVyKCkg
b25seSBvd25zIHRoZSBidWZmZXIgcmVmZXJlbmNlIGluIHRoZQorICAgICAgICAvLyBtZXRob2Qg
c2NvcGUgd2UgY2FuJ3QgdXNlIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgpIGhlcmUuIEFsc28K
KyAgICAgICAgLy8gVGhlIGJ1ZmZlciBjb250ZW50IHNob3VsZCBub3QgYmUgY2hhbmdlZCBoZXJl
IGJlY2F1c2UgdGhlIHNhbWUgYnVmZmVyCisgICAgICAgIC8vIGNvdWxkIGJlIHBhc3NlZCBtdWx0
aXBsZSB0aW1lcyB0byB0aGlzIG1ldGhvZCAoaW4gdGhlb3J5KS4KKyAgICAgICAgZ3NpemUgYnVm
ZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKyAgICAgICAgR3N0QnVmZmVy
KiBuZXdCdWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MoYnVmZmVyU2l6ZSk7CisKKyAg
ICAgICAgLy8gQ2hlY2sgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAgIGlmIChVTkxJS0VM
WSghbmV3QnVmZmVyKSkgeworICAgICAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVy
X211dGV4KTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAgICAgICAgfQor
CisgICAgICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1ZmZlciwgYnVmZmVyLCBzdGF0aWNf
Y2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSksIDAsIGJ1
ZmZlclNpemUpOworCisgICAgICAgIC8vIFdlIGRvbid0IHVzZSBDb2xvcjo6cHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IoKSBoZXJlIGJlY2F1c2UKKyAgICAgICAgLy8gb25lIGZ1bmN0aW9uIGNh
bGwgcGVyIHZpZGVvIHBpeGVsIGlzIGp1c3QgdG9vIGV4cGVuc2l2ZToKKyAgICAgICAgLy8gRm9y
IDcyMHAvUEFMIGZvciBleGFtcGxlIHRoaXMgbWVhbnMgMTI4MCo3MjAqMjU9MjMwNDAwMDAKKyAg
ICAgICAgLy8gZnVuY3Rpb24gY2FsbHMgcGVyIHNlY29uZCEKKyAgICAgICAgdW5zaWduZWQgc2hv
cnQgYWxwaGE7CisgICAgICAgIEdzdE1hcEluZm8gc291cmNlSW5mbzsKKyAgICAgICAgR3N0TWFw
SW5mbyBkZXN0aW5hdGlvbkluZm87CisgICAgICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJnNv
dXJjZUluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGNvbnN0IGd1aW50OCogc291cmNlID0g
Y29uc3RfY2FzdDxndWludDgqPihzb3VyY2VJbmZvLmRhdGEpOworICAgICAgICBnc3RfYnVmZmVy
X21hcChuZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8sIEdTVF9NQVBfV1JJVEUpOworICAgICAg
ICBndWludDgqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8Z3VpbnQ4Kj4oZGVzdGluYXRpb25J
bmZvLmRhdGEpOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaGVpZ2h0OyB4KyspIHsK
KyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgd2lkdGg7IHkrKykgeworI2lmIEdfQllU
RV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgICAgICAgICBhbHBoYSA9IHNvdXJj
ZVszXTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IChzb3VyY2VbMF0gKiBhbHBo
YSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMV0gPSAoc291cmNl
WzFdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzJd
ID0gKHNvdXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0
aW5hdGlvblszXSA9IGFscGhhOworI2Vsc2UKKyAgICAgICAgICAgICAgICBhbHBoYSA9IHNvdXJj
ZVswXTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IGFscGhhOworICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1NTsK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSArIDEy
OCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSAoc291cmNlWzNdICog
YWxwaGEgKyAxMjgpIC8gMjU1OworI2VuZGlmCisgICAgICAgICAgICAgICAgc291cmNlICs9IDQ7
CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJnNvdXJjZUluZm8pOworICAg
ICAgICBnc3RfYnVmZmVyX3VubWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0aW9uSW5mbyk7CisKKyAg
ICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgICAgICBidWZmZXIgPSBwcml2LT5i
dWZmZXIgPSBuZXdCdWZmZXI7CisgICAgfQorCisKKyAgICAvLyBUaGlzIHNob3VsZCBsaWtlbHkg
dXNlIGEgbG93ZXIgcHJpb3JpdHksIGJ1dCBnbGliIGN1cnJlbnRseSBzdGFydmVzCisgICAgLy8g
bG93ZXIgcHJpb3JpdHkgc291cmNlcy4KKyAgICAvLyBTZWU6IGh0dHBzOi8vYnVnemlsbGEuZ25v
bWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTA4MzAuCisgICAgcHJpdi0+dGltZW91dF9pZCA9IGdf
dGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0X2Z1bmMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Rfb2JqZWN0X3Jl
ZihzaW5rKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdzdF9vYmplY3RfdW5yZWYpKTsKKworICAgIGdf
Y29uZF93YWl0KHByaXYtPmRhdGFfY29uZCwgcHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBnX211
dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHJldHVybiBHU1RfRkxPV19PSzsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZShHT2JqZWN0KiBvYmpl
Y3QpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2Jq
ZWN0KTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKwor
ICAgIGlmIChwcml2LT5kYXRhX2NvbmQpIHsKKyAgICAgICAgZ19jb25kX2NsZWFyKHByaXYtPmRh
dGFfY29uZCk7CisgICAgICAgIFdURjo6ZmFzdERlbGV0ZShwcml2LT5kYXRhX2NvbmQpOworICAg
ICAgICBwcml2LT5kYXRhX2NvbmQgPSAwOworICAgIH0KKworICAgIGlmIChwcml2LT5idWZmZXJf
bXV0ZXgpIHsKKyAgICAgICAgZ19tdXRleF9jbGVhcihwcml2LT5idWZmZXJfbXV0ZXgpOworICAg
ICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgcHJpdi0+
YnVmZmVyX211dGV4ID0gMDsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xh
c3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9ja0J1ZmZlck11dGV4
KFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYpCit7CisgICAgZ19tdXRleF9sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+YnVmZmVyKSB7CisgICAgICAgIGdzdF9i
dWZmZXJfdW5yZWYocHJpdi0+YnVmZmVyKTsKKyAgICAgICAgcHJpdi0+YnVmZmVyID0gMDsKKyAg
ICB9CisKKyAgICBwcml2LT51bmxvY2tlZCA9IHRydWU7CisKKyAgICBnX2NvbmRfc2lnbmFsKHBy
aXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9jayhHc3RCYXNlU2lu
ayogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19T
SU5LKG9iamVjdCk7CisKKyAgICB1bmxvY2tCdWZmZXJNdXRleChzaW5rLT5wcml2KTsKKworICAg
IHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1Ms
IHVubG9jaywgKG9iamVjdCksIFRSVUUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3Zp
ZGVvX3NpbmtfdW5sb2NrX3N0b3AoR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRW
aWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KS0+cHJpdjsK
KworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHByaXYtPnVubG9j
a2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKwor
ICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xB
U1MsIHVubG9ja19zdG9wLCAob2JqZWN0KSwgVFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfdmlkZW9fc2lua19zdG9wKEdzdEJhc2VTaW5rKiBiYXNlX3NpbmspCit7CisgICAgdW5s
b2NrQnVmZmVyTXV0ZXgoV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdik7CisgICAg
cmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19zdGFy
dChHc3RCYXNlU2luayogYmFzZV9zaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUq
IHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2OworCisgICAgZ19tdXRl
eF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJpdi0+dW5sb2NrZWQgPSBmYWxzZTsK
KyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfcHJvcG9zZV9hbGxvY2F0
aW9uKEdzdEJhc2VTaW5rKiBiYXNlX3NpbmssIEdzdFF1ZXJ5KiBxdWVyeSkKK3sKKyAgICBXZWJL
aXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspOworICAgIEdz
dENhcHMqIGNhcHM7CisgICAgZ2Jvb2xlYW4gbmVlZF9wb29sOworCisgICAgZ3N0X3F1ZXJ5X3Bh
cnNlX2FsbG9jYXRpb24ocXVlcnksICZjYXBzLCAmbmVlZF9wb29sKTsKKworICAgIGlmICghY2Fw
cykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9t
X2NhcHMoJnNpbmstPnByaXYtPmluZm8sIGNhcHMpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisK
KyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX01FVEFf
QVBJKTsKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVP
X0NST1BfTUVUQV9BUEkpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBtYXJz
aGFsX1ZPSURfX01JTklPQkpFQ1QoR0Nsb3N1cmUqIGNsb3N1cmUsIEdWYWx1ZSogcmV0dXJuVmFs
dWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcGFyYW1ldGVy
c051bWJlciwgY29uc3QgR1ZhbHVlKiBwYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdwb2ludGVyIGludm9jYXRpb25IaW50LCBncG9pbnRlciBtYXJzaGFs
RGF0YSkKK3sKKyAgICB0eXBlZGVmIHZvaWQgKCptYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNU
KSAoZ3BvaW50ZXIgb2JqZWN0LCBncG9pbnRlciBhcmcxLCBncG9pbnRlciBkYXRhMik7CisgICAg
bWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCBjYWxsYmFjazsKKyAgICBHQ0Nsb3N1cmUqIGNj
ID0gKEdDQ2xvc3VyZSAqKSBjbG9zdXJlOworICAgIGdwb2ludGVyIGRhdGExLCBkYXRhMjsKKwor
ICAgIGdfcmV0dXJuX2lmX2ZhaWwocGFyYW1ldGVyc051bWJlciA9PSAyKTsKKworICAgIGlmIChH
X0NDTE9TVVJFX1NXQVBfREFUQShjbG9zdXJlKSkgeworICAgICAgICBkYXRhMSA9IGNsb3N1cmUt
PmRhdGE7CisgICAgICAgIGRhdGEyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIocGFyYW1ldGVycyAr
IDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGRhdGExID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIo
cGFyYW1ldGVycyArIDApOworICAgICAgICBkYXRhMiA9IGNsb3N1cmUtPmRhdGE7CisgICAgfQor
ICAgIGNhbGxiYWNrID0gKG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QpIChtYXJzaGFsRGF0
YSA/IG1hcnNoYWxEYXRhIDogY2MtPmNhbGxiYWNrKTsKKworICAgIGNhbGxiYWNrKGRhdGExLCBn
X3ZhbHVlX2dldF9ib3hlZChwYXJhbWV0ZXJzICsgMSksIGRhdGEyKTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Mo
a2xhc3MpOworICAgIEdzdEJhc2VTaW5rQ2xhc3MqIGdzdGJhc2Vfc2lua19jbGFzcyA9IEdTVF9C
QVNFX1NJTktfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudF9jbGFz
cyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX2Fk
ZF9wYWRfdGVtcGxhdGUoZWxlbWVudF9jbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0
KCZzaW5rVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEoZWxl
bWVudF9jbGFzcywKKyAgICAgICAgICAgICJXZWJLaXQgdmlkZW8gc2luayIsCisgICAgICAgICAg
ICAiU2luay9WaWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3RyZWFtZXIgcGlwZWxp
bmUgdG8gYSBDYWlybyBzdXJmYWNlIiwKKyAgICAgICAgICAgICJBbHAgVG9rZXIgPGFscEBhdG9r
ZXIuY29tPiIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2Yo
V2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSkpOworCisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9
IHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bvc2U7CisKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVu
bG9jayA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3Mt
PnVubG9ja19zdG9wID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3A7CisgICAgZ3N0YmFz
ZV9zaW5rX2NsYXNzLT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CisgICAgZ3N0
YmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xsID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAg
IGdzdGJhc2Vfc2lua19jbGFzcy0+c3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7CisgICAg
Z3N0YmFzZV9zaW5rX2NsYXNzLT5zdGFydCA9IHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0OworICAg
IGdzdGJhc2Vfc2lua19jbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uID0gd2Via2l0X3ZpZGVvX3Np
bmtfcHJvcG9zZV9hbGxvY2F0aW9uOworCisgICAgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tS
RVBBSU5UX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQtcmVxdWVzdGVkIiwKKyAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEdTaWduYWxGbGFncz4oR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAor
ICAgICAgICAgICAgMCwgLy8gQ2xhc3Mgb2Zmc2V0LgorICAgICAgICAgICAgMCwgLy8gQWNjdW11
bGF0b3IuCisgICAgICAgICAgICAwLCAvLyBBY2N1bXVsYXRvciBkYXRhLgorICAgICAgICAgICAg
bWFyc2hhbF9WT0lEX19NSU5JT0JKRUNULCAvLyBDdXN0b20gbWFyc2hhbGxlci4KKyAgICAgICAg
ICAgIEdfVFlQRV9OT05FLCAvLyBSZXR1cm4gdHlwZS4KKyAgICAgICAgICAgIDEsIC8vIE9ubHkg
b25lIHBhcmFtZXRlci4KKyAgICAgICAgICAgIEdTVF9UWVBFX0JVRkZFUik7Cit9CisKK0dzdEVs
ZW1lbnQqIHdlYmtpdF92aWRlb19zaW5rX25ldygpCit7CisgICAgcmV0dXJuIEdTVF9FTEVNRU5U
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9CisKKyNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQotLSAKMS43Ljku
MQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128997</attachid>
            <date>2012-02-27 02:35:33 -0800</date>
            <delta_ts>2012-02-27 02:58:15 -0800</delta_ts>
            <desc>0.11 video-sink</desc>
            <filename>011-video-sink.patch</filename>
            <type>text/plain</type>
            <size>32247</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA2MjE5YjQ3NzUyYjNiZjIyZjIzYmViNTBiOThlODBmYzExZGFiN2I0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDEwOjQ3OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
MC4xMSB2aWRlby1zaW5rCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAzOSArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggICB8ICAgMjcgKy0KIC4uLi9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSAgICAgICAgIHwgICA3OCArKysrLQogLi4uL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDY4ICsrKy0KIC4u
Li9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgICAgICAgIHwgICA1OCAr
Ky0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgIHwg
ICAxMCArLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwICAg
ICAgfCAgICAyICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgg
ICAgICAgIHwgICAgNSArCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
cjEuY3BwICAgICB8ICAzNzQgKysrKysrKysrKysrKysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQs
IDU5MyBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyMS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU4NDVmYS4uY2FkZGMyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDQ0IEBACiAyMDEyLTAyLTI3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAorICAgICAgICBbR1N0cmVhbWVyXSAwLjExIHZpZGVvLXNpbmsKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOiBBZGQgbmV3IHZpZGVvIHNpbmsgY29kZSB0byB0aGUgYnVpbGQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmg6IGNyZWF0ZUltYWdlIEFQ
SQorICAgICAgICB1cGRhdGUgc28gaW1wbGVtZW50YXRpb25zIGRvbid0IG5lZWQgdG8gdXNlCisg
ICAgICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyB3aGljaCBoYXMgYmVlbiByZW1vdmVk
IGluIGdzdC0wLjExLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUlt
YWdlKToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbToKKyAgICAgICAgKEltYWdlR1N0cmVh
bWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6Oklt
YWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJRdC5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFt
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwOiBCdWlsZCBvbmx5CisgICAgICAgIGZvciBnc3QtMC4x
MC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmg6IE5vIG5lZWQgZm9yCisgICAgICAgIEdTdHJlYW1lckdXb3JsZCBpbiB0aGUgZ3N0LTAu
MTEgdmlkZW8gc2luay4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9TaW5rR1N0cmVhbWVyMS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwLgorICAgICAgICAoX1dl
YktpdFZpZGVvU2lua1ByaXZhdGUpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdGltZW91
dF9mdW5jKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcik6CisgICAgICAgICh3
ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKToKKyAgICAgICAgKHVubG9ja0J1ZmZlck11dGV4KToK
KyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3VubG9jayk6CisgICAgICAgICh3ZWJraXRfdmlk
ZW9fc2lua191bmxvY2tfc3RvcCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19zdG9wKToK
KyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0KToKKyAgICAgICAgKHdlYmtpdF92aWRl
b19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbik6CisgICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklP
QkpFQ1QpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfdmlkZW9fc2lua19uZXcpOgorCisyMDEyLTAyLTI3ICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXSAwLjExIHN1cHBv
cnQgaW4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCA3YjNkZTMxLi41NTU1ZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTQ1MzMsNiArNDUzMyw3IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3cu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvQ29sb3JHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDJhNDhmMjcuLjYxMzk4MjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQpAQCAtMzI0NCw2ICszMjQ0LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJ
REVPPTEpIHsKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJWZXJzaW9uaW5nLmMgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgXAorICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIFwKICAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0
Zm9ybVZpZGVvV2luZG93UXQuY3BwIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAppbmRleCBh
Yjc5OWJhLi5lMGZlNzBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaApAQCAtMjIsMjEgKzIyLDIx
IEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKLSNpbmNsdWRlICJC
aXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8v
dmlkZW8uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQot
I2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0
QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEJpdG1hcEltYWdlOwogCiBjbGFzcyBJbWFn
ZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHVi
bGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1h
Z2UoR3N0QnVmZmVyKik7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVy
PiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIs
IGNhcHMpKTsKKyAgICAgICAgfQogICAgICAgICB+SW1hZ2VHU3RyZWFtZXIoKTsKIAogICAgICAg
ICBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBpbWFnZSgpCkBAIC00OCwxOCArNDgsNyBAQCBjbGFz
cyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3VudGVkPEltYWdlR1N0cmVhbWVyPiB7CiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEJpdG1hcEltYWdlPiBtX2ltYWdlOwogCi0jaWYg
VVNFKENBSVJPKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSwg
Y2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIElt
YWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXplLCBRSW1hZ2U6OkZvcm1hdCk7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVy
KiYsIEludFNpemUpOwotI2VuZGlmCi0KKyAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVy
KiYsIEdzdENhcHMqKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmlu
ZGV4IGZlMDkyOGIuLjFjMDEzZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCkBAIC0y
MywzMSArMjMsNzkgQEAKICNpbmNsdWRlICJJbWFnZUdTdHJlYW1lci5oIgogI2lmIEVOQUJMRShW
SURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisKKyNp
bmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4K
KyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdT
dHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQor
SW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgR3N0Q2Fw
cyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
CisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1Rf
VklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVP
X0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19JTkZP
X0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcEluZm8gaW5mbzsKKyAgICBnc3RfYnVm
ZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOworICAgIGNvbnN0IFVJbnQ4KiBi
dWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGluZm8uZGF0YSk7Cisj
ZWxzZQogICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9
IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7
Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBz
LCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCkpKTsKLX0KKyAgICBn
dWludCBidWZmZXJTaXplID0gR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcik7CisgICAgY29uc3QgVUlu
dDgqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oR1NUX0JVRkZF
Ul9EQVRBKGJ1ZmZlcikpOworI2VuZGlmCiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSkKLSAgICA6IG1faW1hZ2UoMCkKLXsK
LSAgICBBU1NFUlQoR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikpOworICAgIEFTU0VSVChidWZmZXJT
aXplKTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3Jl
YXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oR1NUX0JVRkZFUl9EQVRB
KGJ1ZmZlcikpLCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxsb2NhdG9yTnVsbCkpOwor
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5KDAsIGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGtDRkFsbG9jYXRvck51bGwpKTsK
ICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhLmdldCgpKSk7Ci0gICAgQ0dJbWFnZVJlZiBm
cmFtZUltYWdlID0gQ0dJbWFnZUNyZWF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgs
IDMyLCBzaXplLndpZHRoKCkqNCwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAotICAgICAgICBr
Q0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFGaXJzdCwgcHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKworICAgIHNpemVf
dCBiaXRzUGVyQ29tcG9uZW50ID0gODsKKyAgICBzaXplX3QgYml0c1BlclBpeGVsOworICAgIHNp
emVfdCBieXRlc1BlclJvdzsKKyAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKKworI2lmIEdf
QllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURF
T19GT1JNQVRfQkdSQSkgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVy
MzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMzI7
CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0OworICAgIH0gZWxzZSB7CisgICAgICAg
IGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFO
b25lOworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAyNDsKKyAgICAgICAgYnl0ZXNQZXJSb3cgPSB3
aWR0aCAqIDM7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JN
QVRfQVJHQikgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcg
fCBrQ0dJbWFnZUFscGhhRmlyc3Q7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDMyOworICAgICAg
ICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVsc2UgeworICAgICAgICBiaXRtYXBJ
bmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcgfCBrQ0dJbWFnZUFscGhhTm9uZTsKKyAgICAg
ICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiAzOwor
ICAgIH0KKyNlbmRpZgorCisgICAgQ0dJbWFnZVJlZiBmcmFtZUltYWdlID0gQ0dJbWFnZUNyZWF0
ZSh3aWR0aCwgaGVpZ2h0LCBiaXRzUGVyQ29tcG9uZW50LCBiaXRzUGVyUGl4ZWwsIGJ5dGVzUGVy
Um93LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8sIHByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiAgICAgbV9pbWFnZSA9IEJp
dG1hcEltYWdlOjpjcmVhdGUoZnJhbWVJbWFnZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05f
MQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7CisjZW5kaWYKIH0KIAogSW1h
Z2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
YWlyby5jcHAKaW5kZXggOGIzYTA3Ni4uOTU5YzMxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lckNhaXJvLmNwcApAQCAtMjIsNDAgKzIyLDc0IEBACiAKICNpZiBFTkFCTEUoVklERU8pICYm
IFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorCisjaW5jbHVkZSA8
Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVv
Lmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2
aWRlb21ldGEuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAiR093blB0ci5oIgogCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VH
U3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikK
K0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENh
cHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEK
KyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2Fw
cygmdmlkZW9JbmZvLCBjYXBzKTsKKworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9W
SURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9f
SU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9f
SEVJR0hUKCZ2aWRlb0luZm8pOworCisgICAgR3N0TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9i
dWZmZXJfbWFwKGJ1ZmZlciwgJm1hcEluZm8sIEdTVF9NQVBfUkVBRCk7CisKKyAgICB1bnNpZ25l
ZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFw
SW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKICAg
ICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVm
ZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlm
ICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhl
aWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAw
OwotICAgIH0KLQotICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAgIGdzdF92aWRlb19mb3Jt
YXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOworI2VuZGlmCiAK
ICAgICBjYWlyb19mb3JtYXRfdCBjYWlyb0Zvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9W
SURFT19GT1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorI2lm
IEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9W
SURFT19GT1JNQVRfQkdSQSkKICAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJH
QjMyOwogICAgIGVsc2UKICAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7
CisjZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQorICAgICAg
ICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CisgICAgZWxzZQorICAgICAgICBj
YWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IyNDsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCks
IGNhaXJvRm9ybWF0KSk7Ci19CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBpbnQgc3Ry
aWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RSSURFKCZ2aWRlb0luZm8sIDApOworI2Vsc2UK
KyAgICBpbnQgc3RyaWRlID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3Jt
YXQsIHdpZHRoKTsKKyNlbmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0
QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIGNhaXJvX2Zvcm1hdF90JiBjYWlyb0Zvcm1h
dCkKLSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVmZmVy
KSwgY2Fpcm9Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2Zvcm1hdF9zdHJpZGVf
Zm9yX3dpZHRoKGNhaXJvRm9ybWF0LCBzaXplLndpZHRoKCkpKTsKKyAgICBjYWlyb19zdXJmYWNl
X3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShidWZmZXJE
YXRhLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAg
IG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKworICAgIEdzdFZpZGVvQ3JvcE1ldGEqIGNyb3BNZXRhID0gZ3N0X2J1ZmZl
cl9nZXRfdmlkZW9fY3JvcF9tZXRhKGJ1ZmZlcik7CisgICAgaWYgKGNyb3BNZXRhKQorICAgICAg
ICBtX2ltYWdlLT5jcm9wKEludFJlY3QoY3JvcE1ldGEtPngsIGNyb3BNZXRhLT55LCBjcm9wTWV0
YS0+d2lkdGgsIGNyb3BNZXRhLT5oZWlnaHQpKTsKKworICAgIGdzdF9idWZmZXJfdW5tYXAoYnVm
ZmVyLCAmbWFwSW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJl
YW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKaW5kZXggMTg4YzBiYi4uYzg1ZTEw
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcApAQCAtMjEsMzkgKzIxLDYxIEBACiAj
aW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIK
IAorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKwor
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0
YS5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0
ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVy
KEdzdEJ1ZmZlciomIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsK
LSAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3Rf
YnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAg
IGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwg
JmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KKyAgICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQaXhtYXA7CisjaWZkZWYg
R1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOworICAgIGdzdF92
aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKIAotICAgIGdzdF9jYXBzX3Vu
cmVmKGNhcHMpOworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZP
Uk1BVCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgm
dmlkZW9JbmZvKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRl
b0luZm8pOwogCisgICAgR3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZl
ciwgJmluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVy
cHJldF9jYXN0PHVjaGFyKj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgdWNoYXIqIGJ1ZmZlckRh
dGEgPSByZWludGVycHJldF9jYXN0PHVjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOwor
ICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0
OworICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgs
ICZoZWlnaHQpOworI2VuZGlmCiAgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQ7Ci0gICAg
aWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX1JHQikKKyNpZiBHX0JZVEVfT1JERVIgPT0g
R19MSVRUTEVfRU5ESUFOCisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEp
CisgICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisgICAgZWxzZQog
ICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKKyNlbHNlCisgICAg
aWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IpCisgICAgICAgIGltYWdlRm9ybWF0
ID0gUUltYWdlOjpGb3JtYXRfQVJHQjMyOwogICAgIGVsc2UKLSAgICAgICAgaW1hZ2VGb3JtYXQg
PSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZv
cm1hdF9SR0I4ODg7CisjZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3Ry
ZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBpbWFnZUZvcm1hdCkpOwotfQor
ICAgIFFJbWFnZSBpbWFnZShidWZmZXJEYXRhLCB3aWR0aCwgaGVpZ2h0LCBpbWFnZUZvcm1hdCk7
CiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIElu
dFNpemUgc2l6ZSwgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQpCi0gICAgOiBtX2ltYWdlKDAp
Ci17Ci0gICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwotICAgIFFJbWFnZSBpbWFn
ZShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBp
bWFnZUZvcm1hdCk7CiAgICAgc3VyZmFjZS0+Y29udmVydEZyb21JbWFnZShpbWFnZSk7CiAgICAg
bV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoc3VyZmFjZSk7CisKKyNpZmRlZiBHU1RfQVBJ
X1ZFUlNJT05fMQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7CisjZW5kaWYK
IH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDZmN2NhYWUuLjE3NTU1NWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBA
IC0xNTA4LDcgKzE1MDgsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYKICAgICBpZiAoIW1f
YnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdz
dEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyKTsKKyAgICBHc3RD
YXBzKiBjYXBzID0gd2Via2l0X2dzdF9lbGVtZW50X2dldF9wYWRfY2FwcyhtX3dlYmtpdFZpZGVv
U2luaywgInNpbmsiKTsKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybjsKKworICAgIFJl
ZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2UgPSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UobV9idWZmZXIsIGNhcHMpOwogICAgIGlmICghZ3N0SW1hZ2UpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTczOSw3ICsxNzQzLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGVHU1RQbGF5QmluKCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgInZp
ZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJhdWRpby1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFj
ayksIHRoaXMpOwogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgbV93ZWJraXRWaWRl
b1NpbmsgPSB3ZWJraXRfdmlkZW9fc2lua19uZXcobV9nc3RHV29ybGQuZ2V0KCkpOworI2Vsc2UK
KyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5rX25ldygpOworI2VuZGlm
CiAKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Via2l0VmlkZW9TaW5rLCAicmVwYWludC1yZXF1
ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayksIHRo
aXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDQzNjMwMzYuLjMy
MjM1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgi
CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorI2lmbmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQogCiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KQEAgLTM5
OCw0ICszOTksNSBAQCBHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoV2ViQ29yZTo6
R1N0cmVhbWVyR1dvcmxkKiBnc3RHV29ybGQpCiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKKyNl
bmRpZiAvLyBHU1RfQVBJX1ZFUlNJT05fMQogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9T
aW5rR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKaW5kZXggNTAxODUwZi4uNzlmN2VkNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJHU3Ry
ZWFtZXJHV29ybGQuaCIKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPGdzdC92
aWRlby9nc3R2aWRlb3NpbmsuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KIAogR19C
RUdJTl9ERUNMUwogCkBAIC03NSw3ICs3NiwxMSBAQCBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua0Ns
YXNzIHsKIAogCiBHVHlwZSAgICAgICB3ZWJraXRfdmlkZW9fc2lua19nZXRfdHlwZSh2b2lkKSBH
X0dOVUNfQ09OU1Q7CisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiBHc3RFbGVtZW50ICp3ZWJr
aXRfdmlkZW9fc2lua19uZXcoV2ViQ29yZTo6R1N0cmVhbWVyR1dvcmxkKik7CisjZWxzZQorR3N0
RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CisjZW5kaWYKIAogR19FTkRfREVDTFMK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjJkOTNiZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAKQEAg
LTAsMCArMSwzNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTAorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworLyoKKyAqCisgKiBXZWJLaXRWaWRlb1NpbmsgaXMgYSBHU3Ry
ZWFtZXIgc2luayBlbGVtZW50IHRoYXQgdHJpZ2dlcnMKKyAqIHJlcGFpbnRzIGluIHRoZSBXZWJL
aXQgR1N0cmVhbWVyIG1lZGlhIHBsYXllciBmb3IgdGhlCisgKiBjdXJyZW50IHZpZGVvIGJ1ZmZl
ci4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKEdTVFJFQU1FUikgJiYgZGVm
aW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKyNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIK
KworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0
L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Bvb2wu
aD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9j
QmFzZS5oPgorCisvLyBDQUlST19GT1JNQVRfUkdCMjQgdXNlZCB0byByZW5kZXIgdGhlIHZpZGVv
IGJ1ZmZlcnMgaXMgbGl0dGxlL2JpZyBlbmRpYW4gZGVwZW5kYW50LgorI2lmIEdfQllURV9PUkRF
UiA9PSBHX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVt
cGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsIEdTVF9QQURfU0lOSywgR1NU
X1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQU19NQUtFKCJ7IEJHUngs
IEJHUkEgfSIpKSk7CisjZWxzZQorc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1w
bGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1Rf
UEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTKEdTVF9WSURFT19DQVBTX01BS0UoInsgeFJHQiwg
QVJHQiB9IikpKTsKKyNlbmRpZgorCisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0
X3ZpZGVvX3NpbmtfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3ZpZGVv
X3NpbmtfZGVidWcKKworZW51bSB7CisgICAgUkVQQUlOVF9SRVFVRVNURUQsCisgICAgTEFTVF9T
SUdOQUwKK307CisKK2VudW0geworICAgIFBST1BfMAorfTsKKworc3RhdGljIGd1aW50IHdlYmtp
dF92aWRlb19zaW5rX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitzdHJ1Y3QgX1dl
YktpdFZpZGVvU2lua1ByaXZhdGUgeworICAgIEdzdEJ1ZmZlciogYnVmZmVyOworICAgIGd1aW50
IHRpbWVvdXRfaWQ7CisgICAgR011dGV4KiBidWZmZXJfbXV0ZXg7CisgICAgR0NvbmQqIGRhdGFf
Y29uZDsKKyAgICBHc3RWaWRlb0luZm8gaW5mbzsKKworICAgIC8vIElmIHRoaXMgaXMgVFJVRSBh
bGwgcHJvY2Vzc2luZyBzaG91bGQgZmluaXNoIEFTQVAKKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2Fy
eSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBiZXR3ZWVuCisgICAgLy8gdW5sb2NrKCkg
YW5kIHJlbmRlcigpLCB3aGVyZSB1bmxvY2soKSB3aW5zLCBzaWduYWxzIHRoZQorICAgIC8vIEdD
b25kLCB0aGVuIHJlbmRlcigpIHRyaWVzIHRvIHJlbmRlciBhIGZyYW1lIGFsdGhvdWdoCisgICAg
Ly8gZXZlcnl0aGluZyBlbHNlIGlzbid0IHJ1bm5pbmcgYW55bW9yZS4gVGhpcyB3aWxsIGxlYWQK
KyAgICAvLyB0byBkZWFkbG9ja3MgYmVjYXVzZSByZW5kZXIoKSBob2xkcyB0aGUgc3RyZWFtIGxv
Y2suCisgICAgLy8KKyAgICAvLyBQcm90ZWN0ZWQgYnkgdGhlIGJ1ZmZlciBtdXRleAorICAgIGJv
b2wgdW5sb2NrZWQ7Cit9OworCisjZGVmaW5lIHdlYmtpdF92aWRlb19zaW5rX3BhcmVudF9jbGFz
cyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFZpZGVvU2luaywg
d2Via2l0X3ZpZGVvX3NpbmssIEdTVF9UWVBFX1ZJREVPX1NJTkssIEdTVF9ERUJVR19DQVRFR09S
WV9JTklUKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnLCBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIndlYmtpdHNpbmsiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQgdmlkZW8gc2luayIpKTsKKworCitz
dGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19pbml0KFdlYktpdFZpZGVvU2luayogc2luaykK
K3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2OworCisgICAgc2luay0+cHJpdiA9
IHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2luaywgV0VCS0lUX1RZUEVfVklE
RU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSk7CisgICAgcHJpdi0+ZGF0YV9jb25kID0g
V1RGOjpmYXN0TmV3PEdDb25kPigpOworICAgIGdfY29uZF9pbml0KHByaXYtPmRhdGFfY29uZCk7
CisgICAgcHJpdi0+YnVmZmVyX211dGV4ID0gV1RGOjpmYXN0TmV3PEdNdXRleD4oKTsKKyAgICBn
X211dGV4X2luaXQocHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBnc3RfdmlkZW9faW5mb19pbml0
KCZwcml2LT5pbmZvKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3Rp
bWVvdXRfZnVuYyhncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0VmlkZW9TaW5rKj4oZGF0YSk7CisgICAgV2ViS2l0Vmlk
ZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7
CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBidWZmZXIgPSBw
cml2LT5idWZmZXI7CisgICAgcHJpdi0+YnVmZmVyID0gMDsKKyAgICBwcml2LT50aW1lb3V0X2lk
ID0gMDsKKworICAgIGlmICghYnVmZmVyIHx8IHByaXYtPnVubG9ja2VkIHx8IFVOTElLRUxZKCFH
U1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7CisgICAgICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0
YV9jb25kKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGdfc2lnbmFsX2VtaXQoc2luaywgd2Vi
a2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0sIDAsIGJ1ZmZlcik7Cisg
ICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0
YV9jb25kKTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRfdmlkZW9fc2lu
a19yZW5kZXIoR3N0QmFzZVNpbmsqIGJzaW5rLCBHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBX
ZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhic2luayk7CisgICAgV2Vi
S2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICBnX211dGV4X2xv
Y2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIGlmIChwcml2LT51bmxvY2tlZCkgeworICAg
ICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfT0s7CisgICAgfQorCisgICAgcHJpdi0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYo
YnVmZmVyKTsKKworICAgIEdzdFZpZGVvRnJhbWUgZnJhbWU7CisgICAgaWYgKCFnc3RfdmlkZW9f
ZnJhbWVfbWFwKCZmcmFtZSwgJnByaXYtPmluZm8sIGJ1ZmZlciwgR1NUX01BUF9SRUFEKSkgewor
ICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CisgICAgICAgIGdfbXV0ZXhfdW5sb2Nr
KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAg
ICB9CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9fRlJBTUVfRk9STUFU
KCZmcmFtZSk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIKCZmcmFtZSk7
CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQoJmZyYW1lKTsKKworICAg
IGdzdF92aWRlb19mcmFtZV91bm1hcCgmZnJhbWUpOworCisgICAgLy8gQ2Fpcm8ncyBBUkdCIGhh
cyBwcmUtbXVsdGlwbGllZCBhbHBoYSB3aGlsZSBHU3RyZWFtZXIncyBkb2Vzbid0LgorICAgIC8v
IEhlcmUgd2UgY29udmVydCB0byBDYWlybydzIEFSR0IuCisgICAgaWYgKGZvcm1hdCA9PSBHU1Rf
VklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkgewor
ICAgICAgICAvLyBCZWNhdXNlIEdzdEJhc2VTaW5rOjpyZW5kZXIoKSBvbmx5IG93bnMgdGhlIGJ1
ZmZlciByZWZlcmVuY2UgaW4gdGhlCisgICAgICAgIC8vIG1ldGhvZCBzY29wZSB3ZSBjYW4ndCB1
c2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgaGVyZS4gQWxzbworICAgICAgICAvLyBUaGUg
YnVmZmVyIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGhlcmUgYmVjYXVzZSB0aGUgc2Ft
ZSBidWZmZXIKKyAgICAgICAgLy8gY291bGQgYmUgcGFzc2VkIG11bHRpcGxlIHRpbWVzIHRvIHRo
aXMgbWV0aG9kIChpbiB0aGVvcnkpLgorICAgICAgICBnc2l6ZSBidWZmZXJTaXplID0gZ3N0X2J1
ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworICAgICAgICBHc3RCdWZmZXIqIG5ld0J1ZmZlciA9IGdz
dF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKworICAgICAgICAvLyBDaGVjayBp
ZiBhbGxvY2F0aW9uIGZhaWxlZC4KKyAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdCdWZmZXIpKSB7
CisgICAgICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X2J1
ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZmZXIsIHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNv
cHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBKSwgMCwgYnVmZmVyU2l6ZSk7CisKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgdXNlIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigp
IGhlcmUgYmVjYXVzZQorICAgICAgICAvLyBvbmUgZnVuY3Rpb24gY2FsbCBwZXIgdmlkZW8gcGl4
ZWwgaXMganVzdCB0b28gZXhwZW5zaXZlOgorICAgICAgICAvLyBGb3IgNzIwcC9QQUwgZm9yIGV4
YW1wbGUgdGhpcyBtZWFucyAxMjgwKjcyMCoyNT0yMzA0MDAwMAorICAgICAgICAvLyBmdW5jdGlv
biBjYWxscyBwZXIgc2Vjb25kIQorICAgICAgICB1bnNpZ25lZCBzaG9ydCBhbHBoYTsKKyAgICAg
ICAgR3N0TWFwSW5mbyBzb3VyY2VJbmZvOworICAgICAgICBHc3RNYXBJbmZvIGRlc3RpbmF0aW9u
SW5mbzsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmc291cmNlSW5mbywgR1NUX01B
UF9SRUFEKTsKKyAgICAgICAgY29uc3QgZ3VpbnQ4KiBzb3VyY2UgPSBjb25zdF9jYXN0PGd1aW50
OCo+KHNvdXJjZUluZm8uZGF0YSk7CisgICAgICAgIGdzdF9idWZmZXJfbWFwKG5ld0J1ZmZlciwg
JmRlc3RpbmF0aW9uSW5mbywgR1NUX01BUF9XUklURSk7CisgICAgICAgIGd1aW50OCogZGVzdGlu
YXRpb24gPSBzdGF0aWNfY2FzdDxndWludDgqPihkZXN0aW5hdGlvbkluZm8uZGF0YSk7CisKKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBoZWlnaHQ7IHgrKykgeworICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCB3aWR0aDsgeSsrKSB7CisjaWYgR19CWVRFX09SREVSID09IEdfTElU
VExFX0VORElBTgorICAgICAgICAgICAgICAgIGFscGhhID0gc291cmNlWzNdOworICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gKHNvdXJjZVswXSAqIGFscGhhICsgMTI4KSAvIDI1NTsK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9IChzb3VyY2VbMV0gKiBhbHBoYSArIDEy
OCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMl0gPSAoc291cmNlWzJdICog
YWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gYWxw
aGE7CisjZWxzZQorICAgICAgICAgICAgICAgIGFscGhhID0gc291cmNlWzBdOworICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25bMV0gPSAoc291cmNlWzFdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uWzJdID0gKHNvdXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvblszXSA9IChzb3VyY2VbM10gKiBhbHBoYSArIDEyOCkgLyAy
NTU7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gNDsKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbiArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdz
dF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmc291cmNlSW5mbyk7CisgICAgICAgIGdzdF9idWZmZXJf
dW5tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvKTsKKworICAgICAgICBnc3RfYnVmZmVy
X3VucmVmKGJ1ZmZlcik7CisgICAgICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlciA9IG5ld0J1ZmZl
cjsKKyAgICB9CisKKworICAgIC8vIFRoaXMgc2hvdWxkIGxpa2VseSB1c2UgYSBsb3dlciBwcmlv
cml0eSwgYnV0IGdsaWIgY3VycmVudGx5IHN0YXJ2ZXMKKyAgICAvLyBsb3dlciBwcmlvcml0eSBz
b3VyY2VzLgorICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcu
Y2dpP2lkPTYxMDgzMC4KKyAgICBwcml2LT50aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZF9mdWxs
KEdfUFJJT1JJVFlfREVGQVVMVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfcmVmKHNpbmspLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4oZ3N0X29iamVjdF91bnJlZikpOworCisgICAgZ19jb25kX3dhaXQocHJpdi0+
ZGF0YV9jb25kLCBwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworICAgIFdlYktp
dFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgaWYgKHByaXYtPmRh
dGFfY29uZCkgeworICAgICAgICBnX2NvbmRfY2xlYXIocHJpdi0+ZGF0YV9jb25kKTsKKyAgICAg
ICAgV1RGOjpmYXN0RGVsZXRlKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIHByaXYtPmRhdGFf
Y29uZCA9IDA7CisgICAgfQorCisgICAgaWYgKHByaXYtPmJ1ZmZlcl9tdXRleCkgeworICAgICAg
ICBnX211dGV4X2NsZWFyKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIFdURjo6ZmFzdERl
bGV0ZShwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBwcml2LT5idWZmZXJfbXV0ZXggPSAw
OworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrQnVmZmVyTXV0ZXgoV2ViS2l0VmlkZW9TaW5r
UHJpdmF0ZSogcHJpdikKK3sKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
KworICAgIGlmIChwcml2LT5idWZmZXIpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihwcml2
LT5idWZmZXIpOworICAgICAgICBwcml2LT5idWZmZXIgPSAwOworICAgIH0KKworICAgIHByaXYt
PnVubG9ja2VkID0gdHJ1ZTsKKworICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsK
KyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKEdzdEJhc2VTaW5rKiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKKwor
ICAgIHVubG9ja0J1ZmZlck11dGV4KHNpbmstPnByaXYpOworCisgICAgcmV0dXJuIEdTVF9DQUxM
X1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrLCAob2JqZWN0
KSwgVFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua191bmxvY2tf
c3RvcChHc3RCYXNlU2luayogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUq
IHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpLT5wcml2OworCisgICAgZ19tdXRleF9s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJpdi0+dW5sb2NrZWQgPSBmYWxzZTsKKyAg
ICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAgcmV0dXJuIEdTVF9D
QUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrX3N0b3As
IChvYmplY3QpLCBUUlVFKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5r
X3N0b3AoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sKKyAgICB1bmxvY2tCdWZmZXJNdXRleChX
RUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2KTsKKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0KEdzdEJhc2VTaW5rKiBi
YXNlX3NpbmspCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9W
SURFT19TSU5LKGJhc2Vfc2luayktPnByaXY7CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOworICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9jYXRpb24oR3N0QmFzZVNpbmsq
IGJhc2Vfc2luaywgR3N0UXVlcnkqIHF1ZXJ5KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2lu
ayA9IFdFQktJVF9WSURFT19TSU5LKGJhc2Vfc2luayk7CisgICAgR3N0Q2FwcyogY2FwczsKKyAg
ICBnYm9vbGVhbiBuZWVkX3Bvb2w7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbihx
dWVyeSwgJmNhcHMsICZuZWVkX3Bvb2wpOworCisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2Fwcygmc2luay0+cHJp
di0+aW5mbywgY2FwcykpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGdzdF9xdWVyeV9h
ZGRfYWxsb2NhdGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklERU9fTUVUQV9BUEkpOworICAgIGdzdF9x
dWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklERU9fQ1JPUF9NRVRBX0FQSSk7
CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIG1hcnNoYWxfVk9JRF9fTUlOSU9C
SkVDVChHQ2xvc3VyZSogY2xvc3VyZSwgR1ZhbHVlKiByZXR1cm5WYWx1ZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCBwYXJhbWV0ZXJzTnVtYmVyLCBjb25zdCBH
VmFsdWUqIHBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z3BvaW50ZXIgaW52b2NhdGlvbkhpbnQsIGdwb2ludGVyIG1hcnNoYWxEYXRhKQoreworICAgIHR5
cGVkZWYgdm9pZCAoKm1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QpIChncG9pbnRlciBvYmpl
Y3QsIGdwb2ludGVyIGFyZzEsIGdwb2ludGVyIGRhdGEyKTsKKyAgICBtYXJzaGFsZnVuY19WT0lE
X19NSU5JT0JKRUNUIGNhbGxiYWNrOworICAgIEdDQ2xvc3VyZSogY2MgPSAoR0NDbG9zdXJlICop
IGNsb3N1cmU7CisgICAgZ3BvaW50ZXIgZGF0YTEsIGRhdGEyOworCisgICAgZ19yZXR1cm5faWZf
ZmFpbChwYXJhbWV0ZXJzTnVtYmVyID09IDIpOworCisgICAgaWYgKEdfQ0NMT1NVUkVfU1dBUF9E
QVRBKGNsb3N1cmUpKSB7CisgICAgICAgIGRhdGExID0gY2xvc3VyZS0+ZGF0YTsKKyAgICAgICAg
ZGF0YTIgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlcihwYXJhbWV0ZXJzICsgMCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZGF0YTEgPSBnX3ZhbHVlX3BlZWtfcG9pbnRlcihwYXJhbWV0ZXJzICsgMCk7
CisgICAgICAgIGRhdGEyID0gY2xvc3VyZS0+ZGF0YTsKKyAgICB9CisgICAgY2FsbGJhY2sgPSAo
bWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkgKG1hcnNoYWxEYXRhID8gbWFyc2hhbERhdGEg
OiBjYy0+Y2FsbGJhY2spOworCisgICAgY2FsbGJhY2soZGF0YTEsIGdfdmFsdWVfZ2V0X2JveGVk
KHBhcmFtZXRlcnMgKyAxKSwgZGF0YTIpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9f
c2lua19jbGFzc19pbml0KFdlYktpdFZpZGVvU2lua0NsYXNzKiBrbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0
QmFzZVNpbmtDbGFzcyogZ3N0YmFzZV9zaW5rX2NsYXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyhr
bGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBlbGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRf
Q0xBU1Moa2xhc3MpOworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShl
bGVtZW50X2NsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNpbmtUZW1wbGF0ZSkp
OworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YShlbGVtZW50X2NsYXNzLAorICAg
ICAgICAgICAgIldlYktpdCB2aWRlbyBzaW5rIiwKKyAgICAgICAgICAgICJTaW5rL1ZpZGVvIiwg
IlNlbmRzIHZpZGVvIGRhdGEgZnJvbSBhIEdTdHJlYW1lciBwaXBlbGluZSB0byBhIENhaXJvIHN1
cmZhY2UiLAorICAgICAgICAgICAgIkFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Iik7CisKKyAg
ICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKSk7CisKKyAgICBnb2JqZWN0X2NsYXNzLT5kaXNwb3NlID0gd2Via2l0X3ZpZGVvX3Np
bmtfZGlzcG9zZTsKKworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+dW5sb2NrID0gd2Via2l0X3Zp
ZGVvX3NpbmtfdW5sb2NrOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+dW5sb2NrX3N0b3AgPSB3
ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcDsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnJl
bmRlciA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3Mt
PnByZXJvbGwgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CisgICAgZ3N0YmFzZV9zaW5rX2Ns
YXNzLT5zdG9wID0gd2Via2l0X3ZpZGVvX3Npbmtfc3RvcDsKKyAgICBnc3RiYXNlX3NpbmtfY2xh
c3MtPnN0YXJ0ID0gd2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQ7CisgICAgZ3N0YmFzZV9zaW5rX2Ns
YXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gPSB3ZWJraXRfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9j
YXRpb247CisKKyAgICB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVE
XSA9IGdfc2lnbmFsX25ldygicmVwYWludC1yZXF1ZXN0ZWQiLAorICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1Moa2xhc3MpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1NpZ25hbEZsYWdz
PihHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLCAv
LyBDbGFzcyBvZmZzZXQuCisgICAgICAgICAgICAwLCAvLyBBY2N1bXVsYXRvci4KKyAgICAgICAg
ICAgIDAsIC8vIEFjY3VtdWxhdG9yIGRhdGEuCisgICAgICAgICAgICBtYXJzaGFsX1ZPSURfX01J
TklPQkpFQ1QsIC8vIEN1c3RvbSBtYXJzaGFsbGVyLgorICAgICAgICAgICAgR19UWVBFX05PTkUs
IC8vIFJldHVybiB0eXBlLgorICAgICAgICAgICAgMSwgLy8gT25seSBvbmUgcGFyYW1ldGVyLgor
ICAgICAgICAgICAgR1NUX1RZUEVfQlVGRkVSKTsKK30KKworR3N0RWxlbWVudCogd2Via2l0X3Zp
ZGVvX3NpbmtfbmV3KCkKK3sKKyAgICByZXR1cm4gR1NUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdF
QktJVF9UWVBFX1ZJREVPX1NJTkssIDApKTsKK30KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
ICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCi0tIAoxLjcuOS4x
</data>
<flag name="commit-queue"
          id="131530"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129001</attachid>
            <date>2012-02-27 02:58:15 -0800</date>
            <delta_ts>2012-02-27 08:26:08 -0800</delta_ts>
            <desc>0.11 video-sink</desc>
            <filename>011-video-sink.patch</filename>
            <type>text/plain</type>
            <size>32450</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBiZWUyMjcwMTRiNTM2MTJkNTZmNzNkNTBlYmY3ZmRjOGVmNjg5ODc3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDEwOjQ3OjMwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
MC4xMSB2aWRlby1zaW5rCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAzOSArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbSAgICAgICAgICAgICAgICAgfCAgICAxICsKIFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgMSArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggICB8ICAgMzAgKy0KIC4uLi9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSAgICAgICAgIHwgICA3NSArKysrLQogLi4uL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDY2ICsrKy0KIC4u
Li9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgICAgICAgIHwgICA1NyAr
Ky0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgIHwg
ICAxMCArLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwICAg
ICAgfCAgICAyICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgg
ICAgICAgIHwgICAgNSArCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
cjEuY3BwICAgICB8ICAzNzQgKysrKysrKysrKysrKysrKysrKysKIDExIGZpbGVzIGNoYW5nZWQs
IDU5MCBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyMS5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU4NDVmYS4uY2FkZGMyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSw1ICsxLDQ0IEBACiAyMDEyLTAyLTI3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAorICAgICAgICBbR1N0cmVhbWVyXSAwLjExIHZpZGVvLXNpbmsKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOiBBZGQgbmV3IHZpZGVvIHNpbmsgY29kZSB0byB0aGUgYnVpbGQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmg6IGNyZWF0ZUltYWdlIEFQ
SQorICAgICAgICB1cGRhdGUgc28gaW1wbGVtZW50YXRpb25zIGRvbid0IG5lZWQgdG8gdXNlCisg
ICAgICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyB3aGljaCBoYXMgYmVlbiByZW1vdmVk
IGluIGdzdC0wLjExLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUlt
YWdlKToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbToKKyAgICAgICAgKEltYWdlR1N0cmVh
bWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6Oklt
YWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJRdC5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFt
ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwOiBCdWlsZCBvbmx5CisgICAgICAgIGZvciBnc3QtMC4x
MC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmg6IE5vIG5lZWQgZm9yCisgICAgICAgIEdTdHJlYW1lckdXb3JsZCBpbiB0aGUgZ3N0LTAu
MTEgdmlkZW8gc2luay4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9TaW5rR1N0cmVhbWVyMS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwLgorICAgICAgICAoX1dl
YktpdFZpZGVvU2lua1ByaXZhdGUpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdGltZW91
dF9mdW5jKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcik6CisgICAgICAgICh3
ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKToKKyAgICAgICAgKHVubG9ja0J1ZmZlck11dGV4KToK
KyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3VubG9jayk6CisgICAgICAgICh3ZWJraXRfdmlk
ZW9fc2lua191bmxvY2tfc3RvcCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19zdG9wKToK
KyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0KToKKyAgICAgICAgKHdlYmtpdF92aWRl
b19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbik6CisgICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklP
QkpFQ1QpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfdmlkZW9fc2lua19uZXcpOgorCisyMDEyLTAyLTI3ICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKwogICAgICAgICBbR1N0cmVhbWVyXSAwLjExIHN1cHBv
cnQgaW4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyCiAgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQppbmRleCA3YjNkZTMxLi41NTU1ZDA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTQ1MzMsNiArNDUzMyw3IEBAIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3cu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdl
YlNvdXJjZUdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvQ29sb3JHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkg
Yi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDJhNDhmMjcuLjYxMzk4MjQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFy
Z2V0LnByaQpAQCAtMzI0NCw2ICszMjQ0LDcgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJ
REVPPTEpIHsKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJWZXJzaW9uaW5nLmMgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgXAorICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIFwKICAg
ICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0
Zm9ybVZpZGVvV2luZG93UXQuY3BwIFwKICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAppbmRleCBh
Yjc5OWJhLi5iM2UzMTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaApAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAy
MDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMjAg
KzIzLDIzIEBACiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3Zp
ZGVvL3ZpZGVvLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIFVTRShDQUlSTykK
LSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyIEdz
dEJ1ZmZlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RDYXBzIEdzdENhcHM7CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIGNsYXNzIEludFNpemU7CitjbGFzcyBCaXRtYXBJbWFnZTsKIAogY2xhc3MgSW1h
Z2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNyZWF0ZUlt
YWdlKEdzdEJ1ZmZlciopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1l
cj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVy
LCBjYXBzKSk7CisgICAgICAgIH0KICAgICAgICAgfkltYWdlR1N0cmVhbWVyKCk7CiAKICAgICAg
ICAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gaW1hZ2UoKQpAQCAtNDgsMTggKzUxLDcgQEAgY2xh
c3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewog
ICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxCaXRtYXBJbWFnZT4gbV9pbWFnZTsKIAotI2lm
IFVTRShDQUlSTykKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUs
IGNhaXJvX2Zvcm1hdF90Jik7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICBJ
bWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSwgUUltYWdlOjpGb3JtYXQpOwotI2Vu
ZGlmCi0KLSNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZl
ciomLCBJbnRTaXplKTsKLSNlbmRpZgotCisgICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZl
ciomLCBHc3RDYXBzKik7CiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQpp
bmRleCBmZTA5MjhiLi4zNDUzYzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQpAQCAt
MjIsMzIgKzIyLDc3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRl
ICJJbWFnZUdTdHJlYW1lci5oIgogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikK
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNp
ZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEu
aD4KKyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFn
ZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVy
KQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgR3N0
Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19mcm9t
X2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBH
U1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJ
REVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19J
TkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcEluZm8gaW5mbzsKKyAgICBnc3Rf
YnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOworICAgIGNvbnN0IFVJbnQ4
KiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGluZm8uZGF0YSk7
CisjZWxzZQogICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgR3N0Q2FwcyogY2Fw
cyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3Jt
YXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwg
JndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAg
ICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2Fwcyhj
YXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCkpKTsKLX0KKyAg
ICBndWludCBidWZmZXJTaXplID0gR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcik7CisgICAgY29uc3Qg
VUludDgqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oR1NUX0JV
RkZFUl9EQVRBKGJ1ZmZlcikpOworI2VuZGlmCiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJl
YW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSkKLSAgICA6IG1faW1hZ2UoMCkK
LXsKLSAgICBBU1NFUlQoR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikpOworICAgIEFTU0VSVChidWZm
ZXJTaXplKTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRh
Q3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oR1NUX0JVRkZFUl9E
QVRBKGJ1ZmZlcikpLCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxsb2NhdG9yTnVsbCkp
OworICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0
aEJ5dGVzTm9Db3B5KDAsIGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGtDRkFsbG9jYXRvck51bGwp
KTsKICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHByb3ZpZGVyKEFkb3B0Q0YsIENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhLmdldCgpKSk7Ci0gICAgQ0dJbWFnZVJl
ZiBmcmFtZUltYWdlID0gQ0dJbWFnZUNyZWF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCks
IDgsIDMyLCBzaXplLndpZHRoKCkqNCwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAotICAgICAg
ICBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFGaXJzdCwgcHJvdmlk
ZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKworICAgIHNp
emVfdCBiaXRzUGVyQ29tcG9uZW50ID0gODsKKyAgICBzaXplX3QgYml0c1BlclBpeGVsOworICAg
IHNpemVfdCBieXRlc1BlclJvdzsKKyAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKKworI2lm
IEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9W
SURFT19GT1JNQVRfQkdSQSkgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9y
ZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICAgICAgYml0c1BlclBpeGVsID0g
MzI7CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0OworICAgIH0gZWxzZSB7CisgICAg
ICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxw
aGFOb25lOworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAyNDsKKyAgICAgICAgYnl0ZXNQZXJSb3cg
PSB3aWR0aCAqIDM7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQVJHQikgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJC
aWcgfCBrQ0dJbWFnZUFscGhhRmlyc3Q7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDMyOworICAg
ICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVsc2UgeworICAgICAgICBiaXRt
YXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcgfCBrQ0dJbWFnZUFscGhhTm9uZTsKKyAg
ICAgICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiAz
OworICAgIH0KKyNlbmRpZgorCisgICAgQ0dJbWFnZVJlZiBmcmFtZUltYWdlID0gQ0dJbWFnZUNy
ZWF0ZSh3aWR0aCwgaGVpZ2h0LCBiaXRzUGVyQ29tcG9uZW50LCBiaXRzUGVyUGl4ZWwsIGJ5dGVz
UGVyUm93LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8sIHByb3ZpZGVyLmdl
dCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiAgICAgbV9pbWFnZSA9
IEJpdG1hcEltYWdlOjpjcmVhdGUoZnJhbWVJbWFnZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7CisjZW5kaWYKIH0KIAog
SW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFt
ZXJDYWlyby5jcHAKaW5kZXggOGIzYTA3Ni4uYTM5YjVmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdT
dHJlYW1lckNhaXJvLmNwcApAQCAtMjIsNDAgKzIyLDcyIEBACiAKICNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGdzdC9n
c3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCisKICNp
bmNsdWRlICJHT3duUHRyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6
OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0
cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2Uo
MCkKIHsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyB2aWRlb0lu
Zm87CisgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpOworCisg
ICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUKCZ2aWRlb0lu
Zm8pOworICAgIGludCB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pOwor
ICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyk7CisKKyAg
ICBHc3RNYXBJbmZvIG1hcEluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmbWFwSW5m
bywgR1NUX01BUF9SRUFEKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlckRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBJbmZvLmRhdGEpOworI2Vsc2UKKyAgICB1
bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOwogICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9
IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAg
ICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNl
X2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fw
c191bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNf
dW5yZWYoY2Fwcyk7CisgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3Jt
YXQsICZ3aWR0aCwgJmhlaWdodCk7CisjZW5kaWYKIAogICAgIGNhaXJvX2Zvcm1hdF90IGNhaXJv
Rm9ybWF0OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1h
dCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExF
X0VORElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorICAgICAg
ICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CisgICAgZWxzZQorICAgICAgICBj
YWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IyNDsKKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9
PSBHU1RfVklERU9fRk9STUFUX0FSR0IpCiAgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJUk9fRk9S
TUFUX0FSR0IzMjsKICAgICBlbHNlCiAgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJUk9fRk9STUFU
X1JHQjI0OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVy
KGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgY2Fpcm9Gb3JtYXQpKTsKLX0KKyNpZmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGludCBzdHJpZGUgPSBHU1RfVklERU9fSU5GT19QTEFO
RV9TVFJJREUoJnZpZGVvSW5mbywgMCk7CisjZWxzZQorICAgIGludCBzdHJpZGUgPSBjYWlyb19m
b3JtYXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgd2lkdGgpOworI2VuZGlmCiAKLUlt
YWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUg
c2l6ZSwgY2Fpcm9fZm9ybWF0X3QmIGNhaXJvRm9ybWF0KQotICAgIDogbV9pbWFnZSgwKQotewot
ICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhKEdTVF9CVUZGRVJfREFUQShidWZmZXIpLCBjYWlyb0Zvcm1hdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3JtYXQsIHNp
emUud2lkdGgoKSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ1ZmZlckRhdGEsIGNhaXJvRm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzdHJpZGUpOwogICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNl
KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CiAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpj
cmVhdGUoc3VyZmFjZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorCisgICAgR3N0Vmlk
ZW9Dcm9wTWV0YSogY3JvcE1ldGEgPSBnc3RfYnVmZmVyX2dldF92aWRlb19jcm9wX21ldGEoYnVm
ZmVyKTsKKyAgICBpZiAoY3JvcE1ldGEpCisgICAgICAgIG1faW1hZ2UtPmNyb3AoSW50UmVjdChj
cm9wTWV0YS0+eCwgY3JvcE1ldGEtPnksIGNyb3BNZXRhLT53aWR0aCwgY3JvcE1ldGEtPmhlaWdo
dCkpOworCisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXBJbmZvKTsKKyNlbmRpZgog
fQogCiBJbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lclF0LmNwcAppbmRleCAxODhjMGJiLi5kY2NmYjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyUXQuY3BwCkBAIC0yMywzNyArMjMsNTggQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCiAjaW5jbHVkZSAiR093blB0ci5oIgogCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgor
I2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEK
KyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5kaWYKKwogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdl
R1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIp
CitJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBHc3RD
YXBzKiBjYXBzKQorICAgIDogbV9pbWFnZSgwKQogewotICAgIGludCB3aWR0aCA9IDAsIGhlaWdo
dCA9IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsK
LSAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3Bh
cnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3Rf
Y2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFFQaXhtYXAq
IHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdz
dFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZ2aWRl
b0luZm8sIGNhcHMpOwogCi0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisgICAgR3N0VmlkZW9G
b3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUKCZ2aWRlb0luZm8pOworICAgIGlu
dCB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pOworICAgIGludCBoZWln
aHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyk7CiAKKyAgICBHc3RNYXBJbmZv
IGluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsK
KyAgICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihpbmZvLmRh
dGEpOworI2Vsc2UKKyAgICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWNo
YXIqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7CisgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0
ID0gMDsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7CisgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9w
YXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCk7CisjZW5kaWYKICAgICBR
SW1hZ2U6OkZvcm1hdCBpbWFnZUZvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfUkdCKQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAo
Zm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBR
SW1hZ2U6OkZvcm1hdF9SR0IzMjsKKyAgICBlbHNlCiAgICAgICAgIGltYWdlRm9ybWF0ID0gUUlt
YWdlOjpGb3JtYXRfUkdCODg4OworI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQVJHQikKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzI7
CiAgICAgZWxzZQotICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOwor
ICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKKyNlbmRpZgogCi0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lk
dGgsIGhlaWdodCksIGltYWdlRm9ybWF0KSk7Ci19CisgICAgUUltYWdlIGltYWdlKGJ1ZmZlckRh
dGEsIHdpZHRoLCBoZWlnaHQsIGltYWdlRm9ybWF0KTsKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdl
R1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXplLCBRSW1hZ2U6OkZvcm1h
dCBpbWFnZUZvcm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBRUGl4bWFwKiBzdXJmYWNl
ID0gbmV3IFFQaXhtYXA7Ci0gICAgUUltYWdlIGltYWdlKEdTVF9CVUZGRVJfREFUQShidWZmZXIp
LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGltYWdlRm9ybWF0KTsKICAgICBzdXJmYWNl
LT5jb252ZXJ0RnJvbUltYWdlKGltYWdlKTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNy
ZWF0ZShzdXJmYWNlKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2J1ZmZl
cl91bm1hcChidWZmZXIsICZpbmZvKTsKKyNlbmRpZgogfQogCiBJbWFnZUdTdHJlYW1lcjo6fklt
YWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lci5jcHAKaW5kZXggNmY3Y2FhZS4uMTc1NTU1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE1MDgsNyArMTUwOCwxMSBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JgogICAgIGlmICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2UgPSBJbWFnZUdTdHJlYW1lcjo6
Y3JlYXRlSW1hZ2UobV9idWZmZXIpOworICAgIEdzdENhcHMqIGNhcHMgPSB3ZWJraXRfZ3N0X2Vs
ZW1lbnRfZ2V0X3BhZF9jYXBzKG1fd2Via2l0VmlkZW9TaW5rLCAic2luayIpOworICAgIGlmICgh
Y2FwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBnc3RJ
bWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShtX2J1ZmZlciwgY2Fwcyk7CiAgICAg
aWYgKCFnc3RJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNzM5LDcgKzE3NDMsMTEgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0so
bWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3Np
Z25hbF9jb25uZWN0KG1fcGxheUJpbiwgImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlh
UGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAKKyNpZm5kZWYgR1NU
X0FQSV9WRVJTSU9OXzEKICAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5r
X25ldyhtX2dzdEdXb3JsZC5nZXQoKSk7CisjZWxzZQorICAgIG1fd2Via2l0VmlkZW9TaW5rID0g
d2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CisjZW5kaWYKIAogICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
bV93ZWJraXRWaWRlb1NpbmssICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQ
bGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHAKaW5kZXggNDM2MzAzNi4uMzIyMzVhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
U2lua0dTdHJlYW1lci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShHU1RSRUFNRVIpCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAKICNpbmNsdWRlIDxnbGli
Lmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgpAQCAtMzk4LDQgKzM5OSw1IEBAIEdzdEVsZW1lbnQq
IHdlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3Js
ZCkKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAorI2VuZGlmIC8vIEdTVF9BUElfVkVSU0lPTl8x
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaApp
bmRleCA1MDE4NTBmLi43OWY3ZWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaApA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgogI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgorI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTc1LDcgKzc2
LDExIEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3MgewogCiAKIEdUeXBlICAgICAgIHdl
YmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKyNpZm5kZWYgR1NU
X0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3Jl
OjpHU3RyZWFtZXJHV29ybGQqKTsKKyNlbHNlCitHc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lu
a19uZXcoKTsKKyNlbmRpZgogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5M2JlMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZAorICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKgor
ICoKKyAqIFdlYktpdFZpZGVvU2luayBpcyBhIEdTdHJlYW1lciBzaW5rIGVsZW1lbnQgdGhhdCB0
cmlnZ2VycworICogcmVwYWludHMgaW4gdGhlIFdlYktpdCBHU3RyZWFtZXIgbWVkaWEgcGxheWVy
IGZvciB0aGUKKyAqIGN1cnJlbnQgdmlkZW8gYnVmZmVyLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpZiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQor
I2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Cisj
aW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92
aWRlby5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisKKy8vIENBSVJPX0ZPUk1B
VF9SR0IyNCB1c2VkIHRvIHJlbmRlciB0aGUgdmlkZW8gYnVmZmVycyBpcyBsaXR0bGUvYmlnIGVu
ZGlhbiBkZXBlbmRhbnQuCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorc3Rh
dGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RF
TVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19D
QVBTKEdTVF9WSURFT19DQVBTX01BS0UoInsgQkdSeCwgQkdSQSB9IikpKTsKKyNlbHNlCitzdGF0
aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVN
UExBVEUoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NB
UFMoR1NUX1ZJREVPX0NBUFNfTUFLRSgieyB4UkdCLCBBUkdCIH0iKSkpOworI2VuZGlmCisKKwor
R1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfdmlkZW9fc2lua19kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZworCitlbnVtIHsKKyAg
ICBSRVBBSU5UX1JFUVVFU1RFRCwKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAg
UFJPUF8wCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tMQVNU
X1NJR05BTF0gPSB7IDAsIH07CisKK3N0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSB7Cisg
ICAgR3N0QnVmZmVyKiBidWZmZXI7CisgICAgZ3VpbnQgdGltZW91dF9pZDsKKyAgICBHTXV0ZXgq
IGJ1ZmZlcl9tdXRleDsKKyAgICBHQ29uZCogZGF0YV9jb25kOworICAgIEdzdFZpZGVvSW5mbyBp
bmZvOworCisgICAgLy8gSWYgdGhpcyBpcyBUUlVFIGFsbCBwcm9jZXNzaW5nIHNob3VsZCBmaW5p
c2ggQVNBUAorICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgY291bGQgYmUg
YSByYWNlIGJldHdlZW4KKyAgICAvLyB1bmxvY2soKSBhbmQgcmVuZGVyKCksIHdoZXJlIHVubG9j
aygpIHdpbnMsIHNpZ25hbHMgdGhlCisgICAgLy8gR0NvbmQsIHRoZW4gcmVuZGVyKCkgdHJpZXMg
dG8gcmVuZGVyIGEgZnJhbWUgYWx0aG91Z2gKKyAgICAvLyBldmVyeXRoaW5nIGVsc2UgaXNuJ3Qg
cnVubmluZyBhbnltb3JlLiBUaGlzIHdpbGwgbGVhZAorICAgIC8vIHRvIGRlYWRsb2NrcyBiZWNh
dXNlIHJlbmRlcigpIGhvbGRzIHRoZSBzdHJlYW0gbG9jay4KKyAgICAvLworICAgIC8vIFByb3Rl
Y3RlZCBieSB0aGUgYnVmZmVyIG11dGV4CisgICAgYm9vbCB1bmxvY2tlZDsKK307CisKKyNkZWZp
bmUgd2Via2l0X3ZpZGVvX3NpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0VmlkZW9TaW5rLCB3ZWJraXRfdmlkZW9fc2luaywgR1NUX1RZ
UEVfVklERU9fU0lOSywgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3ZpZGVvX3Npbmtf
ZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0c2luayIsIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIndlYmtpdCB2aWRlbyBzaW5rIikpOworCisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19z
aW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1By
aXZhdGUqIHByaXY7CisKKyAgICBzaW5rLT5wcml2ID0gcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKTsKKyAgICBwcml2LT5kYXRhX2NvbmQgPSBXVEY6OmZhc3ROZXc8R0NvbmQ+KCk7Cisg
ICAgZ19jb25kX2luaXQocHJpdi0+ZGF0YV9jb25kKTsKKyAgICBwcml2LT5idWZmZXJfbXV0ZXgg
PSBXVEY6OmZhc3ROZXc8R011dGV4PigpOworICAgIGdfbXV0ZXhfaW5pdChwcml2LT5idWZmZXJf
bXV0ZXgpOworICAgIGdzdF92aWRlb19pbmZvX2luaXQoJnByaXYtPmluZm8pOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jKGdwb2ludGVyIGRhdGEp
Cit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gcmVpbnRlcnByZXRfY2FzdDxXZWJLaXRW
aWRlb1NpbmsqPihkYXRhKTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2lu
ay0+cHJpdjsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOworICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKKyAgICBwcml2LT5i
dWZmZXIgPSAwOworICAgIHByaXYtPnRpbWVvdXRfaWQgPSAwOworCisgICAgaWYgKCFidWZmZXIg
fHwgcHJpdi0+dW5sb2NrZWQgfHwgVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpIHsK
KyAgICAgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBnX211dGV4
X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
fQorCisgICAgZ19zaWduYWxfZW1pdChzaW5rLCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW1JF
UEFJTlRfUkVRVUVTVEVEXSwgMCwgYnVmZmVyKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZl
cik7CisgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOworICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRp
YyBHc3RGbG93UmV0dXJuIHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcihHc3RCYXNlU2luayogYnNp
bmssIEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdF
QktJVF9WSURFT19TSU5LKGJzaW5rKTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2
ID0gc2luay0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwor
CisgICAgaWYgKHByaXYtPnVubG9ja2VkKSB7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9CisKKyAg
ICBwcml2LT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZihidWZmZXIpOworCisgICAgR3N0VmlkZW9G
cmFtZSBmcmFtZTsKKyAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAoJmZyYW1lLCAmcHJpdi0+
aW5mbywgYnVmZmVyLCBHU1RfTUFQX1JFQUQpKSB7CisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYo
YnVmZmVyKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgIH0KKworICAgIEdzdFZpZGVvRm9ybWF0
IGZvcm1hdCA9IEdTVF9WSURFT19GUkFNRV9GT1JNQVQoJmZyYW1lKTsKKyAgICBpbnQgd2lkdGgg
PSBHU1RfVklERU9fRlJBTUVfV0lEVEgoJmZyYW1lKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJ
REVPX0ZSQU1FX0hFSUdIVCgmZnJhbWUpOworCisgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwKCZm
cmFtZSk7CisKKyAgICAvLyBDYWlybydzIEFSR0IgaGFzIHByZS1tdWx0aXBsaWVkIGFscGhhIHdo
aWxlIEdTdHJlYW1lcidzIGRvZXNuJ3QuCisgICAgLy8gSGVyZSB3ZSBjb252ZXJ0IHRvIENhaXJv
J3MgQVJHQi4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3Jt
YXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSB7CisgICAgICAgIC8vIEJlY2F1c2UgR3N0QmFz
ZVNpbms6OnJlbmRlcigpIG9ubHkgb3ducyB0aGUgYnVmZmVyIHJlZmVyZW5jZSBpbiB0aGUKKyAg
ICAgICAgLy8gbWV0aG9kIHNjb3BlIHdlIGNhbid0IHVzZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFi
bGUoKSBoZXJlLiBBbHNvCisgICAgICAgIC8vIFRoZSBidWZmZXIgY29udGVudCBzaG91bGQgbm90
IGJlIGNoYW5nZWQgaGVyZSBiZWNhdXNlIHRoZSBzYW1lIGJ1ZmZlcgorICAgICAgICAvLyBjb3Vs
ZCBiZSBwYXNzZWQgbXVsdGlwbGUgdGltZXMgdG8gdGhpcyBtZXRob2QgKGluIHRoZW9yeSkuCisg
ICAgICAgIGdzaXplIGJ1ZmZlclNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZlcik7Cisg
ICAgICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGJ1
ZmZlclNpemUpOworCisgICAgICAgIC8vIENoZWNrIGlmIGFsbG9jYXRpb24gZmFpbGVkLgorICAg
ICAgICBpZiAoVU5MSUtFTFkoIW5ld0J1ZmZlcikpIHsKKyAgICAgICAgICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJS
T1I7CisgICAgICAgIH0KKworICAgICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byhuZXdCdWZmZXIs
IGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0QnVmZmVyQ29weUZsYWdzPihHU1RfQlVGRkVSX0NPUFlf
TUVUQURBVEEpLCAwLCBidWZmZXJTaXplKTsKKworICAgICAgICAvLyBXZSBkb24ndCB1c2UgQ29s
b3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgaGVyZSBiZWNhdXNlCisgICAgICAgIC8v
IG9uZSBmdW5jdGlvbiBjYWxsIHBlciB2aWRlbyBwaXhlbCBpcyBqdXN0IHRvbyBleHBlbnNpdmU6
CisgICAgICAgIC8vIEZvciA3MjBwL1BBTCBmb3IgZXhhbXBsZSB0aGlzIG1lYW5zIDEyODAqNzIw
KjI1PTIzMDQwMDAwCisgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxzIHBlciBzZWNvbmQhCisgICAg
ICAgIHVuc2lnbmVkIHNob3J0IGFscGhhOworICAgICAgICBHc3RNYXBJbmZvIHNvdXJjZUluZm87
CisgICAgICAgIEdzdE1hcEluZm8gZGVzdGluYXRpb25JbmZvOworICAgICAgICBnc3RfYnVmZmVy
X21hcChidWZmZXIsICZzb3VyY2VJbmZvLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBjb25zdCBn
dWludDgqIHNvdXJjZSA9IGNvbnN0X2Nhc3Q8Z3VpbnQ4Kj4oc291cmNlSW5mby5kYXRhKTsKKyAg
ICAgICAgZ3N0X2J1ZmZlcl9tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvLCBHU1RfTUFQ
X1dSSVRFKTsKKyAgICAgICAgZ3VpbnQ4KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGd1aW50
OCo+KGRlc3RpbmF0aW9uSW5mby5kYXRhKTsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHdpZHRoOyB5
KyspIHsKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgICAgICAgICAg
ICAgYWxwaGEgPSBzb3VyY2VbM107CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAo
c291cmNlWzBdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSBhbHBoYTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgYWxwaGEgPSBzb3VyY2VbMF07CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBh
bHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9IChzb3VyY2VbMV0gKiBhbHBo
YSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMl0gPSAoc291cmNl
WzJdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzNd
ID0gKHNvdXJjZVszXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIHNvdXJjZSArPSA0OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZz
b3VyY2VJbmZvKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChuZXdCdWZmZXIsICZkZXN0aW5h
dGlvbkluZm8pOworCisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICAgICAg
YnVmZmVyID0gcHJpdi0+YnVmZmVyID0gbmV3QnVmZmVyOworICAgIH0KKworCisgICAgLy8gVGhp
cyBzaG91bGQgbGlrZWx5IHVzZSBhIGxvd2VyIHByaW9yaXR5LCBidXQgZ2xpYiBjdXJyZW50bHkg
c3RhcnZlcworICAgIC8vIGxvd2VyIHByaW9yaXR5IHNvdXJjZXMuCisgICAgLy8gU2VlOiBodHRw
czovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwODMwLgorICAgIHByaXYt
PnRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3ZpZGVvX3Np
bmtfdGltZW91dF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3N0X29iamVjdF9yZWYoc2luayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3Vu
cmVmKSk7CisKKyAgICBnX2NvbmRfd2FpdChwcml2LT5kYXRhX2NvbmQsIHByaXYtPmJ1ZmZlcl9t
dXRleCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICByZXR1
cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJ
VF9WSURFT19TSU5LKG9iamVjdCk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9
IHNpbmstPnByaXY7CisKKyAgICBpZiAocHJpdi0+ZGF0YV9jb25kKSB7CisgICAgICAgIGdfY29u
ZF9jbGVhcihwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+
ZGF0YV9jb25kKTsKKyAgICAgICAgcHJpdi0+ZGF0YV9jb25kID0gMDsKKyAgICB9CisKKyAgICBp
ZiAocHJpdi0+YnVmZmVyX211dGV4KSB7CisgICAgICAgIGdfbXV0ZXhfY2xlYXIocHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICAgICAgV1RGOjpmYXN0RGVsZXRlKHByaXYtPmJ1ZmZlcl9tdXRleCk7
CisgICAgICAgIHByaXYtPmJ1ZmZlcl9tdXRleCA9IDA7CisgICAgfQorCisgICAgR19PQkpFQ1Rf
Q0xBU1MocGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB1
bmxvY2tCdWZmZXJNdXRleChXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2KQoreworICAgIGdf
bXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAgaWYgKHByaXYtPmJ1ZmZlcikg
eworICAgICAgICBnc3RfYnVmZmVyX3VucmVmKHByaXYtPmJ1ZmZlcik7CisgICAgICAgIHByaXYt
PmJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgcHJpdi0+dW5sb2NrZWQgPSB0cnVlOworCisgICAg
Z19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua191
bmxvY2soR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsg
PSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworCisgICAgdW5sb2NrQnVmZmVyTXV0ZXgoc2lu
ay0+cHJpdik7CisKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChHU1Rf
QkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssIChvYmplY3QpLCBUUlVFKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9wKEdzdEJhc2VTaW5rKiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSURFT19TSU5L
KG9iamVjdCktPnByaXY7CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
KyAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1
ZmZlcl9tdXRleCk7CisKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChH
U1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2tfc3RvcCwgKG9iamVjdCksIFRSVUUpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Npbmtfc3RvcChHc3RCYXNlU2luayogYmFzZV9z
aW5rKQoreworICAgIHVubG9ja0J1ZmZlck11dGV4KFdFQktJVF9WSURFT19TSU5LKGJhc2Vfc2lu
ayktPnByaXYpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X3ZpZGVvX3Npbmtfc3RhcnQoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sKKyAgICBXZWJLaXRW
aWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJp
djsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHByaXYtPnVu
bG9ja2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
KyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5r
X3Byb3Bvc2VfYWxsb2NhdGlvbihHc3RCYXNlU2luayogYmFzZV9zaW5rLCBHc3RRdWVyeSogcXVl
cnkpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYmFz
ZV9zaW5rKTsKKyAgICBHc3RDYXBzKiBjYXBzOworICAgIGdib29sZWFuIG5lZWRfcG9vbDsKKwor
ICAgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uKHF1ZXJ5LCAmY2FwcywgJm5lZWRfcG9vbCk7
CisKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlmICghZ3N0
X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZzaW5rLT5wcml2LT5pbmZvLCBjYXBzKSkKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworCisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEocXVlcnks
IEdTVF9WSURFT19NRVRBX0FQSSk7CisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEo
cXVlcnksIEdTVF9WSURFT19DUk9QX01FVEFfQVBJKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIHZvaWQgbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKEdDbG9zdXJlKiBjbG9zdXJlLCBH
VmFsdWUqIHJldHVyblZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGd1aW50IHBhcmFtZXRlcnNOdW1iZXIsIGNvbnN0IEdWYWx1ZSogcGFyYW1ldGVycywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBpbnZvY2F0aW9uSGludCwg
Z3BvaW50ZXIgbWFyc2hhbERhdGEpCit7CisgICAgdHlwZWRlZiB2b2lkICgqbWFyc2hhbGZ1bmNf
Vk9JRF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iamVjdCwgZ3BvaW50ZXIgYXJnMSwgZ3BvaW50
ZXIgZGF0YTIpOworICAgIG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QgY2FsbGJhY2s7Cisg
ICAgR0NDbG9zdXJlKiBjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgICBncG9pbnRlciBk
YXRhMSwgZGF0YTI7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKHBhcmFtZXRlcnNOdW1iZXIgPT0g
Mik7CisKKyAgICBpZiAoR19DQ0xPU1VSRV9TV0FQX0RBVEEoY2xvc3VyZSkpIHsKKyAgICAgICAg
ZGF0YTEgPSBjbG9zdXJlLT5kYXRhOworICAgICAgICBkYXRhMiA9IGdfdmFsdWVfcGVla19wb2lu
dGVyKHBhcmFtZXRlcnMgKyAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhMSA9IGdfdmFs
dWVfcGVla19wb2ludGVyKHBhcmFtZXRlcnMgKyAwKTsKKyAgICAgICAgZGF0YTIgPSBjbG9zdXJl
LT5kYXRhOworICAgIH0KKyAgICBjYWxsYmFjayA9IChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JK
RUNUKSAobWFyc2hhbERhdGEgPyBtYXJzaGFsRGF0YSA6IGNjLT5jYWxsYmFjayk7CisKKyAgICBj
YWxsYmFjayhkYXRhMSwgZ192YWx1ZV9nZXRfYm94ZWQocGFyYW1ldGVycyArIDEpLCBkYXRhMik7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0Vmlk
ZW9TaW5rQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RCYXNlU2lua0NsYXNzKiBnc3RiYXNlX3Np
bmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xh
c3MqIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnc3Rf
ZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRfY2xhc3MsIGdzdF9zdGF0aWNf
cGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nf
c2V0X21ldGFkYXRhKGVsZW1lbnRfY2xhc3MsCisgICAgICAgICAgICAiV2ViS2l0IHZpZGVvIHNp
bmsiLAorICAgICAgICAgICAgIlNpbmsvVmlkZW8iLCAiU2VuZHMgdmlkZW8gZGF0YSBmcm9tIGEg
R1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCisgICAgICAgICAgICAiQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZhdGUpKTsKKworICAgIGdvYmplY3Rf
Y2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlOworCisgICAgZ3N0YmFz
ZV9zaW5rX2NsYXNzLT51bmxvY2sgPSB3ZWJraXRfdmlkZW9fc2lua191bmxvY2s7CisgICAgZ3N0
YmFzZV9zaW5rX2NsYXNzLT51bmxvY2tfc3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19z
dG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cmVuZGVyID0gd2Via2l0X3ZpZGVvX3Npbmtf
cmVuZGVyOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJlcm9sbCA9IHdlYmtpdF92aWRlb19z
aW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnN0b3AgPSB3ZWJraXRfdmlkZW9f
c2lua19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3RhcnQgPSB3ZWJraXRfdmlkZW9f
c2lua19zdGFydDsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9
IHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbjsKKworICAgIHdlYmtpdF92aWRl
b19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJyZXBhaW50
LXJlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFMX1JVTl9MQVNUIHwgR19T
SUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsIC8vIENsYXNzIG9mZnNldC4KKyAgICAgICAg
ICAgIDAsIC8vIEFjY3VtdWxhdG9yLgorICAgICAgICAgICAgMCwgLy8gQWNjdW11bGF0b3IgZGF0
YS4KKyAgICAgICAgICAgIG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCwgLy8gQ3VzdG9tIG1hcnNo
YWxsZXIuCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgLy8gUmV0dXJuIHR5cGUuCisgICAgICAg
ICAgICAxLCAvLyBPbmx5IG9uZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICBHU1RfVFlQRV9CVUZG
RVIpOworfQorCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoKQoreworICAgIHJl
dHVybiBHU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklERU9fU0lOSywgMCkp
OworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJ
T05fMSkKLS0gCjEuNy45LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129041</attachid>
            <date>2012-02-27 08:26:22 -0800</date>
            <delta_ts>2012-02-27 10:13:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77087-20120227172645.patch</filename>
            <type>text/plain</type>
            <size>48566</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4OTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2QzMzg3NGQwNGM1N2Uz
OWIzZTY2YjY5NDc1NGE3MzAxNzgyNWEzOC4uMTY2YzlkZTg5N2U0ZmY2NmJlMTcyMjg3YjNmOGQz
MzdkNDg1YjVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY4IEBACisyMDEyLTAyLTI3ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVy
XSAwLjExIHZpZGVvLXNpbmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc3MDg3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQgbmV3IHZpZGVvIHNpbmsgY29kZSB0
byB0aGUgYnVpbGQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdl
R1N0cmVhbWVyLmg6IGNyZWF0ZUltYWdlIEFQSQorICAgICAgICB1cGRhdGUgc28gaW1wbGVtZW50
YXRpb25zIGRvbid0IG5lZWQgdG8gdXNlCisgICAgICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2Vf
Y2FwcyB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGluIGdzdC0wLjExLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
Ry5tbToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwOgor
ICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHA6CisgICAgICAgIChJ
bWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwOiBCdWls
ZCBvbmx5CisgICAgICAgIGZvciBnc3QtMC4xMC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmg6IE5vIG5lZWQgZm9yCisgICAgICAgIEdT
dHJlYW1lckdXb3JsZCBpbiB0aGUgZ3N0LTAuMTEgdmlkZW8gc2luay4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHA6IENvcGllZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuY3BwLgorICAgICAgICAoX1dlYktpdFZpZGVvU2lua1ByaXZhdGUpOgorICAgICAg
ICAod2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jKToKKyAgICAgICAgKHdlYmtpdF92aWRl
b19zaW5rX3JlbmRlcik6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKToKKyAg
ICAgICAgKHVubG9ja0J1ZmZlck11dGV4KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3Vu
bG9jayk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcCk6CisgICAgICAg
ICh3ZWJraXRfdmlkZW9fc2lua19zdG9wKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0
YXJ0KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbik6Cisg
ICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19uZXcpOgorCisy
MDEyLTAyLTI3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAg
ICAgICBbR1N0cmVhbWVyXSAwLjExIHN1cHBvcnQgaW4gTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4
OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJhc2lj
IHBvcnQgdG8gR1N0cmVhbWVyIDAuMTEgQVBJcy4gVGhpcyBwYXRjaCBleGNsdWRlcyB0aGUgdmlk
ZW8KKyAgICAgICAgcGFpbnRpbmcgY2hhbmdlcyBhbmQgdGhlIEdTdHJlYW1lckdXb3JsZCBjaGFu
Z2VzIHdoaWNoIGFyZSBoYW5kbGVkCisgICAgICAgIGluIHR3byBvdGhlciBwYXRjaGVzIChidWdz
IDc3MDg3IGFuZCA3NzA4OCkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdURjo6R3N0RWxlbWVudCk6CisgICAgICAgIChXVEY6OkdzdFBhZCk6CisgICAg
ICAgIChXVEY6OkdzdFBhZFRlbXBsYXRlKToKKyAgICAgICAgKFdURjo6R3N0VGFzayk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuYzog
QWRkZWQuCisgICAgICAgICh3ZWJraXRfZ3N0X29iamVjdF9yZWZfc2luayk6CisgICAgICAgICh3
ZWJraXRfZ3N0X2VsZW1lbnRfZ2V0X3BhZF9jYXBzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6aXNBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpk
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
Om5hdHVyYWxTaXplKToKKwogMjAxMi0wMi0yNyAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiByZXBhaW50IGNvdW50ZXIgZ3Jh
cGhzIHdoZW4gdGltZWxpbmUgc3BsaXR0ZXIgbW92ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IGEzZWQxNzY4MDczZTFiZDU2ZjIxZDM0NGRhNjc1NDhhNTU3NGRjNGUuLjVkZWU1
Y2Q1YjZmNjY0ZGY0Y2M1YWMwZTM4YjFhNmY3MDJhMTUyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQpAQCAtNDUzMCw2ICs0NTMwLDggQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJl
YW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyR1dvcmxkLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckdXb3JsZC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5jIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWly
by5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBcCkBAIC00NTM4LDYgKzQ1NDAsNyBA
QCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVy
LmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1Np
bmtHU3RyZWFtZXIxLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQppbmRleCBkODI3Y2QzZDM4MTgwYmE3YzllZTUxMWQwNGE1Y2JmZDIwYTFmOWFiLi43NjBk
NDNlYjI3Njg5N2JmNjk1OWI2NmMzNjEyMjRhYTc3NzZkY2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTMy
MzEsNiArMzIzMSw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CiAgICAg
ICAgIEhFQURFUlMgKz0gXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuaCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1N0cmVhbWVyR1dvcmxkLmggXAorICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuaCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggXAogICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIFwK
ICAgICAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VH
U3RyZWFtZXIuaCBcCkBAIC0zMjQwLDggKzMyNDEsMTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX1ZJREVPPTEpIHsKICAgICAgICAgU09VUkNFUyArPSBcCiAgICAgICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgXAogICAgICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckdXb3JsZC5jcHAgXAorICAgICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuYyBc
CiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcCBcCiAgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBcCisgICAgICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgXAogICAgICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgXAogICAg
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1BsYXRmb3JtVmlkZW9XaW5kb3dR
dC5jcHAgXAogICAgICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyUXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKaW5kZXggMjQyN2MwNmIy
OTQyOTIwZjU1NjNjNjRiMGE2ZDJhYzUzZTcyYzFjNy4uYjg1Mzg3MDdjZjAxYzFiNzcxODY5OTRh
YzNkNTg1NmNjOWRkN2MwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtMTks
NiArMTksNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR1JlZlB0ckdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZlcnNpb25pbmcuaCIKIAogI2lmIFVTRShHU1RS
RUFNRVIpCiAjaW5jbHVkZSA8Z3N0L2dzdGVsZW1lbnQuaD4KQEAgLTMzLDEwICszNCw4IEBAIHRl
bXBsYXRlIDw+IEdSZWZQdHI8R3N0RWxlbWVudD4gYWRvcHRHUmVmKEdzdEVsZW1lbnQqIHB0cikK
IAogdGVtcGxhdGUgPD4gR3N0RWxlbWVudCogcmVmR1B0cjxHc3RFbGVtZW50PihHc3RFbGVtZW50
KiBwdHIpCiB7Ci0gICAgaWYgKHB0cikgewotICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JK
RUNUKHB0cikpOwotICAgICAgICBnc3Rfb2JqZWN0X3NpbmsoR1NUX09CSkVDVChwdHIpKTsKLSAg
ICB9CisgICAgaWYgKHB0cikKKyAgICAgICAgd2Via2l0R3N0T2JqZWN0UmVmU2luayhHU1RfT0JK
RUNUKHB0cikpOwogCiAgICAgcmV0dXJuIHB0cjsKIH0KQEAgLTU1LDEwICs1NCw5IEBAIHRlbXBs
YXRlIDw+IEdSZWZQdHI8R3N0UGFkPiBhZG9wdEdSZWYoR3N0UGFkKiBwdHIpCiAKIHRlbXBsYXRl
IDw+IEdzdFBhZCogcmVmR1B0cjxHc3RQYWQ+KEdzdFBhZCogcHRyKQogewotICAgIGlmIChwdHIp
IHsKLSAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKLSAgICAgICAgZ3N0
X29iamVjdF9zaW5rKEdTVF9PQkpFQ1QocHRyKSk7Ci0gICAgfQorICAgIGlmIChwdHIpCisgICAg
ICAgIHdlYmtpdEdzdE9iamVjdFJlZlNpbmsoR1NUX09CSkVDVChwdHIpKTsKKwogICAgIHJldHVy
biBwdHI7CiB9CiAKQEAgLTc2LDEwICs3NCw5IEBAIHRlbXBsYXRlIDw+IEdSZWZQdHI8R3N0UGFk
VGVtcGxhdGU+IGFkb3B0R1JlZihHc3RQYWRUZW1wbGF0ZSogcHRyKQogCiB0ZW1wbGF0ZSA8PiBH
c3RQYWRUZW1wbGF0ZSogcmVmR1B0cjxHc3RQYWRUZW1wbGF0ZT4oR3N0UGFkVGVtcGxhdGUqIHB0
cikKIHsKLSAgICBpZiAocHRyKSB7Ci0gICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1Qo
cHRyKSk7Ci0gICAgICAgIGdzdF9vYmplY3Rfc2luayhHU1RfT0JKRUNUKHB0cikpOwotICAgIH0K
KyAgICBpZiAocHRyKQorICAgICAgICB3ZWJraXRHc3RPYmplY3RSZWZTaW5rKEdTVF9PQkpFQ1Qo
cHRyKSk7CisKICAgICByZXR1cm4gcHRyOwogfQogCkBAIC0xMTEsMTAgKzEwOCw4IEBAIHRlbXBs
YXRlIDw+IEdSZWZQdHI8R3N0VGFzaz4gYWRvcHRHUmVmKEdzdFRhc2sqIHB0cikKIAogdGVtcGxh
dGUgPD4gR3N0VGFzayogcmVmR1B0cjxHc3RUYXNrPihHc3RUYXNrKiBwdHIpCiB7Ci0gICAgaWYg
KHB0cikgewotICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOwotICAgICAg
ICBnc3Rfb2JqZWN0X3NpbmsoR1NUX09CSkVDVChwdHIpKTsKLSAgICB9CisgICAgaWYgKHB0cikK
KyAgICAgICAgd2Via2l0R3N0T2JqZWN0UmVmU2luayhHU1RfT0JKRUNUKHB0cikpOwogCiAgICAg
cmV0dXJuIHB0cjsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmMgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5jCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI5MjM3MWY1MDkyODZjMTNiN2M2MzA4Nzc1NDhiNDNiY2M3MWU0MzAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
VmVyc2lvbmluZy5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhLCBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
IkdTdHJlYW1lclZlcnNpb25pbmcuaCIKKwordm9pZCB3ZWJraXRHc3RPYmplY3RSZWZTaW5rKEdz
dE9iamVjdCogZ3N0T2JqZWN0KQoreworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0
X29iamVjdF9yZWZfc2luayhnc3RPYmplY3QpOworI2Vsc2UKKyAgICBnc3Rfb2JqZWN0X3JlZihn
c3RPYmplY3QpOworICAgIGdzdF9vYmplY3Rfc2luayhnc3RPYmplY3QpOworI2VuZGlmCit9CisK
K0dzdENhcHMgKiB3ZWJraXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhHc3RFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBjaGFyKiBkaXJlY3Rpb24pCit7CisgICAgR3N0UGFkICpwYWQgPSBnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChlbGVtZW50LCBkaXJlY3Rpb24pOworICAgIGlmICghcGFkKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIEdzdENhcHMgKmNhcHM7CisjaWZkZWYgR1NUX0FQSV9WRVJT
SU9OXzEKKyAgICBjYXBzID0gZ3N0X3BhZF9nZXRfY3VycmVudF9jYXBzKHBhZCk7CisgICAgaWYg
KCFjYXBzKQorICAgICAgICBjYXBzID0gZ3N0X3BhZF9xdWVyeV9jYXBzKHBhZCwgMCk7CisjZWxz
ZQorICAgIGNhcHMgPSBHU1RfUEFEX0NBUFMocGFkKTsKKyNlbmRpZgorICAgIGdzdF9vYmplY3Rf
dW5yZWYoR1NUX09CSkVDVChwYWQpKTsKKyAgICByZXR1cm4gY2FwczsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJz
aW9uaW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyVmVyc2lvbmluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1OTljNGFkYWM1MTVjMmY1NmY1ZDljOTI4
YjQ2MTI2ZWNmMjQ3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhLCBTLkwuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgR1N0cmVhbWVyVmVyc2lvbmluZ19oCisjZGVmaW5lIEdTdHJlYW1lclZlcnNpb25pbmdf
aAorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworR19CRUdJTl9E
RUNMUworCit2b2lkIHdlYmtpdEdzdE9iamVjdFJlZlNpbmsoR3N0T2JqZWN0Kik7CitHc3RDYXBz
KiB3ZWJraXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhHc3RFbGVtZW50KiwgY29uc3QgY2hhciopOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gR1N0cmVhbWVyVmVyc2lvbmluZ19oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oCmluZGV4IGFiNzk5YmE5YWViZGExM2ExOWQ4MjgzZTYxYzM5NWFmN2ZiOTZh
MWYuLmIzZTMxNzg2OWJmYjQyNzMwYTVkZGUyZmUyZDQ4MTMzYjkzMDdmYjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJ
Z2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTAog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyMCArMjMsMjMgQEAKICNpZiBFTkFCTEUoVklERU8p
ICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUg
PGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYK
K3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dz
dENhcHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsKK2Ns
YXNzIEJpdG1hcEltYWdlOwogCiBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKik7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1
ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIGNhcHMpKTsKKyAgICAgICAgfQogICAgICAg
ICB+SW1hZ2VHU3RyZWFtZXIoKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBp
bWFnZSgpCkBAIC00OCwxOCArNTEsNyBAQCBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRy
PEJpdG1hcEltYWdlPiBtX2ltYWdlOwogCi0jaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFnZUdT
dHJlYW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRpZgot
Ci0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJ
bnRTaXplLCBRSW1hZ2U6OkZvcm1hdCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUpOwotI2VuZGlmCi0KKyAg
ICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEdzdENhcHMqKTsKICAgICB9OwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmluZGV4IGZlMDkyOGI5YjUwODg4YmU0MTJkODVi
ZTE3MTA2MjAzMDI0NjM1YmUuLjM0NTNjMzdhYzE4M2Y0MDAxNGY4ZGJlZjE1NjFiZjJhY2U3NDAw
ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9JbWFnZUdTdHJlYW1lckNHLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCkBAIC0yMiwzMiArMjIsNzcgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgi
CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdT
dHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6
SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgIDog
bV9pbWFnZSgwKQogeworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0lu
Zm8gdmlkZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBj
YXBzKTsKKworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1B
VCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlk
ZW9JbmZvKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0lu
Zm8pOworCisgICAgR3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwg
JmluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgY29uc3QgVUludDgqIGJ1ZmZlckRhdGEgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oaW5mby5kYXRhKTsKKyNlbHNlCiAgICAgaW50IHdp
ZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRf
Y2FwcyhidWZmZXIpOwogICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92
aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7
Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAg
ICB9CisgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0
aCwgJmhlaWdodCk7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1
ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpOwotfQorICAgIGd1aW50IGJ1ZmZlclNpemUg
PSBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKTsKKyAgICBjb25zdCBVSW50OCogYnVmZmVyRGF0YSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7
CisjZW5kaWYKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1
ZmZlciwgSW50U2l6ZSBzaXplKQotICAgIDogbV9pbWFnZSgwKQotewotICAgIEFTU0VSVChHU1Rf
QlVGRkVSX1NJWkUoYnVmZmVyKSk7CisgICAgQVNTRVJUKGJ1ZmZlclNpemUpOwogCi0gICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0Nv
cHkoMCwgc3RhdGljX2Nhc3Q8VUludDgqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSksIEdTVF9C
VUZGRVJfU0laRShidWZmZXIpLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgYnVm
ZmVyRGF0YSwgYnVmZmVyU2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOwogICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVX
aXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKLSAgICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2UgPSBDR0lt
YWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUud2lkdGgo
KSo0LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRl
cjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2Us
IGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworCisgICAgc2l6ZV90IGJpdHNQZXJDb21wb25l
bnQgPSA4OworICAgIHNpemVfdCBiaXRzUGVyUGl4ZWw7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93
OworICAgIENHQml0bWFwSW5mbyBiaXRtYXBJbmZvOworCisjaWYgR19CWVRFX09SREVSID09IEdf
TElUVExFX0VORElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSB7
CisgICAgICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0lt
YWdlQWxwaGFMYXN0OworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAzMjsKKyAgICAgICAgYnl0ZXNQ
ZXJSb3cgPSB3aWR0aCAqIDQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtD
R0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYU5vbmU7CisgICAgICAgIGJp
dHNQZXJQaXhlbCA9IDI0OworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogMzsKKyAgICB9
CisjZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSB7CisgICAg
ICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFG
aXJzdDsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMzI7CisgICAgICAgIGJ5dGVzUGVyUm93ID0g
d2lkdGggKiA0OworICAgIH0gZWxzZSB7CisgICAgICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFOb25lOworICAgICAgICBiaXRzUGVyUGl4ZWwg
PSAyNDsKKyAgICAgICAgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDM7CisgICAgfQorI2VuZGlmCisK
KyAgICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKHdpZHRoLCBoZWlnaHQs
IGJpdHNQZXJDb21wb25lbnQsIGJpdHNQZXJQaXhlbCwgYnl0ZXNQZXJSb3csIGRldmljZVJHQkNv
bG9yU3BhY2VSZWYoKSwgYml0bWFwSW5mbywgcHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0
ZShmcmFtZUltYWdlKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2J1ZmZl
cl91bm1hcChidWZmZXIsICZpbmZvKTsKKyNlbmRpZgogfQogCiBJbWFnZUdTdHJlYW1lcjo6fklt
YWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAppbmRleCA4
YjNhMDc2MTk1ZjEwYzgwNGU2OGRhYzIyN2QzZDhmMzNjYjRjMzg3Li5hMzliNWYwODQ5ZjYxNjE4
YTRkODg0YjRiM2ZjMTE4ODVmZDBjZjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fp
cm8uY3BwCkBAIC0yMiw0MCArMjIsNzIgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikKIAorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNp
bmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgIkdP
d25QdHIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0
QnVmZmVyKiYgYnVmZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgIDogbV9pbWFnZSgwKQogeworI2lm
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBn
c3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRl
b0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAg
aW50IHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhl
aWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcElu
Zm8gbWFwSW5mbzsKKyAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZtYXBJbmZvLCBHU1RfTUFQ
X1JFQUQpOworCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG1hcEluZm8uZGF0YSk7CisjZWxzZQorICAgIHVuc2lnbmVkIGNo
YXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihHU1RfQlVG
RkVSX0RBVEEoYnVmZmVyKSk7CiAgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBH
c3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwogICAgIEdzdFZpZGVv
Rm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBz
LCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNh
cHMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBnc3RfY2Fwc191bnJlZihjYXBz
KTsKKyAgICBnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRo
LCAmaGVpZ2h0KTsKKyNlbmRpZgogCiAgICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9Gb3JtYXQ7Ci0g
ICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9W
SURFT19GT1JNQVRfQkdSQSkKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisg
ICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCisgICAgICAgIGNhaXJvRm9y
bWF0ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvRm9ybWF0
ID0gQ0FJUk9fRk9STUFUX1JHQjI0OworI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURF
T19GT1JNQVRfQVJHQikKICAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMy
OwogICAgIGVsc2UKICAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7Cisj
ZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpLCBjYWlyb0Zvcm1hdCkpOwotfQorI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCisgICAgaW50IHN0cmlkZSA9IEdTVF9WSURFT19JTkZPX1BMQU5FX1NUUklERSgm
dmlkZW9JbmZvLCAwKTsKKyNlbHNlCisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJp
ZGVfZm9yX3dpZHRoKGNhaXJvRm9ybWF0LCB3aWR0aCk7CisjZW5kaWYKIAotSW1hZ2VHU3RyZWFt
ZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXplLCBjYWly
b19mb3JtYXRfdCYgY2Fpcm9Gb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEo
R1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIGNhaXJvRm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53aWR0aCgp
KSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGVfZm9yX2RhdGEoYnVmZmVyRGF0YSwgY2Fpcm9Gb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHN0
cmlkZSk7CiAgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpID09IENBSVJP
X1NUQVRVU19TVUNDRVNTKTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJm
YWNlKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisKKyAgICBHc3RWaWRlb0Nyb3BNZXRh
KiBjcm9wTWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3BfbWV0YShidWZmZXIpOworICAg
IGlmIChjcm9wTWV0YSkKKyAgICAgICAgbV9pbWFnZS0+Y3JvcChJbnRSZWN0KGNyb3BNZXRhLT54
LCBjcm9wTWV0YS0+eSwgY3JvcE1ldGEtPndpZHRoLCBjcm9wTWV0YS0+aGVpZ2h0KSk7CisKKyAg
ICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcEluZm8pOworI2VuZGlmCiB9CiAKIEltYWdl
R1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3Bw
CmluZGV4IDE4OGMwYmIwZWMyMDI2ZGIzNjZhYTc4ZmU4ODhiZDU0NmVkZDUzNTguLmRjY2ZiNjZk
NWMwMTU5NWFiYjdmM2JiOWZlZjczMjViMmM4ZDcyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFt
ZXJRdC5jcHAKQEAgLTIzLDM3ICsyMyw1OCBAQAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdT
VFJFQU1FUikKICNpbmNsdWRlICJHT3duUHRyLmgiCiAKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+Cisj
aW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQor
I2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1l
c3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VH
U3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikK
K0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENh
cHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0
ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwot
ICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFy
c2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9j
YXBzX3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgUVBpeG1hcCog
c3VyZmFjZSA9IG5ldyBRUGl4bWFwOworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0
VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVv
SW5mbywgY2Fwcyk7CiAKLSAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKyAgICBHc3RWaWRlb0Zv
cm1hdCBmb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50
IHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdo
dCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKIAorICAgIEdzdE1hcEluZm8g
aW5mbzsKKyAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOwor
ICAgIHVjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGluZm8uZGF0
YSk7CisjZWxzZQorICAgIHVjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hh
cio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQg
PSAwOworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKKyAgICBnc3RfdmlkZW9fZm9ybWF0X3Bh
cnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKKyNlbmRpZgogICAgIFFJ
bWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZP
Uk1BVF9SR0IpCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgIGlmIChm
b3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorICAgICAgICBpbWFnZUZvcm1hdCA9IFFJ
bWFnZTo6Rm9ybWF0X1JHQjMyOworICAgIGVsc2UKICAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1h
Z2U6OkZvcm1hdF9SR0I4ODg7CisjZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZP
Uk1BVF9BUkdCKQorICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMjsK
ICAgICBlbHNlCi0gICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7Cisg
ICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCODg4OworI2VuZGlmCiAKLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSwgaW1hZ2VGb3JtYXQpKTsKLX0KKyAgICBRSW1hZ2UgaW1hZ2UoYnVmZmVyRGF0
YSwgd2lkdGgsIGhlaWdodCwgaW1hZ2VGb3JtYXQpOwogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VH
U3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9ybWF0
IGltYWdlRm9ybWF0KQotICAgIDogbV9pbWFnZSgwKQotewotICAgIFFQaXhtYXAqIHN1cmZhY2Ug
PSBuZXcgUVBpeG1hcDsKLSAgICBRSW1hZ2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciks
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2Ut
PmNvbnZlcnRGcm9tSW1hZ2UoaW1hZ2UpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3Jl
YXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVy
X3VubWFwKGJ1ZmZlciwgJmluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1h
Z2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcAppbmRleCBmZDkwZmE5YTZhZmU2M2Y3YWI1NTQxYmFjZmY0MzEzMmNlYzU1MTQ5Li5h
MDBiYzIwNTU4ODQ2MTY2ZTk4ZjY2MTNlMTk2MWUxMGQ4MTQ4NjViIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMzIsNiArMzIsNyBAQAog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKICNp
bmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJWZXJzaW9uaW5n
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgogI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCkBAIC00NiwxMiArNDcsMTcgQEAKICNp
bmNsdWRlICJXZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCIKICNpbmNsdWRlIDxHT3duUHRyLmg+
CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL3N0cmVhbXZv
bHVtZS5oPgogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogI2luY2x1ZGUgPGxpbWl0cz4K
ICNpbmNsdWRlIDxtYXRoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCisjaWZk
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvYXVkaW8vc3RyZWFtdm9sdW1lLmg+
CisjZWxzZQorI2luY2x1ZGUgPGdzdC9pbnRlcmZhY2VzL3N0cmVhbXZvbHVtZS5oPgorI2VuZGlm
CisKIC8vIEdzdFBsYXlGbGFncyBmbGFncyBmcm9tIHBsYXliaW4yLiBJdCBpcyB0aGUgcG9saWN5
IG9mIEdTdHJlYW1lciB0bwogLy8gbm90IHB1YmxpY2x5IGV4cG9zZSBlbGVtZW50LXNwZWNpZmlj
IGVudW1zLiBUaGF0J3Mgd2h5IHRoaXMKIC8vIEdzdFBsYXlGbGFncyBlbnVtIGhhcyBiZWVuIGNv
cGllZCBoZXJlLgpAQCAtNjcsNiArNzMsMTIgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBHU1RfUExB
WV9GTEFHX0JVRkZFUklORyAgICAgPSAweDAwMDAwMDEwMAogfSBHc3RQbGF5RmxhZ3M7CiAKKyNp
ZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorc3RhdGljIGNvbnN0IGNoYXIqIGdQbGF5YmluTmFtZSA9
ICJwbGF5YmluIjsKKyNlbHNlCitzdGF0aWMgY29uc3QgY2hhciogZ1BsYXliaW5OYW1lID0gInBs
YXliaW4yIjsKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0xODYsNyArMTk4LDcgQEAgYm9vbCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmlzQXZhaWxhYmxlKCkKICAgICBpZiAoIWRvR3N0SW5pdCgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBHc3RFbGVtZW50RmFjdG9yeSogZmFjdG9yeSA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfZmluZCgicGxheWJpbjIiKTsKKyAgICBHc3RFbGVtZW50RmFjdG9yeSogZmFjdG9yeSA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfZmluZChnUGxheWJpbk5hbWUpOwogICAgIGlmIChmYWN0b3J5
KSB7CiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChmYWN0b3J5KSk7CiAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNDAwLDcgKzQxMiwxMiBAQCBmbG9hdCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uKCkgY29uc3QKICAgICBHc3RGb3JtYXQgdGltZUZvcm1h
dCA9IEdTVF9GT1JNQVRfVElNRTsKICAgICBnaW50NjQgdGltZUxlbmd0aCA9IDA7CiAKLSAgICBp
ZiAoIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fcGxheUJpbiwgJnRpbWVGb3JtYXQsICZ0
aW1lTGVuZ3RoKSB8fCB0aW1lRm9ybWF0ICE9IEdTVF9GT1JNQVRfVElNRSB8fCBzdGF0aWNfY2Fz
dDxndWludDY0Pih0aW1lTGVuZ3RoKSA9PSBHU1RfQ0xPQ0tfVElNRV9OT05FKSB7CisjaWZkZWYg
R1NUX0FQSV9WRVJTSU9OXzEKKyAgICBib29sIGZhaWx1cmUgPSAhZ3N0X2VsZW1lbnRfcXVlcnlf
ZHVyYXRpb24obV9wbGF5QmluLCB0aW1lRm9ybWF0LCAmdGltZUxlbmd0aCkgfHwgc3RhdGljX2Nh
c3Q8Z3VpbnQ2ND4odGltZUxlbmd0aCkgPT0gR1NUX0NMT0NLX1RJTUVfTk9ORTsKKyNlbHNlCisg
ICAgYm9vbCBmYWlsdXJlID0gIWdzdF9lbGVtZW50X3F1ZXJ5X2R1cmF0aW9uKG1fcGxheUJpbiwg
JnRpbWVGb3JtYXQsICZ0aW1lTGVuZ3RoKSB8fCB0aW1lRm9ybWF0ICE9IEdTVF9GT1JNQVRfVElN
RSB8fCBzdGF0aWNfY2FzdDxndWludDY0Pih0aW1lTGVuZ3RoKSA9PSBHU1RfQ0xPQ0tfVElNRV9O
T05FOworI2VuZGlmCisgICAgaWYgKGZhaWx1cmUpIHsKICAgICAgICAgTE9HX1ZFUkJPU0UoTWVk
aWEsICJUaW1lIGR1cmF0aW9uIHF1ZXJ5IGZhaWxlZC4iKTsKICAgICAgICAgcmV0dXJuIG51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6aW5maW5pdHkoKTsKICAgICB9CkBAIC00ODksMTIgKzUwNiwxMCBA
QCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25z
dAogICAgIGlmICghaGFzVmlkZW8oKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKIAotICAg
IEdSZWZQdHI8R3N0UGFkPiBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIikpOwotICAgIGlmICghcGFkKQorICAgIEdzdENh
cHMqIGNhcHMgPSB3ZWJraXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhtX3dlYmtpdFZpZGVvU2luaywg
InNpbmsiKTsKKyAgICBpZiAoIWNhcHMpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CiAKLSAg
ICBndWludDY0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0gR1NU
X1BBRF9DQVBTKHBhZC5nZXQoKSk7CiAgICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3Is
IHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKICAgICBpbnQgZGlzcGxheVdpZHRoLCBkaXNw
bGF5SGVpZ2h0LCBkaXNwbGF5QXNwZWN0UmF0aW9HQ0Q7CiAgICAgaW50IG9yaWdpbmFsV2lkdGgg
PSAwLCBvcmlnaW5hbEhlaWdodCA9IDA7CkBAIC01MDYsMTEgKzUyMSwyMyBAQCBJbnRTaXplIE1l
ZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogCiAgICAgLy8g
R2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFsIHNpemUsIGlmIHRoaXMgZmFpbHMgdGhlCiAg
ICAgLy8gdmlkZW8tc2luayBoYXMgbGlrZWx5IG5vdCB5ZXQgbmVnb3RpYXRlZCBpdHMgY2Fwcy4K
KyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyBpbmZvOworICAgIGlm
ICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkKKyAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKKworICAgIG9yaWdpbmFsV2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgm
aW5mbyk7CisgICAgb3JpZ2luYWxIZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQoJmluZm8p
OworICAgIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IgPSBHU1RfVklERU9fSU5GT19QQVJfTigm
aW5mbyk7CisgICAgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yID0gR1NUX1ZJREVPX0lORk9f
UEFSX0QoJmluZm8pOworI2Vsc2UKKyAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2lu
YWwgc2l6ZS4KICAgICBpZiAoIUdTVF9JU19DQVBTKGNhcHMpIHx8ICFnc3RfY2Fwc19pc19maXhl
ZChjYXBzKQogICAgICAgICB8fCAhZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsIDAs
ICZvcmlnaW5hbFdpZHRoLCAmb3JpZ2luYWxIZWlnaHQpCiAgICAgICAgIHx8ICFnc3RfdmlkZW9f
cGFyc2VfY2Fwc19waXhlbF9hc3BlY3RfcmF0aW8oY2FwcywgJnBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcikpCiAgICAgICAgIHJldHVybiBJbnRTaXpl
KCk7CisjZW5kaWYKIAogICAgIExPR19WRVJCT1NFKE1lZGlhLCAiT3JpZ2luYWwgdmlkZW8gc2l6
ZTogJWR4JWQiLCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCk7CiAgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJQaXhlbCBhc3BlY3QgcmF0aW86ICVkLyVkIiwgcGl4ZWxBc3BlY3RSYXRpb051
bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKTsKQEAgLTUyNSw2ICs1NTIsNyBA
QCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25z
dAogICAgIGRpc3BsYXlIZWlnaHQgLz0gZGlzcGxheUFzcGVjdFJhdGlvR0NEOwogCiAgICAgLy8g
QXBwbHkgREFSIHRvIG9yaWdpbmFsIHZpZGVvIHNpemUuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZp
b3IgYXMgaW4geHZpbWFnZXNpbmsncyBzZXRjYXBzIGZ1bmN0aW9uLgorICAgIGd1aW50NjQgd2lk
dGggPSAwLCBoZWlnaHQgPSAwOwogICAgIGlmICghKG9yaWdpbmFsSGVpZ2h0ICUgZGlzcGxheUhl
aWdodCkpIHsKICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJLZWVwaW5nIHZpZGVvIG9yaWdp
bmFsIGhlaWdodCIpOwogICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQo
b3JpZ2luYWxIZWlnaHQsIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CkBAIC05MjksNyAr
OTU3LDExIEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRl
cygpIGNvbnN0CiAKICAgICBHc3RGb3JtYXQgZm10ID0gR1NUX0ZPUk1BVF9CWVRFUzsKICAgICBn
aW50NjQgbGVuZ3RoID0gMDsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGlmIChnc3Rf
ZWxlbWVudF9xdWVyeV9kdXJhdGlvbihtX3NvdXJjZSwgZm10LCAmbGVuZ3RoKSkgeworI2Vsc2UK
ICAgICBpZiAoZ3N0X2VsZW1lbnRfcXVlcnlfZHVyYXRpb24obV9zb3VyY2UsICZmbXQsICZsZW5n
dGgpKSB7CisjZW5kaWYKICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJ0b3RhbEJ5dGVzICUi
IEdfR0lOVDY0X0ZPUk1BVCwgbGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihsZW5ndGgpOwogICAgIH0KQEAgLTkzOSw2ICs5NzEsMTkgQEAgdW5zaWduZWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVzKCkgY29uc3QKICAgICBHc3RJdGVy
YXRvciogaXRlciA9IGdzdF9lbGVtZW50X2l0ZXJhdGVfc3JjX3BhZHMobV9zb3VyY2UpOwogICAg
IGJvb2wgZG9uZSA9IGZhbHNlOwogICAgIHdoaWxlICghZG9uZSkgeworI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCisgICAgICAgIEdWYWx1ZSBpdGVtID0gezAsIH07CisgICAgICAgIHN3aXRjaCAo
Z3N0X2l0ZXJhdG9yX25leHQoaXRlciwgJml0ZW0pKSB7CisgICAgICAgIGNhc2UgR1NUX0lURVJB
VE9SX09LOiB7CisgICAgICAgICAgICBHc3RQYWQqIHBhZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
UGFkKj4oZ192YWx1ZV9kdXBfb2JqZWN0KCZpdGVtKSk7CisgICAgICAgICAgICBnaW50NjQgcGFk
TGVuZ3RoID0gMDsKKyAgICAgICAgICAgIGlmIChnc3RfcGFkX3F1ZXJ5X2R1cmF0aW9uKHBhZCwg
Zm10LCAmcGFkTGVuZ3RoKQorICAgICAgICAgICAgICAgICYmIHBhZExlbmd0aCA+IGxlbmd0aCkK
KyAgICAgICAgICAgICAgICBsZW5ndGggPSBwYWRMZW5ndGg7CisgICAgICAgICAgICBnX3ZhbHVl
X3Vuc2V0KHJlaW50ZXJwcmV0X2Nhc3Q8R1ZhbHVlKj4ocGFkKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorI2Vsc2UKICAgICAgICAgZ3BvaW50ZXIgZGF0YTsKIAogICAgICAgICBz
d2l0Y2ggKGdzdF9pdGVyYXRvcl9uZXh0KGl0ZXIsICZkYXRhKSkgewpAQCAtOTUwLDYgKzk5NSw3
IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90YWxCeXRlcygpIGNv
bnN0CiAgICAgICAgICAgICAgICAgbGVuZ3RoID0gcGFkTGVuZ3RoOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBjYXNlIEdTVF9JVEVSQVRPUl9SRVNZTkM6
CiAgICAgICAgICAgICBnc3RfaXRlcmF0b3JfcmVzeW5jKGl0ZXIpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC05NTksNyArMTAwNSwxMiBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OnRvdGFsQnl0ZXMoKSBjb25zdAogICAgICAgICAgICAgZG9uZSA9IHRydWU7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICAgICAgZ192YWx1ZV91bnNldCgmaXRlbSk7CisjZW5kaWYKICAgICB9CisKICAgICBnc3RfaXRl
cmF0b3JfZnJlZShpdGVyKTsKIAogICAgIExPR19WRVJCT1NFKE1lZGlhLCAidG90YWxCeXRlcyAl
IiBHX0dJTlQ2NF9GT1JNQVQsIGxlbmd0aCk7CkBAIC0xNDU3LDcgKzE1MDgsMTEgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNy
ZWF0ZUltYWdlKG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gd2Via2l0R3N0RWxlbWVu
dEdldFBhZENhcHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAgaWYgKCFjYXBzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0g
SW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKICAgICBpZiAoIWdz
dEltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2NzEsNyArMTcyNiw3IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2Fk
IHByZWxvYWQpCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxh
eUJpbigpCiB7CiAgICAgQVNTRVJUKCFtX3BsYXlCaW4pOwotICAgIG1fcGxheUJpbiA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgicGxheWJpbjIiLCAicGxheSIpOworICAgIG1fcGxheUJpbiA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZShnUGxheWJpbk5hbWUsICJwbGF5Iik7CiAKICAgICBt
X2dzdEdXb3JsZCA9IEdTdHJlYW1lckdXb3JsZDo6Y3JlYXRlR1dvcmxkKG1fcGxheUJpbik7CiAK
QEAgLTE2ODgsMTEgKzE3NDMsMTggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAidmlk
ZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2Fs
bGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgImF1ZGlvLWNo
YW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNr
KSwgdGhpcyk7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBtX3dlYmtpdFZpZGVv
U2luayA9IHdlYmtpdF92aWRlb19zaW5rX25ldyhtX2dzdEdXb3JsZC5nZXQoKSk7CisjZWxzZQor
ICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CisjZW5kaWYK
IAogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmssICJyZXBhaW50LXJlcXVl
c3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhp
cyk7CiAKKworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIG1fdmlkZW9TaW5rQmluID0g
Z3N0X2Jpbl9uZXcoInNpbmsiKTsKKwogICAgIEdzdEVsZW1lbnQqIHZpZGVvVGVlID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCAidmlkZW9UZWUiKTsKICAgICBHc3RFbGVtZW50KiBx
dWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCAwKTsKIApAQCAtMTcxMCw2
ICsxNzcyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0ZUdTVFBs
YXlCaW4oKQogICAgIEdSZWZQdHI8R3N0UGFkPiBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3JlcXVlc3RfcGFkKHZpZGVvVGVlLCAic3JjJWQiKSk7CiAgICAgR1JlZlB0cjxHc3RQ
YWQ+IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocXVldWUs
ICJzaW5rIikpOwogICAgIGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIHNpbmtQYWQuZ2V0KCkp
OworI2VuZGlmCiAKICAgICBHc3RFbGVtZW50KiBhY3R1YWxWaWRlb1NpbmsgPSAwOwogICAgIG1f
ZnBzU2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiZnBzZGlzcGxheXNpbmsiLCAic2lu
ayIpOwpAQCAtMTcyOCw3ICsxNzkxLDkgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogCiAgICAgICAgICAgICBpZiAoZ19vYmplY3RfY2xhc3Nf
ZmluZF9wcm9wZXJ0eShHX09CSkVDVF9HRVRfQ0xBU1MobV9mcHNTaW5rKSwgInZpZGVvLXNpbmsi
KSkgewogICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2Zwc1NpbmssICJ2aWRlby1zaW5r
IiwgbV93ZWJraXRWaWRlb1NpbmssIE5VTEwpOworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQog
ICAgICAgICAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV92aWRlb1NpbmtCaW4pLCBtX2Zw
c1NpbmspOworI2VuZGlmCiAgICAgICAgICAgICAgICAgYWN0dWFsVmlkZW9TaW5rID0gbV9mcHNT
aW5rOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9mcHNTaW5rID0gMDsK
QEAgLTE3MzcsMTIgKzE4MDIsMTUgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6
OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgIH0KIAogICAgIGlmICghbV9mcHNTaW5rKSB7CisjaWZu
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU4obV92aWRl
b1NpbmtCaW4pLCBtX3dlYmtpdFZpZGVvU2luayk7CisjZW5kaWYKICAgICAgICAgYWN0dWFsVmlk
ZW9TaW5rID0gbV93ZWJraXRWaWRlb1Npbms7CiAgICAgfQogCiAgICAgQVNTRVJUKGFjdHVhbFZp
ZGVvU2luayk7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAvLyBGYXN0ZXIgZWxl
bWVudHMgbGlua2luZy4KICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChxdWV1ZSwgInNy
YyIsIGFjdHVhbFZpZGVvU2luaywgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7
CiAKQEAgLTE3NTIsMTAgKzE4MjAsMTMgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogCiAgICAgLy8gU2V0IHRoZSBiaW4gYXMgdmlkZW8gc2lu
ayBvZiBwbGF5YmluLgogICAgIGdfb2JqZWN0X3NldChtX3BsYXlCaW4sICJ2aWRlby1zaW5rIiwg
bV92aWRlb1NpbmtCaW4sIE5VTEwpOworI2Vsc2UKKyAgICBnX29iamVjdF9zZXQobV9wbGF5Qmlu
LCAidmlkZW8tc2luayIsIGFjdHVhbFZpZGVvU2luaywgTlVMTCk7CisjZW5kaWYKIAotICAgIHBh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3dlYmtpdFZpZGVvU2lu
aywgInNpbmsiKSk7Ci0gICAgaWYgKHBhZCkKLSAgICAgICAgZ19zaWduYWxfY29ubmVjdChwYWQu
Z2V0KCksICJub3RpZnk6OmNhcHMiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVv
U2lua0NhcHNDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gdmlk
ZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0
VmlkZW9TaW5rLCAic2luayIpKTsKKyAgICBpZiAodmlkZW9TaW5rUGFkKQorICAgICAgICBnX3Np
Z25hbF9jb25uZWN0KHZpZGVvU2lua1BhZC5nZXQoKSwgIm5vdGlmeTo6Y2FwcyIsIEdfQ0FMTEJB
Q0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9TaW5rQ2Fwc0NoYW5nZWRDYWxsYmFjayksIHRoaXMp
OwogCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggNDM2MzAzNjYy
YjIwYjZhYThiODExNTY4MzI2NGQ2N2Y4Yjc3ZDRmYy4uMzIyMzVhZTZiYTM5NTFjYzRlMzA1Mzg5
YmU4YTczMDEyOGMwZTNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWaWRlb1NpbmtH
U3RyZWFtZXIuaCIKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaWZuZGVm
IEdTVF9BUElfVkVSU0lPTl8xCiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dz
dC5oPgpAQCAtMzk4LDQgKzM5OSw1IEBAIEdzdEVsZW1lbnQqIHdlYmtpdF92aWRlb19zaW5rX25l
dyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3JsZCkKICAgICByZXR1cm4gZWxlbWVu
dDsKIH0KIAorI2VuZGlmIC8vIEdTVF9BUElfVkVSU0lPTl8xCiAjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaAppbmRleCA1MDE4NTBmZGU5NDMwMGQw
YzNlZGUxMjZhY2I3ODcxOTZjOTc5MDU2Li43OWY3ZWQ1YjQwMWFlMjVkYjE0M2RiNDhlYmVkMDNi
NjM3ZTBhNWQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCkBAIC0yNSw2ICsyNSw3
IEBACiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KICNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmg+CisjaW5jbHVkZSA8Z3N0L3Zp
ZGVvL3ZpZGVvLmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtNzUsNyArNzYsMTEgQEAgc3RydWN0
IF9XZWJLaXRWaWRlb1NpbmtDbGFzcyB7CiAKIAogR1R5cGUgICAgICAgd2Via2l0X3ZpZGVvX3Np
bmtfZ2V0X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05f
MQogR3N0RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1lckdX
b3JsZCopOworI2Vsc2UKK0dzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldygpOworI2Vu
ZGlmCiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4yZDkzYmUwYThiZmE0MTY5OGRlMzQxNTdjNjVmMWJiODY1M2QyMWYzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwCkBAIC0wLDAgKzEsMzc0IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAwNyBPcGVuZWRIYW5kCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAy
MDEyIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKy8qCisgKgor
ICogV2ViS2l0VmlkZW9TaW5rIGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHRyaWdn
ZXJzCisgKiByZXBhaW50cyBpbiB0aGUgV2ViS2l0IEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIgZm9y
IHRoZQorICogY3VycmVudCB2aWRlbyBidWZmZXIuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2lmIFVTRShHU1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9OXzEpCisjaW5j
bHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+CisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNpbmNs
dWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVv
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKworLy8gQ0FJUk9fRk9STUFUX1JH
QjI0IHVzZWQgdG8gcmVuZGVyIHRoZSB2aWRlbyBidWZmZXJzIGlzIGxpdHRsZS9iaWcgZW5kaWFu
IGRlcGVuZGFudC4KKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCitzdGF0aWMg
R3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExB
VEUoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFMo
R1NUX1ZJREVPX0NBUFNfTUFLRSgieyBCR1J4LCBCR1JBIH0iKSkpOworI2Vsc2UKK3N0YXRpYyBH
c3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFU
RSgic2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhH
U1RfVklERU9fQ0FQU19NQUtFKCJ7IHhSR0IsIEFSR0IgfSIpKSk7CisjZW5kaWYKKworCitHU1Rf
REVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnKTsKKyNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdF92aWRlb19zaW5rX2RlYnVnCisKK2VudW0geworICAgIFJF
UEFJTlRfUkVRVUVTVEVELAorICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsKKyAgICBQUk9Q
XzAKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW0xBU1RfU0lH
TkFMXSA9IHsgMCwgfTsKKworc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIHsKKyAgICBH
c3RCdWZmZXIqIGJ1ZmZlcjsKKyAgICBndWludCB0aW1lb3V0X2lkOworICAgIEdNdXRleCogYnVm
ZmVyX211dGV4OworICAgIEdDb25kKiBkYXRhX2NvbmQ7CisgICAgR3N0VmlkZW9JbmZvIGluZm87
CisKKyAgICAvLyBJZiB0aGlzIGlzIFRSVUUgYWxsIHByb2Nlc3Npbmcgc2hvdWxkIGZpbmlzaCBB
U0FQCisgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHJh
Y2UgYmV0d2VlbgorICAgIC8vIHVubG9jaygpIGFuZCByZW5kZXIoKSwgd2hlcmUgdW5sb2NrKCkg
d2lucywgc2lnbmFscyB0aGUKKyAgICAvLyBHQ29uZCwgdGhlbiByZW5kZXIoKSB0cmllcyB0byBy
ZW5kZXIgYSBmcmFtZSBhbHRob3VnaAorICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBpc24ndCBydW5u
aW5nIGFueW1vcmUuIFRoaXMgd2lsbCBsZWFkCisgICAgLy8gdG8gZGVhZGxvY2tzIGJlY2F1c2Ug
cmVuZGVyKCkgaG9sZHMgdGhlIHN0cmVhbSBsb2NrLgorICAgIC8vCisgICAgLy8gUHJvdGVjdGVk
IGJ5IHRoZSBidWZmZXIgbXV0ZXgKKyAgICBib29sIHVubG9ja2VkOworfTsKKworI2RlZmluZSB3
ZWJraXRfdmlkZW9fc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBF
X1dJVEhfQ09ERShXZWJLaXRWaWRlb1NpbmssIHdlYmtpdF92aWRlb19zaW5rLCBHU1RfVFlQRV9W
SURFT19TSU5LLCBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfdmlkZW9fc2lua19kZWJ1
ZywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXRzaW5rIiwgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
d2Via2l0IHZpZGVvIHNpbmsiKSk7CisKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3Npbmtf
aW5pdChXZWJLaXRWaWRlb1NpbmsqIHNpbmspCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0
ZSogcHJpdjsKKworICAgIHNpbmstPnByaXYgPSBwcml2ID0gR19UWVBFX0lOU1RBTkNFX0dFVF9Q
UklWQVRFKHNpbmssIFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVvU2lua1ByaXZh
dGUpOworICAgIHByaXYtPmRhdGFfY29uZCA9IFdURjo6ZmFzdE5ldzxHQ29uZD4oKTsKKyAgICBn
X2NvbmRfaW5pdChwcml2LT5kYXRhX2NvbmQpOworICAgIHByaXYtPmJ1ZmZlcl9tdXRleCA9IFdU
Rjo6ZmFzdE5ldzxHTXV0ZXg+KCk7CisgICAgZ19tdXRleF9pbml0KHByaXYtPmJ1ZmZlcl9tdXRl
eCk7CisgICAgZ3N0X3ZpZGVvX2luZm9faW5pdCgmcHJpdi0+aW5mbyk7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0X2Z1bmMoZ3BvaW50ZXIgZGF0YSkKK3sK
KyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdlYktpdFZpZGVv
U2luayo+KGRhdGEpOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5w
cml2OworICAgIEdzdEJ1ZmZlciogYnVmZmVyOworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1
ZmZlcl9tdXRleCk7CisgICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyOworICAgIHByaXYtPmJ1ZmZl
ciA9IDA7CisgICAgcHJpdi0+dGltZW91dF9pZCA9IDA7CisKKyAgICBpZiAoIWJ1ZmZlciB8fCBw
cml2LT51bmxvY2tlZCB8fCBVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkgeworICAg
ICAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisK
KyAgICBnX3NpZ25hbF9lbWl0KHNpbmssIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlO
VF9SRVFVRVNURURdLCAwLCBidWZmZXIpOworICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsK
KyAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2so
cHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIEdz
dEZsb3dSZXR1cm4gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKEdzdEJhc2VTaW5rKiBic2luaywg
R3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lU
X1ZJREVPX1NJTksoYnNpbmspOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBz
aW5rLT5wcml2OworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAg
ICBpZiAocHJpdi0+dW5sb2NrZWQpIHsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0KKworICAgIHBy
aXYtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmKGJ1ZmZlcik7CisKKyAgICBHc3RWaWRlb0ZyYW1l
IGZyYW1lOworICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCgmZnJhbWUsICZwcml2LT5pbmZv
LCBidWZmZXIsIEdTVF9NQVBfUkVBRCkpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZm
ZXIpOworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgfQorCisgICAgR3N0VmlkZW9Gb3JtYXQgZm9y
bWF0ID0gR1NUX1ZJREVPX0ZSQU1FX0ZPUk1BVCgmZnJhbWUpOworICAgIGludCB3aWR0aCA9IEdT
VF9WSURFT19GUkFNRV9XSURUSCgmZnJhbWUpOworICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9f
RlJBTUVfSEVJR0hUKCZmcmFtZSk7CisKKyAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAoJmZyYW1l
KTsKKworICAgIC8vIENhaXJvJ3MgQVJHQiBoYXMgcHJlLW11bHRpcGxpZWQgYWxwaGEgd2hpbGUg
R1N0cmVhbWVyJ3MgZG9lc24ndC4KKyAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdG8gQ2Fpcm8ncyBB
UkdCLgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1hdCA9
PSBHU1RfVklERU9fRk9STUFUX0JHUkEpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBHc3RCYXNlU2lu
azo6cmVuZGVyKCkgb25seSBvd25zIHRoZSBidWZmZXIgcmVmZXJlbmNlIGluIHRoZQorICAgICAg
ICAvLyBtZXRob2Qgc2NvcGUgd2UgY2FuJ3QgdXNlIGdzdF9idWZmZXJfbWFrZV93cml0YWJsZSgp
IGhlcmUuIEFsc28KKyAgICAgICAgLy8gVGhlIGJ1ZmZlciBjb250ZW50IHNob3VsZCBub3QgYmUg
Y2hhbmdlZCBoZXJlIGJlY2F1c2UgdGhlIHNhbWUgYnVmZmVyCisgICAgICAgIC8vIGNvdWxkIGJl
IHBhc3NlZCBtdWx0aXBsZSB0aW1lcyB0byB0aGlzIG1ldGhvZCAoaW4gdGhlb3J5KS4KKyAgICAg
ICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKyAgICAg
ICAgR3N0QnVmZmVyKiBuZXdCdWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MoYnVmZmVy
U2l6ZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAg
IGlmIChVTkxJS0VMWSghbmV3QnVmZmVyKSkgeworICAgICAgICAgICAgZ19tdXRleF91bmxvY2so
cHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsK
KyAgICAgICAgfQorCisgICAgICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1ZmZlciwgYnVm
ZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9NRVRB
REFUQSksIDAsIGJ1ZmZlclNpemUpOworCisgICAgICAgIC8vIFdlIGRvbid0IHVzZSBDb2xvcjo6
cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoKSBoZXJlIGJlY2F1c2UKKyAgICAgICAgLy8gb25l
IGZ1bmN0aW9uIGNhbGwgcGVyIHZpZGVvIHBpeGVsIGlzIGp1c3QgdG9vIGV4cGVuc2l2ZToKKyAg
ICAgICAgLy8gRm9yIDcyMHAvUEFMIGZvciBleGFtcGxlIHRoaXMgbWVhbnMgMTI4MCo3MjAqMjU9
MjMwNDAwMDAKKyAgICAgICAgLy8gZnVuY3Rpb24gY2FsbHMgcGVyIHNlY29uZCEKKyAgICAgICAg
dW5zaWduZWQgc2hvcnQgYWxwaGE7CisgICAgICAgIEdzdE1hcEluZm8gc291cmNlSW5mbzsKKyAg
ICAgICAgR3N0TWFwSW5mbyBkZXN0aW5hdGlvbkluZm87CisgICAgICAgIGdzdF9idWZmZXJfbWFw
KGJ1ZmZlciwgJnNvdXJjZUluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGNvbnN0IGd1aW50
OCogc291cmNlID0gY29uc3RfY2FzdDxndWludDgqPihzb3VyY2VJbmZvLmRhdGEpOworICAgICAg
ICBnc3RfYnVmZmVyX21hcChuZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8sIEdTVF9NQVBfV1JJ
VEUpOworICAgICAgICBndWludDgqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8Z3VpbnQ4Kj4o
ZGVzdGluYXRpb25JbmZvLmRhdGEpOworCisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaGVp
Z2h0OyB4KyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgd2lkdGg7IHkrKykg
eworI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICAgICAgICAgICAgICBh
bHBoYSA9IHNvdXJjZVszXTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IChzb3Vy
Y2VbMF0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25b
MV0gPSAoc291cmNlWzFdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uWzJdID0gKHNvdXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvblszXSA9IGFscGhhOworI2Vsc2UKKyAgICAgICAgICAgICAgICBh
bHBoYSA9IHNvdXJjZVswXTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IGFscGhh
OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsg
MTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0g
KiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSAo
c291cmNlWzNdICogYWxwaGEgKyAxMjgpIC8gMjU1OworI2VuZGlmCisgICAgICAgICAgICAgICAg
c291cmNlICs9IDQ7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gNDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJnNvdXJj
ZUluZm8pOworICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0aW9u
SW5mbyk7CisKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgICAgICBidWZm
ZXIgPSBwcml2LT5idWZmZXIgPSBuZXdCdWZmZXI7CisgICAgfQorCisKKyAgICAvLyBUaGlzIHNo
b3VsZCBsaWtlbHkgdXNlIGEgbG93ZXIgcHJpb3JpdHksIGJ1dCBnbGliIGN1cnJlbnRseSBzdGFy
dmVzCisgICAgLy8gbG93ZXIgcHJpb3JpdHkgc291cmNlcy4KKyAgICAvLyBTZWU6IGh0dHBzOi8v
YnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTA4MzAuCisgICAgcHJpdi0+dGlt
ZW91dF9pZCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfdmlkZW9fc2lua190
aW1lb3V0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
c3Rfb2JqZWN0X3JlZihzaW5rKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdzdF9vYmplY3RfdW5yZWYp
KTsKKworICAgIGdfY29uZF93YWl0KHByaXYtPmRhdGFfY29uZCwgcHJpdi0+YnVmZmVyX211dGV4
KTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHJldHVybiBH
U1RfRkxPV19PSzsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZShH
T2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJ
REVPX1NJTksob2JqZWN0KTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2lu
ay0+cHJpdjsKKworICAgIGlmIChwcml2LT5kYXRhX2NvbmQpIHsKKyAgICAgICAgZ19jb25kX2Ns
ZWFyKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIFdURjo6ZmFzdERlbGV0ZShwcml2LT5kYXRh
X2NvbmQpOworICAgICAgICBwcml2LT5kYXRhX2NvbmQgPSAwOworICAgIH0KKworICAgIGlmIChw
cml2LT5idWZmZXJfbXV0ZXgpIHsKKyAgICAgICAgZ19tdXRleF9jbGVhcihwcml2LT5idWZmZXJf
bXV0ZXgpOworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+YnVmZmVyX211dGV4KTsKKyAg
ICAgICAgcHJpdi0+YnVmZmVyX211dGV4ID0gMDsKKyAgICB9CisKKyAgICBHX09CSkVDVF9DTEFT
UyhwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHVubG9j
a0J1ZmZlck11dGV4KFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYpCit7CisgICAgZ19tdXRl
eF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+YnVmZmVyKSB7Cisg
ICAgICAgIGdzdF9idWZmZXJfdW5yZWYocHJpdi0+YnVmZmVyKTsKKyAgICAgICAgcHJpdi0+YnVm
ZmVyID0gMDsKKyAgICB9CisKKyAgICBwcml2LT51bmxvY2tlZCA9IHRydWU7CisKKyAgICBnX2Nv
bmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVm
ZmVyX211dGV4KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9j
ayhHc3RCYXNlU2luayogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdF
QktJVF9WSURFT19TSU5LKG9iamVjdCk7CisKKyAgICB1bmxvY2tCdWZmZXJNdXRleChzaW5rLT5w
cml2KTsKKworICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNF
X1NJTktfQ0xBU1MsIHVubG9jaywgKG9iamVjdCksIFRSVUUpOworfQorCitzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3AoR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sK
KyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksob2Jq
ZWN0KS0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAg
IHByaXYtPnVubG9ja2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVy
X211dGV4KTsKKworICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9C
QVNFX1NJTktfQ0xBU1MsIHVubG9ja19zdG9wLCAob2JqZWN0KSwgVFJVRSk7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19zdG9wKEdzdEJhc2VTaW5rKiBiYXNlX3Npbmsp
Cit7CisgICAgdW5sb2NrQnVmZmVyTXV0ZXgoV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+
cHJpdik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlk
ZW9fc2lua19zdGFydChHc3RCYXNlU2luayogYmFzZV9zaW5rKQoreworICAgIFdlYktpdFZpZGVv
U2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2Owor
CisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJpdi0+dW5sb2Nr
ZWQgPSBmYWxzZTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAg
IHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfcHJv
cG9zZV9hbGxvY2F0aW9uKEdzdEJhc2VTaW5rKiBiYXNlX3NpbmssIEdzdFF1ZXJ5KiBxdWVyeSkK
K3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3Np
bmspOworICAgIEdzdENhcHMqIGNhcHM7CisgICAgZ2Jvb2xlYW4gbmVlZF9wb29sOworCisgICAg
Z3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24ocXVlcnksICZjYXBzLCAmbmVlZF9wb29sKTsKKwor
ICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnc3Rfdmlk
ZW9faW5mb19mcm9tX2NhcHMoJnNpbmstPnByaXYtPmluZm8sIGNhcHMpKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NU
X1ZJREVPX01FVEFfQVBJKTsKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVy
eSwgR1NUX1ZJREVPX0NST1BfTUVUQV9BUEkpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgdm9pZCBtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QoR0Nsb3N1cmUqIGNsb3N1cmUsIEdWYWx1
ZSogcmV0dXJuVmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vp
bnQgcGFyYW1ldGVyc051bWJlciwgY29uc3QgR1ZhbHVlKiBwYXJhbWV0ZXJzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdwb2ludGVyIGludm9jYXRpb25IaW50LCBncG9p
bnRlciBtYXJzaGFsRGF0YSkKK3sKKyAgICB0eXBlZGVmIHZvaWQgKCptYXJzaGFsZnVuY19WT0lE
X19NSU5JT0JKRUNUKSAoZ3BvaW50ZXIgb2JqZWN0LCBncG9pbnRlciBhcmcxLCBncG9pbnRlciBk
YXRhMik7CisgICAgbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCBjYWxsYmFjazsKKyAgICBH
Q0Nsb3N1cmUqIGNjID0gKEdDQ2xvc3VyZSAqKSBjbG9zdXJlOworICAgIGdwb2ludGVyIGRhdGEx
LCBkYXRhMjsKKworICAgIGdfcmV0dXJuX2lmX2ZhaWwocGFyYW1ldGVyc051bWJlciA9PSAyKTsK
KworICAgIGlmIChHX0NDTE9TVVJFX1NXQVBfREFUQShjbG9zdXJlKSkgeworICAgICAgICBkYXRh
MSA9IGNsb3N1cmUtPmRhdGE7CisgICAgICAgIGRhdGEyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIo
cGFyYW1ldGVycyArIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIGRhdGExID0gZ192YWx1ZV9w
ZWVrX3BvaW50ZXIocGFyYW1ldGVycyArIDApOworICAgICAgICBkYXRhMiA9IGNsb3N1cmUtPmRh
dGE7CisgICAgfQorICAgIGNhbGxiYWNrID0gKG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1Qp
IChtYXJzaGFsRGF0YSA/IG1hcnNoYWxEYXRhIDogY2MtPmNhbGxiYWNrKTsKKworICAgIGNhbGxi
YWNrKGRhdGExLCBnX3ZhbHVlX2dldF9ib3hlZChwYXJhbWV0ZXJzICsgMSksIGRhdGEyKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1Np
bmtDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0gR19P
QkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIEdzdEJhc2VTaW5rQ2xhc3MqIGdzdGJhc2Vfc2lua19j
bGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyog
ZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKworICAgIGdzdF9lbGVt
ZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudF9jbGFzcywgZ3N0X3N0YXRpY19wYWRf
dGVtcGxhdGVfZ2V0KCZzaW5rVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRf
bWV0YWRhdGEoZWxlbWVudF9jbGFzcywKKyAgICAgICAgICAgICJXZWJLaXQgdmlkZW8gc2luayIs
CisgICAgICAgICAgICAiU2luay9WaWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3Ry
ZWFtZXIgcGlwZWxpbmUgdG8gYSBDYWlybyBzdXJmYWNlIiwKKyAgICAgICAgICAgICJBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPiIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGts
YXNzLCBzaXplb2YoV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSkpOworCisgICAgZ29iamVjdF9jbGFz
cy0+ZGlzcG9zZSA9IHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bvc2U7CisKKyAgICBnc3RiYXNlX3Np
bmtfY2xhc3MtPnVubG9jayA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKKyAgICBnc3RiYXNl
X3NpbmtfY2xhc3MtPnVubG9ja19zdG9wID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3A7
CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5k
ZXI7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xsID0gd2Via2l0X3ZpZGVvX3Npbmtf
cmVuZGVyOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3RvcCA9IHdlYmtpdF92aWRlb19zaW5r
X3N0b3A7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5zdGFydCA9IHdlYmtpdF92aWRlb19zaW5r
X3N0YXJ0OworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uID0gd2Vi
a2l0X3ZpZGVvX3NpbmtfcHJvcG9zZV9hbGxvY2F0aW9uOworCisgICAgd2Via2l0X3ZpZGVvX3Np
bmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQtcmVx
dWVzdGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdTaWduYWxGbGFncz4oR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05B
TF9BQ1RJT04pLAorICAgICAgICAgICAgMCwgLy8gQ2xhc3Mgb2Zmc2V0LgorICAgICAgICAgICAg
MCwgLy8gQWNjdW11bGF0b3IuCisgICAgICAgICAgICAwLCAvLyBBY2N1bXVsYXRvciBkYXRhLgor
ICAgICAgICAgICAgbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNULCAvLyBDdXN0b20gbWFyc2hhbGxl
ci4KKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAvLyBSZXR1cm4gdHlwZS4KKyAgICAgICAgICAg
IDEsIC8vIE9ubHkgb25lIHBhcmFtZXRlci4KKyAgICAgICAgICAgIEdTVF9UWVBFX0JVRkZFUik7
Cit9CisKK0dzdEVsZW1lbnQqIHdlYmtpdF92aWRlb19zaW5rX25ldygpCit7CisgICAgcmV0dXJu
IEdTVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9
CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8x
KQo=
</data>
<flag name="commit-queue"
          id="131589"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129063</attachid>
            <date>2012-02-27 10:13:04 -0800</date>
            <delta_ts>2012-02-27 11:26:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>31406</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAwYjA0MzI5YWUyODMxOWJkNGQ1YjhhZTIyNWUxMmJmMDgwM2RhMTFjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDE5OjEyOjU5ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
UGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDM5ICsrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAg
ICAgICAgICAgICB8ICAgIDEgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oICAgfCAgIDMwICstCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ0cubW0gICAgICAgICB8ICAgNzUgKysrKy0KIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgICAgIHwgICA2NiArKystCiAuLi4vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwICAgICAgICB8ICAgNTcgKystCiAuLi4vZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICAgICB8ICAgMTIgKy0KIC4uLi9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCAgICAgIHwgICAgMiArCiAu
Li4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oICAgICAgICB8ICAgIDUg
KwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCAgICAgfCAg
Mzc0ICsrKysrKysrKysrKysrKysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCA1OTEgaW5zZXJ0aW9u
cygrKSwgNzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDkyODA2YTIuLmMzOTU1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0NCBAQAog
MjAxMi0wMi0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKKyAg
ICAgICAgW0dTdHJlYW1lcl0gMC4xMSB2aWRlby1zaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkIG5ldyB2
aWRlbyBzaW5rIGNvZGUgdG8gdGhlIGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oOiBjcmVhdGVJbWFnZSBBUEkKKyAgICAgICAgdXBk
YXRlIHNvIGltcGxlbWVudGF0aW9ucyBkb24ndCBuZWVkIHRvIHVzZQorICAgICAgICBnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZCBpbiBnc3QtMC4xMS4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZSk6CisgICAgICAg
IChJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyQ0cubW06CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3Ry
ZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lckNhaXJvLmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQu
Y3BwOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcDogQnVpbGQgb25seQorICAgICAgICBmb3IgZ3N0LTAuMTAuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oOiBObyBuZWVk
IGZvcgorICAgICAgICBHU3RyZWFtZXJHV29ybGQgaW4gdGhlIGdzdC0wLjExIHZpZGVvIHNpbmsu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
cjEuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcC4KKyAgICAgICAgKF9XZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyk6CisgICAg
ICAgICh3ZWJraXRfdmlkZW9fc2lua19yZW5kZXIpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Np
bmtfZGlzcG9zZSk6CisgICAgICAgICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3ZWJr
aXRfdmlkZW9fc2lua191bmxvY2spOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2Nr
X3N0b3ApOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Npbmtfc3RvcCk6CisgICAgICAgICh3ZWJr
aXRfdmlkZW9fc2lua19zdGFydCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19wcm9wb3Nl
X2FsbG9jYXRpb24pOgorICAgICAgICAobWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKToKKyAgICAg
ICAgKHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfbmV3KToKKworMjAxMi0wMi0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CisKICAgICAgICAgW0dTdHJlYW1lcl0gMC4xMSBzdXBwb3J0IGluIE1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcgogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzcwODkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggOWFk
YTQ0ZC4uYTA5OTI5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NTQwLDYg
KzQ1NDAsNyBAQCB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5r
R1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCmluZGV4IGFiNzk5YmEuLmIzZTMxNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bWFnZUdTdHJlYW1lci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMu
TAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyMCArMjMsMjMgQEAKICNpZiBFTkFCTEUoVklE
RU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5k
aWYKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3Qg
X0dzdENhcHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsK
K2NsYXNzIEJpdG1hcEltYWdlOwogCiBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZD
b3VudGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKik7CisgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZShHc3RCdWZmZXIq
IGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIGNhcHMpKTsKKyAgICAgICAgfQogICAg
ICAgICB+SW1hZ2VHU3RyZWFtZXIoKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEJpdG1hcEltYWdl
PiBpbWFnZSgpCkBAIC00OCwxOCArNTEsNyBAQCBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1Ymxp
YyBSZWZDb3VudGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVm
UHRyPEJpdG1hcEltYWdlPiBtX2ltYWdlOwogCi0jaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFn
ZUdTdHJlYW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRp
ZgotCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciom
LCBJbnRTaXplLCBRSW1hZ2U6OkZvcm1hdCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUpOwotI2VuZGlmCi0K
KyAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEdzdENhcHMqKTsKICAgICB9Owog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmluZGV4IGZlMDkyOGIuLjM0NTNjMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lckNHLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCkBAIC0yMiwzMiArMjIsNzcgQEAKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCiAjaWYg
RU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNp
bmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisj
aW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1l
cjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6SW1hZ2VH
U3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgIDogbV9pbWFn
ZSgwKQogeworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8gdmlk
ZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKTsK
KworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlk
ZW9JbmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZv
KTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pOwor
CisgICAgR3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJmluZm8s
IEdTVF9NQVBfUkVBRCk7CisgICAgY29uc3QgVUludDgqIGJ1ZmZlckRhdGEgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IFVJbnQ4Kj4oaW5mby5kYXRhKTsKKyNlbHNlCiAgICAgaW50IHdpZHRoID0g
MCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2Fwcyhi
dWZmZXIpOwogICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19m
b3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAg
ICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Cisg
ICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhl
aWdodCk7CiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwg
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpOwotfQorICAgIGd1aW50IGJ1ZmZlclNpemUgPSBHU1Rf
QlVGRkVSX1NJWkUoYnVmZmVyKTsKKyAgICBjb25zdCBVSW50OCogYnVmZmVyRGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7CisjZW5k
aWYKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwg
SW50U2l6ZSBzaXplKQotICAgIDogbV9pbWFnZSgwKQotewotICAgIEFTU0VSVChHU1RfQlVGRkVS
X1NJWkUoYnVmZmVyKSk7CisgICAgQVNTRVJUKGJ1ZmZlclNpemUpOwogCi0gICAgUmV0YWluUHRy
PENGRGF0YVJlZj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwg
c3RhdGljX2Nhc3Q8VUludDgqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSksIEdTVF9CVUZGRVJf
U0laRShidWZmZXIpLCBrQ0ZBbGxvY2F0b3JOdWxsKSk7CisgICAgUmV0YWluUHRyPENGRGF0YVJl
Zj4gZGF0YShBZG9wdENGLCBDRkRhdGFDcmVhdGVXaXRoQnl0ZXNOb0NvcHkoMCwgYnVmZmVyRGF0
YSwgYnVmZmVyU2l6ZSwga0NGQWxsb2NhdG9yTnVsbCkpOwogICAgIFJldGFpblB0cjxDR0RhdGFQ
cm92aWRlclJlZj4gcHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZE
YXRhKGRhdGEuZ2V0KCkpKTsKLSAgICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2UgPSBDR0ltYWdlQ3Jl
YXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUud2lkdGgoKSo0LCBk
ZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0
dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1Jl
bmRlcmluZ0ludGVudERlZmF1bHQpOworCisgICAgc2l6ZV90IGJpdHNQZXJDb21wb25lbnQgPSA4
OworICAgIHNpemVfdCBiaXRzUGVyUGl4ZWw7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93OworICAg
IENHQml0bWFwSW5mbyBiaXRtYXBJbmZvOworCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExF
X0VORElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSB7CisgICAg
ICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxw
aGFMYXN0OworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAzMjsKKyAgICAgICAgYnl0ZXNQZXJSb3cg
PSB3aWR0aCAqIDQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtDR0JpdG1h
cEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYU5vbmU7CisgICAgICAgIGJpdHNQZXJQ
aXhlbCA9IDI0OworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogMzsKKyAgICB9CisjZWxz
ZQorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSB7CisgICAgICAgIGJp
dG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFGaXJzdDsK
KyAgICAgICAgYml0c1BlclBpeGVsID0gMzI7CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGgg
KiA0OworICAgIH0gZWxzZSB7CisgICAgICAgIGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkJpZyB8IGtDR0ltYWdlQWxwaGFOb25lOworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAyNDsK
KyAgICAgICAgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDM7CisgICAgfQorI2VuZGlmCisKKyAgICBD
R0ltYWdlUmVmIGZyYW1lSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKHdpZHRoLCBoZWlnaHQsIGJpdHNQ
ZXJDb21wb25lbnQsIGJpdHNQZXJQaXhlbCwgYnl0ZXNQZXJSb3csIGRldmljZVJHQkNvbG9yU3Bh
Y2VSZWYoKSwgYml0bWFwSW5mbywgcHJvdmlkZXIuZ2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShmcmFt
ZUltYWdlKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2J1ZmZlcl91bm1h
cChidWZmZXIsICZpbmZvKTsKKyNlbmRpZgogfQogCiBJbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0
cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAppbmRleCA4YjNhMDc2
Li5hMzliNWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCkBAIC0yMiw0
MCArMjIsNzIgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAorI2lu
Y2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRl
by92aWRlby5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3Qvdmlk
ZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgIkdPd25QdHIuaCIKIAogdXNp
bmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRy
PEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBi
dWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVy
LCBHc3RDYXBzKiBjYXBzKQorICAgIDogbV9pbWFnZSgwKQogeworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19m
cm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQg
PSBHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NU
X1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURF
T19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcEluZm8gbWFwSW5mbzsKKyAg
ICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZtYXBJbmZvLCBHU1RfTUFQX1JFQUQpOworCisgICAg
dW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG1hcEluZm8uZGF0YSk7CisjZWxzZQorICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlckRhdGEg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVy
KSk7CiAgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0g
Z3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwogICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsK
LSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKyAgICBnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKKyNl
bmRpZgogCiAgICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9Gb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9
PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdS
QSkKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgaWYgKGZvcm1hdCA9
PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCisgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJUk9fRk9S
TUFUX0FSR0IzMjsKKyAgICBlbHNlCisgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJUk9fRk9STUFU
X1JHQjI0OworI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQikK
ICAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwogICAgIGVsc2UKICAg
ICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZW5kaWYKIAotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpLCBjYWlyb0Zvcm1hdCkpOwotfQorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAg
aW50IHN0cmlkZSA9IEdTVF9WSURFT19JTkZPX1BMQU5FX1NUUklERSgmdmlkZW9JbmZvLCAwKTsK
KyNlbHNlCisgICAgaW50IHN0cmlkZSA9IGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKGNh
aXJvRm9ybWF0LCB3aWR0aCk7CisjZW5kaWYKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVh
bWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXplLCBjYWlyb19mb3JtYXRfdCYgY2Fp
cm9Gb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJm
YWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoR1NUX0JVRkZFUl9EQVRB
KGJ1ZmZlciksIGNhaXJvRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19mb3JtYXRf
c3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53aWR0aCgpKSk7CisgICAgY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEo
YnVmZmVyRGF0YSwgY2Fpcm9Gb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHN0cmlkZSk7CiAgICAgQVNT
RVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpID09IENBSVJPX1NUQVRVU19TVUNDRVNT
KTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJmYWNlKTsKKworI2lmZGVm
IEdTVF9BUElfVkVSU0lPTl8xCisKKyAgICBHc3RWaWRlb0Nyb3BNZXRhKiBjcm9wTWV0YSA9IGdz
dF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3BfbWV0YShidWZmZXIpOworICAgIGlmIChjcm9wTWV0YSkK
KyAgICAgICAgbV9pbWFnZS0+Y3JvcChJbnRSZWN0KGNyb3BNZXRhLT54LCBjcm9wTWV0YS0+eSwg
Y3JvcE1ldGEtPndpZHRoLCBjcm9wTWV0YS0+aGVpZ2h0KSk7CisKKyAgICBnc3RfYnVmZmVyX3Vu
bWFwKGJ1ZmZlciwgJm1hcEluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1h
Z2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCmluZGV4IDE4OGMwYmIu
LmRjY2ZiNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKQEAgLTIzLDM3ICsyMyw1
OCBAQAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKICNpbmNsdWRlICJHT3du
UHRyLmgiCiAKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVv
Lmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2
aWRlb21ldGEuaD4KKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVy
OjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdT
dHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdl
KDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBz
ID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1h
dDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAm
d2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAg
ICByZXR1cm4gMDsKLSAgICB9CisgICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwor
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAg
ICBnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CiAKLSAgICBnc3Rf
Y2Fwc191bnJlZihjYXBzKTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9f
SU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVPX0lORk9f
V0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdI
VCgmdmlkZW9JbmZvKTsKIAorICAgIEdzdE1hcEluZm8gaW5mbzsKKyAgICBnc3RfYnVmZmVyX21h
cChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOworICAgIHVjaGFyKiBidWZmZXJEYXRhID0g
cmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGluZm8uZGF0YSk7CisjZWxzZQorICAgIHVjaGFyKiBi
dWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZm
ZXIpKTsKKyAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOworICAgIEdzdFZpZGVvRm9ybWF0
IGZvcm1hdDsKKyAgICBnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwg
JndpZHRoLCAmaGVpZ2h0KTsKKyNlbmRpZgogICAgIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0
OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9SR0IpCisjaWYgR19CWVRFX09S
REVSID09IEdfTElUVExFX0VORElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1B
VF9CR1JBKQorICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOworICAg
IGVsc2UKICAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7CisjZWxz
ZQorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQorICAgICAgICBpbWFn
ZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMjsKICAgICBlbHNlCi0gICAgICAgIGltYWdl
Rm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisgICAgICAgIGltYWdlRm9ybWF0ID0gUUlt
YWdlOjpGb3JtYXRfUkdCODg4OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IElt
YWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgaW1hZ2VGb3JtYXQp
KTsKLX0KKyAgICBRSW1hZ2UgaW1hZ2UoYnVmZmVyRGF0YSwgd2lkdGgsIGhlaWdodCwgaW1hZ2VG
b3JtYXQpOwogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVm
ZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0KQotICAgIDogbV9p
bWFnZSgwKQotewotICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKLSAgICBRSW1h
Z2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2UtPmNvbnZlcnRGcm9tSW1hZ2UoaW1hZ2Up
OwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYg
R1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJmluZm8pOwor
I2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBjZWVlOGY0Li5j
Mzc5Nzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcApAQCAtNzksNiArNzksMTIgQEAgc3RhdGljIGNvbnN0IGNoYXIqIGdQbGF5YmluTmFtZSA9
ICJwbGF5YmluIjsKIHN0YXRpYyBjb25zdCBjaGFyKiBnUGxheWJpbk5hbWUgPSAicGxheWJpbjIi
OwogI2VuZGlmCiAKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorc3RhdGljIGNvbnN0IGNoYXIq
IGdQbGF5YmluTmFtZSA9ICJwbGF5YmluIjsKKyNlbHNlCitzdGF0aWMgY29uc3QgY2hhciogZ1Bs
YXliaW5OYW1lID0gInBsYXliaW4yIjsKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTA1LDcgKzE1MTEsMTEgQEAgdm9pZCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgSW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBS
ZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUlt
YWdlKG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gd2Via2l0R3N0RWxlbWVudEdldFBh
ZENhcHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAgaWYgKCFjYXBzKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VH
U3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKICAgICBpZiAoIWdzdEltYWdl
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5k
ZXggNDM2MzAzNi4uMzIyMzVhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWaWRlb1Np
bmtHU3RyZWFtZXIuaCIKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaWZu
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0
L2dzdC5oPgpAQCAtMzk4LDQgKzM5OSw1IEBAIEdzdEVsZW1lbnQqIHdlYmtpdF92aWRlb19zaW5r
X25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3JsZCkKICAgICByZXR1cm4gZWxl
bWVudDsKIH0KIAorI2VuZGlmIC8vIEdTVF9BUElfVkVSU0lPTl8xCiAjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaAppbmRleCA1MDE4NTBmLi43OWY3
ZWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtMjUsNiArMjUsNyBAQAog
I2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAj
aW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92
aWRlby5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTc1LDcgKzc2LDExIEBAIHN0cnVjdCBfV2Vi
S2l0VmlkZW9TaW5rQ2xhc3MgewogCiAKIEdUeXBlICAgICAgIHdlYmtpdF92aWRlb19zaW5rX2dl
dF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIEdz
dEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQq
KTsKKyNlbHNlCitHc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lua19uZXcoKTsKKyNlbmRpZgog
CiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5M2JlMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3Ry
ZWFtZXIxLmNwcApAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
T3BlbmVkSGFuZAorICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIu
Y29tPgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5M
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKgorICoKKyAqIFdlYktpdFZpZGVv
U2luayBpcyBhIEdTdHJlYW1lciBzaW5rIGVsZW1lbnQgdGhhdCB0cmlnZ2VycworICogcmVwYWlu
dHMgaW4gdGhlIFdlYktpdCBHU3RyZWFtZXIgbWVkaWEgcGxheWVyIGZvciB0aGUKKyAqIGN1cnJl
bnQgdmlkZW8gYnVmZmVyLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBVU0UoR1NU
UkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQorI2luY2x1ZGUgIlZpZGVvU2lu
a0dTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4K
KyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVv
L2dzdHZpZGVvcG9vbC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisKKy8vIENBSVJPX0ZPUk1BVF9SR0IyNCB1c2VkIHRvIHJl
bmRlciB0aGUgdmlkZW8gYnVmZmVycyBpcyBsaXR0bGUvYmlnIGVuZGlhbiBkZXBlbmRhbnQuCisj
aWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorc3RhdGljIEdzdFN0YXRpY1BhZFRl
bXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NU
X1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTKEdTVF9WSURFT19DQVBT
X01BS0UoInsgQkdSeCwgQkdSQSB9IikpKTsKKyNlbHNlCitzdGF0aWMgR3N0U3RhdGljUGFkVGVt
cGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLCBHU1Rf
UEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNf
TUFLRSgieyB4UkdCLCBBUkdCIH0iKSkpOworI2VuZGlmCisKKworR1NUX0RFQlVHX0NBVEVHT1JZ
X1NUQVRJQyh3ZWJraXRfdmlkZW9fc2lua19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVM
VCB3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZworCitlbnVtIHsKKyAgICBSRVBBSU5UX1JFUVVFU1RF
RCwKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wCit9OworCitzdGF0
aWMgZ3VpbnQgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07
CisKK3N0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSB7CisgICAgR3N0QnVmZmVyKiBidWZm
ZXI7CisgICAgZ3VpbnQgdGltZW91dF9pZDsKKyAgICBHTXV0ZXgqIGJ1ZmZlcl9tdXRleDsKKyAg
ICBHQ29uZCogZGF0YV9jb25kOworICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgLy8gSWYg
dGhpcyBpcyBUUlVFIGFsbCBwcm9jZXNzaW5nIHNob3VsZCBmaW5pc2ggQVNBUAorICAgIC8vIFRo
aXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgYSByYWNlIGJldHdlZW4KKyAg
ICAvLyB1bmxvY2soKSBhbmQgcmVuZGVyKCksIHdoZXJlIHVubG9jaygpIHdpbnMsIHNpZ25hbHMg
dGhlCisgICAgLy8gR0NvbmQsIHRoZW4gcmVuZGVyKCkgdHJpZXMgdG8gcmVuZGVyIGEgZnJhbWUg
YWx0aG91Z2gKKyAgICAvLyBldmVyeXRoaW5nIGVsc2UgaXNuJ3QgcnVubmluZyBhbnltb3JlLiBU
aGlzIHdpbGwgbGVhZAorICAgIC8vIHRvIGRlYWRsb2NrcyBiZWNhdXNlIHJlbmRlcigpIGhvbGRz
IHRoZSBzdHJlYW0gbG9jay4KKyAgICAvLworICAgIC8vIFByb3RlY3RlZCBieSB0aGUgYnVmZmVy
IG11dGV4CisgICAgYm9vbCB1bmxvY2tlZDsKK307CisKKyNkZWZpbmUgd2Via2l0X3ZpZGVvX3Np
bmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2Vi
S2l0VmlkZW9TaW5rLCB3ZWJraXRfdmlkZW9fc2luaywgR1NUX1RZUEVfVklERU9fU0lOSywgR1NU
X0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcsIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAid2Via2l0c2luayIsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdCB2aWRlbyBz
aW5rIikpOworCisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0Vmlk
ZW9TaW5rKiBzaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXY7CisKKyAg
ICBzaW5rLT5wcml2ID0gcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzaW5rLCBX
RUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKTsKKyAgICBwcml2
LT5kYXRhX2NvbmQgPSBXVEY6OmZhc3ROZXc8R0NvbmQ+KCk7CisgICAgZ19jb25kX2luaXQocHJp
di0+ZGF0YV9jb25kKTsKKyAgICBwcml2LT5idWZmZXJfbXV0ZXggPSBXVEY6OmZhc3ROZXc8R011
dGV4PigpOworICAgIGdfbXV0ZXhfaW5pdChwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdzdF92
aWRlb19pbmZvX2luaXQoJnByaXYtPmluZm8pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jKGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0Vmlk
ZW9TaW5rKiBzaW5rID0gcmVpbnRlcnByZXRfY2FzdDxXZWJLaXRWaWRlb1NpbmsqPihkYXRhKTsK
KyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKyAgICBHc3RC
dWZmZXIqIGJ1ZmZlcjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwor
ICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKKyAgICBwcml2LT5idWZmZXIgPSAwOworICAgIHBy
aXYtPnRpbWVvdXRfaWQgPSAwOworCisgICAgaWYgKCFidWZmZXIgfHwgcHJpdi0+dW5sb2NrZWQg
fHwgVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpIHsKKyAgICAgICAgZ19jb25kX3Np
Z25hbChwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZm
ZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgZ19zaWduYWxf
ZW1pdChzaW5rLCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVEXSwg
MCwgYnVmZmVyKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CisgICAgZ19jb25kX3Np
Z25hbChwcml2LT5kYXRhX2NvbmQpOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9t
dXRleCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdl
YmtpdF92aWRlb19zaW5rX3JlbmRlcihHc3RCYXNlU2luayogYnNpbmssIEdzdEJ1ZmZlciogYnVm
ZmVyKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJz
aW5rKTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKwor
ICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAgaWYgKHByaXYtPnVu
bG9ja2VkKSB7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Cisg
ICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9CisKKyAgICBwcml2LT5idWZmZXIgPSBn
c3RfYnVmZmVyX3JlZihidWZmZXIpOworCisgICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKKyAgICBp
ZiAoIWdzdF92aWRlb19mcmFtZV9tYXAoJmZyYW1lLCAmcHJpdi0+aW5mbywgYnVmZmVyLCBHU1Rf
TUFQX1JFQUQpKSB7CisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICAgICAg
Z19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgcmV0dXJuIEdTVF9G
TE9XX0VSUk9SOworICAgIH0KKworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURF
T19GUkFNRV9GT1JNQVQoJmZyYW1lKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fRlJBTUVf
V0lEVEgoJmZyYW1lKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCgm
ZnJhbWUpOworCisgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwKCZmcmFtZSk7CisKKyAgICAvLyBD
YWlybydzIEFSR0IgaGFzIHByZS1tdWx0aXBsaWVkIGFscGhhIHdoaWxlIEdTdHJlYW1lcidzIGRv
ZXNuJ3QuCisgICAgLy8gSGVyZSB3ZSBjb252ZXJ0IHRvIENhaXJvJ3MgQVJHQi4KKyAgICBpZiAo
Zm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZP
Uk1BVF9CR1JBKSB7CisgICAgICAgIC8vIEJlY2F1c2UgR3N0QmFzZVNpbms6OnJlbmRlcigpIG9u
bHkgb3ducyB0aGUgYnVmZmVyIHJlZmVyZW5jZSBpbiB0aGUKKyAgICAgICAgLy8gbWV0aG9kIHNj
b3BlIHdlIGNhbid0IHVzZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFibGUoKSBoZXJlLiBBbHNvCisg
ICAgICAgIC8vIFRoZSBidWZmZXIgY29udGVudCBzaG91bGQgbm90IGJlIGNoYW5nZWQgaGVyZSBi
ZWNhdXNlIHRoZSBzYW1lIGJ1ZmZlcgorICAgICAgICAvLyBjb3VsZCBiZSBwYXNzZWQgbXVsdGlw
bGUgdGltZXMgdG8gdGhpcyBtZXRob2QgKGluIHRoZW9yeSkuCisgICAgICAgIGdzaXplIGJ1ZmZl
clNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZlcik7CisgICAgICAgIEdzdEJ1ZmZlciog
bmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGJ1ZmZlclNpemUpOworCisgICAg
ICAgIC8vIENoZWNrIGlmIGFsbG9jYXRpb24gZmFpbGVkLgorICAgICAgICBpZiAoVU5MSUtFTFko
IW5ld0J1ZmZlcikpIHsKKyAgICAgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9t
dXRleCk7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgICAgIH0KKwor
ICAgICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byhuZXdCdWZmZXIsIGJ1ZmZlciwgc3RhdGljX2Nh
c3Q8R3N0QnVmZmVyQ29weUZsYWdzPihHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEpLCAwLCBidWZm
ZXJTaXplKTsKKworICAgICAgICAvLyBXZSBkb24ndCB1c2UgQ29sb3I6OnByZW11bHRpcGxpZWRB
UkdCRnJvbUNvbG9yKCkgaGVyZSBiZWNhdXNlCisgICAgICAgIC8vIG9uZSBmdW5jdGlvbiBjYWxs
IHBlciB2aWRlbyBwaXhlbCBpcyBqdXN0IHRvbyBleHBlbnNpdmU6CisgICAgICAgIC8vIEZvciA3
MjBwL1BBTCBmb3IgZXhhbXBsZSB0aGlzIG1lYW5zIDEyODAqNzIwKjI1PTIzMDQwMDAwCisgICAg
ICAgIC8vIGZ1bmN0aW9uIGNhbGxzIHBlciBzZWNvbmQhCisgICAgICAgIHVuc2lnbmVkIHNob3J0
IGFscGhhOworICAgICAgICBHc3RNYXBJbmZvIHNvdXJjZUluZm87CisgICAgICAgIEdzdE1hcElu
Zm8gZGVzdGluYXRpb25JbmZvOworICAgICAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZzb3Vy
Y2VJbmZvLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBjb25zdCBndWludDgqIHNvdXJjZSA9IGNv
bnN0X2Nhc3Q8Z3VpbnQ4Kj4oc291cmNlSW5mby5kYXRhKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9t
YXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAg
Z3VpbnQ4KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGd1aW50OCo+KGRlc3RpbmF0aW9uSW5m
by5kYXRhKTsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGhlaWdodDsgeCsrKSB7Cisg
ICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHdpZHRoOyB5KyspIHsKKyNpZiBHX0JZVEVf
T1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2Vb
M107CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAoc291cmNlWzBdICogYWxwaGEg
KyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsx
XSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9
IChzb3VyY2VbMl0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bM10gPSBhbHBoYTsKKyNlbHNlCisgICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2Vb
MF07CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBhbHBoYTsKKyAgICAgICAgICAg
ICAgICBkZXN0aW5hdGlvblsxXSA9IChzb3VyY2VbMV0gKiBhbHBoYSArIDEyOCkgLyAyNTU7Cisg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMl0gPSAoc291cmNlWzJdICogYWxwaGEgKyAxMjgp
IC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gKHNvdXJjZVszXSAqIGFs
cGhhICsgMTI4KSAvIDI1NTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHNvdXJjZSArPSA0Owor
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZzb3VyY2VJbmZvKTsKKyAgICAg
ICAgZ3N0X2J1ZmZlcl91bm1hcChuZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8pOworCisgICAg
ICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICAgICAgYnVmZmVyID0gcHJpdi0+YnVm
ZmVyID0gbmV3QnVmZmVyOworICAgIH0KKworCisgICAgLy8gVGhpcyBzaG91bGQgbGlrZWx5IHVz
ZSBhIGxvd2VyIHByaW9yaXR5LCBidXQgZ2xpYiBjdXJyZW50bHkgc3RhcnZlcworICAgIC8vIGxv
d2VyIHByaW9yaXR5IHNvdXJjZXMuCisgICAgLy8gU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21l
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwODMwLgorICAgIHByaXYtPnRpbWVvdXRfaWQgPSBnX3Rp
bWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0X29iamVjdF9yZWYo
c2luayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVy
cHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CisKKyAgICBnX2Nv
bmRfd2FpdChwcml2LT5kYXRhX2NvbmQsIHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19tdXRl
eF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0
KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVj
dCk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAg
ICBpZiAocHJpdi0+ZGF0YV9jb25kKSB7CisgICAgICAgIGdfY29uZF9jbGVhcihwcml2LT5kYXRh
X2NvbmQpOworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+ZGF0YV9jb25kKTsKKyAgICAg
ICAgcHJpdi0+ZGF0YV9jb25kID0gMDsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+YnVmZmVyX211
dGV4KSB7CisgICAgICAgIGdfbXV0ZXhfY2xlYXIocHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAg
ICAgV1RGOjpmYXN0RGVsZXRlKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHByaXYtPmJ1
ZmZlcl9tdXRleCA9IDA7CisgICAgfQorCisgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNz
KS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB1bmxvY2tCdWZmZXJNdXRleChX
ZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2KQoreworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5i
dWZmZXJfbXV0ZXgpOworCisgICAgaWYgKHByaXYtPmJ1ZmZlcikgeworICAgICAgICBnc3RfYnVm
ZmVyX3VucmVmKHByaXYtPmJ1ZmZlcik7CisgICAgICAgIHByaXYtPmJ1ZmZlciA9IDA7CisgICAg
fQorCisgICAgcHJpdi0+dW5sb2NrZWQgPSB0cnVlOworCisgICAgZ19jb25kX3NpZ25hbChwcml2
LT5kYXRhX2NvbmQpOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua191bmxvY2soR3N0QmFzZVNpbmsq
IG9iamVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lO
SyhvYmplY3QpOworCisgICAgdW5sb2NrQnVmZmVyTXV0ZXgoc2luay0+cHJpdik7CisKKyAgICBy
ZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1
bmxvY2ssIChvYmplY3QpLCBUUlVFKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRl
b19zaW5rX3VubG9ja19zdG9wKEdzdEJhc2VTaW5rKiBvYmplY3QpCit7CisgICAgV2ViS2l0Vmlk
ZW9TaW5rUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCktPnByaXY7CisK
KyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBwcml2LT51bmxvY2tl
ZCA9IGZhbHNlOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAg
ICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNT
LCB1bmxvY2tfc3RvcCwgKG9iamVjdCksIFRSVUUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Vi
a2l0X3ZpZGVvX3Npbmtfc3RvcChHc3RCYXNlU2luayogYmFzZV9zaW5rKQoreworICAgIHVubG9j
a0J1ZmZlck11dGV4KFdFQktJVF9WSURFT19TSU5LKGJhc2Vfc2luayktPnByaXYpOworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQo
R3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdjsKKworICAgIGdfbXV0ZXhf
bG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHByaXYtPnVubG9ja2VkID0gZmFsc2U7Cisg
ICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICByZXR1cm4gVFJVRTsK
K30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlv
bihHc3RCYXNlU2luayogYmFzZV9zaW5rLCBHc3RRdWVyeSogcXVlcnkpCit7CisgICAgV2ViS2l0
VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKTsKKyAgICBHc3RD
YXBzKiBjYXBzOworICAgIGdib29sZWFuIG5lZWRfcG9vbDsKKworICAgIGdzdF9xdWVyeV9wYXJz
ZV9hbGxvY2F0aW9uKHF1ZXJ5LCAmY2FwcywgJm5lZWRfcG9vbCk7CisKKyAgICBpZiAoIWNhcHMp
CisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9j
YXBzKCZzaW5rLT5wcml2LT5pbmZvLCBjYXBzKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisg
ICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEocXVlcnksIEdTVF9WSURFT19NRVRBX0FQ
SSk7CisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEocXVlcnksIEdTVF9WSURFT19D
Uk9QX01FVEFfQVBJKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgbWFyc2hh
bF9WT0lEX19NSU5JT0JKRUNUKEdDbG9zdXJlKiBjbG9zdXJlLCBHVmFsdWUqIHJldHVyblZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IHBhcmFtZXRlcnNO
dW1iZXIsIGNvbnN0IEdWYWx1ZSogcGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBncG9pbnRlciBpbnZvY2F0aW9uSGludCwgZ3BvaW50ZXIgbWFyc2hhbERh
dGEpCit7CisgICAgdHlwZWRlZiB2b2lkICgqbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkg
KGdwb2ludGVyIG9iamVjdCwgZ3BvaW50ZXIgYXJnMSwgZ3BvaW50ZXIgZGF0YTIpOworICAgIG1h
cnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QgY2FsbGJhY2s7CisgICAgR0NDbG9zdXJlKiBjYyA9
IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgICBncG9pbnRlciBkYXRhMSwgZGF0YTI7CisKKyAg
ICBnX3JldHVybl9pZl9mYWlsKHBhcmFtZXRlcnNOdW1iZXIgPT0gMik7CisKKyAgICBpZiAoR19D
Q0xPU1VSRV9TV0FQX0RBVEEoY2xvc3VyZSkpIHsKKyAgICAgICAgZGF0YTEgPSBjbG9zdXJlLT5k
YXRhOworICAgICAgICBkYXRhMiA9IGdfdmFsdWVfcGVla19wb2ludGVyKHBhcmFtZXRlcnMgKyAw
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhMSA9IGdfdmFsdWVfcGVla19wb2ludGVyKHBh
cmFtZXRlcnMgKyAwKTsKKyAgICAgICAgZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICAgIH0KKyAg
ICBjYWxsYmFjayA9IChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUKSAobWFyc2hhbERhdGEg
PyBtYXJzaGFsRGF0YSA6IGNjLT5jYWxsYmFjayk7CisKKyAgICBjYWxsYmFjayhkYXRhMSwgZ192
YWx1ZV9nZXRfYm94ZWQocGFyYW1ldGVycyArIDEpLCBkYXRhMik7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGtsYXNz
KQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGts
YXNzKTsKKyAgICBHc3RCYXNlU2lua0NsYXNzKiBnc3RiYXNlX3NpbmtfY2xhc3MgPSBHU1RfQkFT
RV9TSU5LX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRfY2xhc3Mg
PSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRf
cGFkX3RlbXBsYXRlKGVsZW1lbnRfY2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgm
c2lua1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKGVsZW1l
bnRfY2xhc3MsCisgICAgICAgICAgICAiV2ViS2l0IHZpZGVvIHNpbmsiLAorICAgICAgICAgICAg
IlNpbmsvVmlkZW8iLCAiU2VuZHMgdmlkZW8gZGF0YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVsaW5l
IHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCisgICAgICAgICAgICAiQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4iKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdl
YktpdFZpZGVvU2lua1ByaXZhdGUpKTsKKworICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3
ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlOworCisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxv
Y2sgPSB3ZWJraXRfdmlkZW9fc2lua191bmxvY2s7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51
bmxvY2tfc3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9wOworICAgIGdzdGJhc2Vf
c2lua19jbGFzcy0+cmVuZGVyID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJh
c2Vfc2lua19jbGFzcy0+cHJlcm9sbCA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKKyAgICBn
c3RiYXNlX3NpbmtfY2xhc3MtPnN0b3AgPSB3ZWJraXRfdmlkZW9fc2lua19zdG9wOworICAgIGdz
dGJhc2Vfc2lua19jbGFzcy0+c3RhcnQgPSB3ZWJraXRfdmlkZW9fc2lua19zdGFydDsKKyAgICBn
c3RiYXNlX3NpbmtfY2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9IHdlYmtpdF92aWRlb19zaW5r
X3Byb3Bvc2VfYWxsb2NhdGlvbjsKKworICAgIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQ
QUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJyZXBhaW50LXJlcXVlc3RlZCIsCisgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAg
ICAgICAgICAgIDAsIC8vIENsYXNzIG9mZnNldC4KKyAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxh
dG9yLgorICAgICAgICAgICAgMCwgLy8gQWNjdW11bGF0b3IgZGF0YS4KKyAgICAgICAgICAgIG1h
cnNoYWxfVk9JRF9fTUlOSU9CSkVDVCwgLy8gQ3VzdG9tIG1hcnNoYWxsZXIuCisgICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgLy8gUmV0dXJuIHR5cGUuCisgICAgICAgICAgICAxLCAvLyBPbmx5IG9u
ZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICBHU1RfVFlQRV9CVUZGRVIpOworfQorCitHc3RFbGVt
ZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoKQoreworICAgIHJldHVybiBHU1RfRUxFTUVOVChn
X29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklERU9fU0lOSywgMCkpOworfQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKLS0gCjEuNy45LjE=
</data>
<flag name="commit-queue"
          id="131618"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129075</attachid>
            <date>2012-02-27 11:26:16 -0800</date>
            <delta_ts>2012-03-02 03:30:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>31082</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA4ZjE3OTljYzAyZWFlNWQ1OWZjNTA0ZWM1MjM3ZTVhZDNjM2QwNzY1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDIwOjI1OjM5ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
UGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDM5ICsrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAg
ICAgICAgICAgICB8ICAgIDEgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oICAgfCAgIDMwICstCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ0cubW0gICAgICAgICB8ICAgNzUgKysrKy0KIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgICAgIHwgICA2NiArKystCiAuLi4vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwICAgICAgICB8ICAgNTcgKystCiAuLi4vZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICAgICB8ICAgIDYgKy0KIC4uLi9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCAgICAgIHwgICAgMiArCiAu
Li4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oICAgICAgICB8ICAgIDUg
KwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCAgICAgfCAg
Mzc0ICsrKysrKysrKysrKysrKysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCA1ODUgaW5zZXJ0aW9u
cygrKSwgNzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDE1YWViZTQuLjQ1MDdkMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0NCBAQAog
MjAxMi0wMi0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKKyAg
ICAgICAgW0dTdHJlYW1lcl0gMC4xMSB2aWRlby1zaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkIG5ldyB2
aWRlbyBzaW5rIGNvZGUgdG8gdGhlIGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oOiBjcmVhdGVJbWFnZSBBUEkKKyAgICAgICAgdXBk
YXRlIHNvIGltcGxlbWVudGF0aW9ucyBkb24ndCBuZWVkIHRvIHVzZQorICAgICAgICBnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZCBpbiBnc3QtMC4xMS4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZSk6CisgICAgICAg
IChJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyQ0cubW06CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3Ry
ZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lckNhaXJvLmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQu
Y3BwOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcDogQnVpbGQgb25seQorICAgICAgICBmb3IgZ3N0LTAuMTAuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oOiBObyBuZWVk
IGZvcgorICAgICAgICBHU3RyZWFtZXJHV29ybGQgaW4gdGhlIGdzdC0wLjExIHZpZGVvIHNpbmsu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
cjEuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcC4KKyAgICAgICAgKF9XZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyk6CisgICAg
ICAgICh3ZWJraXRfdmlkZW9fc2lua19yZW5kZXIpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Np
bmtfZGlzcG9zZSk6CisgICAgICAgICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3ZWJr
aXRfdmlkZW9fc2lua191bmxvY2spOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2Nr
X3N0b3ApOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Npbmtfc3RvcCk6CisgICAgICAgICh3ZWJr
aXRfdmlkZW9fc2lua19zdGFydCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19wcm9wb3Nl
X2FsbG9jYXRpb24pOgorICAgICAgICAobWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKToKKyAgICAg
ICAgKHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfbmV3KToKKworMjAxMi0wMi0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CisKICAgICAgICAgW0dUS10gQ3JvcCBzdXBwb3J0IGluIEJpdG1hcEltYWdlCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTY1MQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA5YWRhNDRkLi5hMDk5MjkyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ1NDAsNiArNDU0MCw3IEBAIHdlYmNvcmVndGtf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1BsYXRmb3JtVmlkZW9XaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
LmgKaW5kZXggYWI3OTliYS4uYjNlMzE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIzLDIwICsyMywyMyBAQAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikK
IAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1
ZGUgPGdzdC92aWRlby92aWRlby5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBV
U0UoQ0FJUk8pCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgX0dz
dEJ1ZmZlciBHc3RCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0Q2FwcyBHc3RDYXBzOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRTaXplOworY2xhc3MgQml0bWFwSW1hZ2U7CiAK
IGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3RyZWFtZXI+
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVy
PiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RDYXBzKiBjYXBz
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVh
bWVyKGJ1ZmZlciwgY2FwcykpOworICAgICAgICB9CiAgICAgICAgIH5JbWFnZUdTdHJlYW1lcigp
OwogCiAgICAgICAgIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlKCkKQEAgLTQ4LDE4ICs1
MSw3IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3Ry
ZWFtZXI+IHsKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IG1faW1h
Z2U7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciom
LCBJbnRTaXplLCBjYWlyb19mb3JtYXRfdCYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkK
LSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUsIFFJbWFnZTo6Rm9y
bWF0KTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiwgSW50U2l6ZSk7Ci0jZW5kaWYKLQorICAgICAgICBJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiwgR3N0Q2FwcyopOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyQ0cubW0KaW5kZXggZmUwOTI4Yi4uMzQ1M2MzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
Q0cubW0KQEAgLTIyLDMyICsyMiw3NyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRl
by5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0
dmlkZW9tZXRhLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NS
ZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZm
ZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBi
dWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7CisKKyNpZmRlZiBHU1Rf
QVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVv
X2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpOworCisgICAgR3N0VmlkZW9Gb3JtYXQg
Zm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUKCZ2aWRlb0luZm8pOworICAgIGludCB3aWR0
aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pOworICAgIGludCBoZWlnaHQgPSBH
U1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyk7CisKKyAgICBHc3RNYXBJbmZvIGluZm87
CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICBj
b25zdCBVSW50OCogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihp
bmZvLmRhdGEpOworI2Vsc2UKICAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdz
dENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0VmlkZW9G
b3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMs
ICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fw
cyk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBnc3RfdmlkZW9fZm9ybWF0X3Bh
cnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
KSk7Ci19CisgICAgZ3VpbnQgYnVmZmVyU2l6ZSA9IEdTVF9CVUZGRVJfU0laRShidWZmZXIpOwor
ICAgIGNvbnN0IFVJbnQ4KiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50
OCo+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyNlbmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6
SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUpCi0gICAgOiBt
X2ltYWdlKDApCi17Ci0gICAgQVNTRVJUKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKKyAgICBB
U1NFUlQoYnVmZmVyU2l6ZSk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0
Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KEdT
VF9CVUZGRVJfREFUQShidWZmZXIpKSwgR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlciksIGtDRkFsbG9j
YXRvck51bGwpKTsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0
YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBidWZmZXJEYXRhLCBidWZmZXJTaXplLCBrQ0ZBbGxv
Y2F0b3JOdWxsKSk7CiAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlcihB
ZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQoKSkpOwotICAg
IENHSW1hZ2VSZWYgZnJhbWVJbWFnZSA9IENHSW1hZ2VDcmVhdGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLCA4LCAzMiwgc2l6ZS53aWR0aCgpKjQsIGRldmljZVJHQkNvbG9yU3BhY2VSZWYo
KSwKLSAgICAgICAga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmly
c3QsIHByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7
CisKKyAgICBzaXplX3QgYml0c1BlckNvbXBvbmVudCA9IDg7CisgICAgc2l6ZV90IGJpdHNQZXJQ
aXhlbDsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3c7CisgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcElu
Zm87CisKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgaWYgKGZvcm1h
dCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgICAgIGJpdHNQ
ZXJQaXhlbCA9IDMyOworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVs
c2UgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBr
Q0dJbWFnZUFscGhhTm9uZTsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5
dGVzUGVyUm93ID0gd2lkdGggKiAzOworICAgIH0KKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX0FSR0IpIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5
dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYUZpcnN0OworICAgICAgICBiaXRzUGVyUGl4ZWwg
PSAzMjsKKyAgICAgICAgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDQ7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBo
YU5vbmU7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDI0OworICAgICAgICBieXRlc1BlclJvdyA9
IHdpZHRoICogMzsKKyAgICB9CisjZW5kaWYKKworICAgIENHSW1hZ2VSZWYgZnJhbWVJbWFnZSA9
IENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgYml0c1BlckNvbXBvbmVudCwgYml0c1BlclBp
eGVsLCBieXRlc1BlclJvdywgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvLCBw
cm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAg
IG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOworCisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJmluZm8pOworI2Vu
ZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4IDhiM2EwNzYuLmEzOWI1ZjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
ckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKQEAgLTIyLDQwICsyMiw3MiBAQAogCiAjaWYgRU5B
QkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNl
bmRpZgorCiAjaW5jbHVkZSAiR093blB0ci5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdl
R1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVy
OjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAg
OiBtX2ltYWdlKDApCiB7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0lu
Zm8gdmlkZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBj
YXBzKTsKKworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1B
VCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlk
ZW9JbmZvKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0lu
Zm8pOworCisgICAgR3N0TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZl
ciwgJm1hcEluZm8sIEdTVF9NQVBfUkVBRCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwSW5mby5kYXRhKTsKKyNl
bHNlCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKICAgICBpbnQgd2lkdGggPSAw
LCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1
ZmZlcik7CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zv
cm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAg
ICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2Fwcyhj
YXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOworI2VuZGlmCiAKICAgICBjYWlyb19mb3Jt
YXRfdCBjYWlyb0Zvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJH
QiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorI2lmIEdfQllURV9PUkRFUiA9
PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdS
QSkKKyAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOworICAgIGVsc2UK
KyAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZWxzZQorICAgIGlm
IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQogICAgICAgICBjYWlyb0Zvcm1hdCA9
IENBSVJPX0ZPUk1BVF9BUkdCMzI7CiAgICAgZWxzZQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENB
SVJPX0ZPUk1BVF9SR0IyNDsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFn
ZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGNhaXJvRm9ybWF0KSk7
Ci19CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVP
X0lORk9fUExBTkVfU1RSSURFKCZ2aWRlb0luZm8sIDApOworI2Vsc2UKKyAgICBpbnQgc3RyaWRl
ID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3JtYXQsIHdpZHRoKTsKKyNl
bmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVy
LCBJbnRTaXplIHNpemUsIGNhaXJvX2Zvcm1hdF90JiBjYWlyb0Zvcm1hdCkKLSAgICA6IG1faW1h
Z2UoMCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgY2Fpcm9Gb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKGNhaXJv
Rm9ybWF0LCBzaXplLndpZHRoKCkpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShidWZmZXJEYXRhLCBjYWlyb0Zvcm1h
dCwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKwor
ICAgIEdzdFZpZGVvQ3JvcE1ldGEqIGNyb3BNZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fY3Jv
cF9tZXRhKGJ1ZmZlcik7CisgICAgaWYgKGNyb3BNZXRhKQorICAgICAgICBtX2ltYWdlLT5jcm9w
KEludFJlY3QoY3JvcE1ldGEtPngsIGNyb3BNZXRhLT55LCBjcm9wTWV0YS0+d2lkdGgsIGNyb3BN
ZXRhLT5oZWlnaHQpKTsKKworICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmbWFwSW5mbyk7
CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3Ry
ZWFtZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJRdC5jcHAKaW5kZXggMTg4YzBiYi4uZGNjZmI2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bWFnZUdTdHJlYW1lclF0LmNwcApAQCAtMjMsMzcgKzIzLDU4IEBACiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIkdPd25QdHIuaCIKIAorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1Jl
ZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZl
ciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1
ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBpbnQgd2lkdGgg
PSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBz
KGJ1ZmZlcik7Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVv
X2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAg
ICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAg
ICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQaXhtYXA7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9O
XzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21f
Y2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKIAotICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAg
IEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZv
KTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAg
ICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pOwogCisgICAg
R3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJmluZm8sIEdTVF9N
QVBfUkVBRCk7CisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PHVjaGFy
Kj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJl
dF9jYXN0PHVjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworICAgIGludCB3aWR0aCA9
IDAsIGhlaWdodCA9IDA7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OworICAgIGdzdF92aWRl
b19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOworI2Vu
ZGlmCiAgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX1JHQikKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFO
CisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCisgICAgICAgIGltYWdl
Rm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisgICAgZWxzZQogICAgICAgICBpbWFnZUZv
cm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX0FSR0IpCisgICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3Jt
YXRfQVJHQjMyOwogICAgIGVsc2UKLSAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1h
dF9SR0IzMjsKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7Cisj
ZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpLCBpbWFnZUZvcm1hdCkpOwotfQorICAgIFFJbWFnZSBpbWFn
ZShidWZmZXJEYXRhLCB3aWR0aCwgaGVpZ2h0LCBpbWFnZUZvcm1hdCk7CiAKLUltYWdlR1N0cmVh
bWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSwgUUlt
YWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgUVBpeG1h
cCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwotICAgIFFJbWFnZSBpbWFnZShHU1RfQlVGRkVSX0RB
VEEoYnVmZmVyKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBpbWFnZUZvcm1hdCk7CiAg
ICAgc3VyZmFjZS0+Y29udmVydEZyb21JbWFnZShpbWFnZSk7CiAgICAgbV9pbWFnZSA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoc3VyZmFjZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAg
IGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3Ry
ZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDZlZTQ5ODQuLmY4MmJhNWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNTA1LDcgKzE1MDUs
MTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VH
U3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gd2Vi
a2l0R3N0RWxlbWVudEdldFBhZENhcHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAg
aWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+
IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsK
ICAgICBpZiAoIWdzdEltYWdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lu
a0dTdHJlYW1lci5jcHAKaW5kZXggNDM2MzAzNi4uMzIyMzVhZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVv
U2lua0dTdHJlYW1lci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShHU1RSRUFNRVIpCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAKICNpbmNsdWRlIDxnbGli
Lmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgpAQCAtMzk4LDQgKzM5OSw1IEBAIEdzdEVsZW1lbnQq
IHdlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3Js
ZCkKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAorI2VuZGlmIC8vIEdTVF9BUElfVkVSU0lPTl8x
CiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaApp
bmRleCA1MDE4NTBmLi43OWY3ZWQ1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaApA
QCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgogI2luY2x1ZGUg
PGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgorI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogCiBHX0JFR0lOX0RFQ0xTCiAKQEAgLTc1LDcgKzc2
LDExIEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3MgewogCiAKIEdUeXBlICAgICAgIHdl
YmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKyNpZm5kZWYgR1NU
X0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQgKndlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3Jl
OjpHU3RyZWFtZXJHV29ybGQqKTsKKyNlbHNlCitHc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lu
a19uZXcoKTsKKyNlbmRpZgogCiBHX0VORF9ERUNMUwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ5M2JlMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApAQCAtMCwwICsxLDM3NCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZAorICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAx
MSwgMjAxMiBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisvKgor
ICoKKyAqIFdlYktpdFZpZGVvU2luayBpcyBhIEdTdHJlYW1lciBzaW5rIGVsZW1lbnQgdGhhdCB0
cmlnZ2VycworICogcmVwYWludHMgaW4gdGhlIFdlYktpdCBHU3RyZWFtZXIgbWVkaWEgcGxheWVy
IGZvciB0aGUKKyAqIGN1cnJlbnQgdmlkZW8gYnVmZmVyLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpZiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQor
I2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+Cisj
aW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92
aWRlby5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CisKKy8vIENBSVJPX0ZPUk1B
VF9SR0IyNCB1c2VkIHRvIHJlbmRlciB0aGUgdmlkZW8gYnVmZmVycyBpcyBsaXR0bGUvYmlnIGVu
ZGlhbiBkZXBlbmRhbnQuCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorc3Rh
dGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RF
TVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19D
QVBTKEdTVF9WSURFT19DQVBTX01BS0UoInsgQkdSeCwgQkdSQSB9IikpKTsKKyNlbHNlCitzdGF0
aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVN
UExBVEUoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RBVElDX0NB
UFMoR1NUX1ZJREVPX0NBUFNfTUFLRSgieyB4UkdCLCBBUkdCIH0iKSkpOworI2VuZGlmCisKKwor
R1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfdmlkZW9fc2lua19kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZworCitlbnVtIHsKKyAg
ICBSRVBBSU5UX1JFUVVFU1RFRCwKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAg
UFJPUF8wCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tMQVNU
X1NJR05BTF0gPSB7IDAsIH07CisKK3N0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSB7Cisg
ICAgR3N0QnVmZmVyKiBidWZmZXI7CisgICAgZ3VpbnQgdGltZW91dF9pZDsKKyAgICBHTXV0ZXgq
IGJ1ZmZlcl9tdXRleDsKKyAgICBHQ29uZCogZGF0YV9jb25kOworICAgIEdzdFZpZGVvSW5mbyBp
bmZvOworCisgICAgLy8gSWYgdGhpcyBpcyBUUlVFIGFsbCBwcm9jZXNzaW5nIHNob3VsZCBmaW5p
c2ggQVNBUAorICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgY291bGQgYmUg
YSByYWNlIGJldHdlZW4KKyAgICAvLyB1bmxvY2soKSBhbmQgcmVuZGVyKCksIHdoZXJlIHVubG9j
aygpIHdpbnMsIHNpZ25hbHMgdGhlCisgICAgLy8gR0NvbmQsIHRoZW4gcmVuZGVyKCkgdHJpZXMg
dG8gcmVuZGVyIGEgZnJhbWUgYWx0aG91Z2gKKyAgICAvLyBldmVyeXRoaW5nIGVsc2UgaXNuJ3Qg
cnVubmluZyBhbnltb3JlLiBUaGlzIHdpbGwgbGVhZAorICAgIC8vIHRvIGRlYWRsb2NrcyBiZWNh
dXNlIHJlbmRlcigpIGhvbGRzIHRoZSBzdHJlYW0gbG9jay4KKyAgICAvLworICAgIC8vIFByb3Rl
Y3RlZCBieSB0aGUgYnVmZmVyIG11dGV4CisgICAgYm9vbCB1bmxvY2tlZDsKK307CisKKyNkZWZp
bmUgd2Via2l0X3ZpZGVvX3NpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVf
VFlQRV9XSVRIX0NPREUoV2ViS2l0VmlkZW9TaW5rLCB3ZWJraXRfdmlkZW9fc2luaywgR1NUX1RZ
UEVfVklERU9fU0lOSywgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3ZpZGVvX3Npbmtf
ZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0c2luayIsIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIndlYmtpdCB2aWRlbyBzaW5rIikpOworCisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19z
aW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1By
aXZhdGUqIHByaXY7CisKKyAgICBzaW5rLT5wcml2ID0gcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKTsKKyAgICBwcml2LT5kYXRhX2NvbmQgPSBXVEY6OmZhc3ROZXc8R0NvbmQ+KCk7Cisg
ICAgZ19jb25kX2luaXQocHJpdi0+ZGF0YV9jb25kKTsKKyAgICBwcml2LT5idWZmZXJfbXV0ZXgg
PSBXVEY6OmZhc3ROZXc8R011dGV4PigpOworICAgIGdfbXV0ZXhfaW5pdChwcml2LT5idWZmZXJf
bXV0ZXgpOworICAgIGdzdF92aWRlb19pbmZvX2luaXQoJnByaXYtPmluZm8pOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jKGdwb2ludGVyIGRhdGEp
Cit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gcmVpbnRlcnByZXRfY2FzdDxXZWJLaXRW
aWRlb1NpbmsqPihkYXRhKTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2lu
ay0+cHJpdjsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOworICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKKyAgICBwcml2LT5i
dWZmZXIgPSAwOworICAgIHByaXYtPnRpbWVvdXRfaWQgPSAwOworCisgICAgaWYgKCFidWZmZXIg
fHwgcHJpdi0+dW5sb2NrZWQgfHwgVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpIHsK
KyAgICAgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBnX211dGV4
X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAg
fQorCisgICAgZ19zaWduYWxfZW1pdChzaW5rLCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW1JF
UEFJTlRfUkVRVUVTVEVEXSwgMCwgYnVmZmVyKTsKKyAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZl
cik7CisgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOworICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRp
YyBHc3RGbG93UmV0dXJuIHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcihHc3RCYXNlU2luayogYnNp
bmssIEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdF
QktJVF9WSURFT19TSU5LKGJzaW5rKTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2
ID0gc2luay0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwor
CisgICAgaWYgKHByaXYtPnVubG9ja2VkKSB7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9CisKKyAg
ICBwcml2LT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZihidWZmZXIpOworCisgICAgR3N0VmlkZW9G
cmFtZSBmcmFtZTsKKyAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAoJmZyYW1lLCAmcHJpdi0+
aW5mbywgYnVmZmVyLCBHU1RfTUFQX1JFQUQpKSB7CisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYo
YnVmZmVyKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgIH0KKworICAgIEdzdFZpZGVvRm9ybWF0
IGZvcm1hdCA9IEdTVF9WSURFT19GUkFNRV9GT1JNQVQoJmZyYW1lKTsKKyAgICBpbnQgd2lkdGgg
PSBHU1RfVklERU9fRlJBTUVfV0lEVEgoJmZyYW1lKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJ
REVPX0ZSQU1FX0hFSUdIVCgmZnJhbWUpOworCisgICAgZ3N0X3ZpZGVvX2ZyYW1lX3VubWFwKCZm
cmFtZSk7CisKKyAgICAvLyBDYWlybydzIEFSR0IgaGFzIHByZS1tdWx0aXBsaWVkIGFscGhhIHdo
aWxlIEdTdHJlYW1lcidzIGRvZXNuJ3QuCisgICAgLy8gSGVyZSB3ZSBjb252ZXJ0IHRvIENhaXJv
J3MgQVJHQi4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3Jt
YXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSB7CisgICAgICAgIC8vIEJlY2F1c2UgR3N0QmFz
ZVNpbms6OnJlbmRlcigpIG9ubHkgb3ducyB0aGUgYnVmZmVyIHJlZmVyZW5jZSBpbiB0aGUKKyAg
ICAgICAgLy8gbWV0aG9kIHNjb3BlIHdlIGNhbid0IHVzZSBnc3RfYnVmZmVyX21ha2Vfd3JpdGFi
bGUoKSBoZXJlLiBBbHNvCisgICAgICAgIC8vIFRoZSBidWZmZXIgY29udGVudCBzaG91bGQgbm90
IGJlIGNoYW5nZWQgaGVyZSBiZWNhdXNlIHRoZSBzYW1lIGJ1ZmZlcgorICAgICAgICAvLyBjb3Vs
ZCBiZSBwYXNzZWQgbXVsdGlwbGUgdGltZXMgdG8gdGhpcyBtZXRob2QgKGluIHRoZW9yeSkuCisg
ICAgICAgIGdzaXplIGJ1ZmZlclNpemUgPSBnc3RfYnVmZmVyX2dldF9zaXplKGJ1ZmZlcik7Cisg
ICAgICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGJ1
ZmZlclNpemUpOworCisgICAgICAgIC8vIENoZWNrIGlmIGFsbG9jYXRpb24gZmFpbGVkLgorICAg
ICAgICBpZiAoVU5MSUtFTFkoIW5ld0J1ZmZlcikpIHsKKyAgICAgICAgICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJS
T1I7CisgICAgICAgIH0KKworICAgICAgICBnc3RfYnVmZmVyX2NvcHlfaW50byhuZXdCdWZmZXIs
IGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0QnVmZmVyQ29weUZsYWdzPihHU1RfQlVGRkVSX0NPUFlf
TUVUQURBVEEpLCAwLCBidWZmZXJTaXplKTsKKworICAgICAgICAvLyBXZSBkb24ndCB1c2UgQ29s
b3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgaGVyZSBiZWNhdXNlCisgICAgICAgIC8v
IG9uZSBmdW5jdGlvbiBjYWxsIHBlciB2aWRlbyBwaXhlbCBpcyBqdXN0IHRvbyBleHBlbnNpdmU6
CisgICAgICAgIC8vIEZvciA3MjBwL1BBTCBmb3IgZXhhbXBsZSB0aGlzIG1lYW5zIDEyODAqNzIw
KjI1PTIzMDQwMDAwCisgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxzIHBlciBzZWNvbmQhCisgICAg
ICAgIHVuc2lnbmVkIHNob3J0IGFscGhhOworICAgICAgICBHc3RNYXBJbmZvIHNvdXJjZUluZm87
CisgICAgICAgIEdzdE1hcEluZm8gZGVzdGluYXRpb25JbmZvOworICAgICAgICBnc3RfYnVmZmVy
X21hcChidWZmZXIsICZzb3VyY2VJbmZvLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBjb25zdCBn
dWludDgqIHNvdXJjZSA9IGNvbnN0X2Nhc3Q8Z3VpbnQ4Kj4oc291cmNlSW5mby5kYXRhKTsKKyAg
ICAgICAgZ3N0X2J1ZmZlcl9tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvLCBHU1RfTUFQ
X1dSSVRFKTsKKyAgICAgICAgZ3VpbnQ4KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGd1aW50
OCo+KGRlc3RpbmF0aW9uSW5mby5kYXRhKTsKKworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHdpZHRoOyB5
KyspIHsKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgICAgICAgICAg
ICAgYWxwaGEgPSBzb3VyY2VbM107CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAo
c291cmNlWzBdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAg
ICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSBhbHBoYTsKKyNlbHNlCisgICAgICAgICAgICAg
ICAgYWxwaGEgPSBzb3VyY2VbMF07CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBh
bHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9IChzb3VyY2VbMV0gKiBhbHBo
YSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMl0gPSAoc291cmNl
WzJdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzNd
ID0gKHNvdXJjZVszXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyNlbmRpZgorICAgICAgICAgICAg
ICAgIHNvdXJjZSArPSA0OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uICs9IDQ7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZz
b3VyY2VJbmZvKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChuZXdCdWZmZXIsICZkZXN0aW5h
dGlvbkluZm8pOworCisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICAgICAg
YnVmZmVyID0gcHJpdi0+YnVmZmVyID0gbmV3QnVmZmVyOworICAgIH0KKworCisgICAgLy8gVGhp
cyBzaG91bGQgbGlrZWx5IHVzZSBhIGxvd2VyIHByaW9yaXR5LCBidXQgZ2xpYiBjdXJyZW50bHkg
c3RhcnZlcworICAgIC8vIGxvd2VyIHByaW9yaXR5IHNvdXJjZXMuCisgICAgLy8gU2VlOiBodHRw
czovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjEwODMwLgorICAgIHByaXYt
PnRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3ZpZGVvX3Np
bmtfdGltZW91dF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3N0X29iamVjdF9yZWYoc2luayksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3Vu
cmVmKSk7CisKKyAgICBnX2NvbmRfd2FpdChwcml2LT5kYXRhX2NvbmQsIHByaXYtPmJ1ZmZlcl9t
dXRleCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICByZXR1
cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bv
c2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJ
VF9WSURFT19TSU5LKG9iamVjdCk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9
IHNpbmstPnByaXY7CisKKyAgICBpZiAocHJpdi0+ZGF0YV9jb25kKSB7CisgICAgICAgIGdfY29u
ZF9jbGVhcihwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+
ZGF0YV9jb25kKTsKKyAgICAgICAgcHJpdi0+ZGF0YV9jb25kID0gMDsKKyAgICB9CisKKyAgICBp
ZiAocHJpdi0+YnVmZmVyX211dGV4KSB7CisgICAgICAgIGdfbXV0ZXhfY2xlYXIocHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICAgICAgV1RGOjpmYXN0RGVsZXRlKHByaXYtPmJ1ZmZlcl9tdXRleCk7
CisgICAgICAgIHByaXYtPmJ1ZmZlcl9tdXRleCA9IDA7CisgICAgfQorCisgICAgR19PQkpFQ1Rf
Q0xBU1MocGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB1
bmxvY2tCdWZmZXJNdXRleChXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2KQoreworICAgIGdf
bXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAgaWYgKHByaXYtPmJ1ZmZlcikg
eworICAgICAgICBnc3RfYnVmZmVyX3VucmVmKHByaXYtPmJ1ZmZlcik7CisgICAgICAgIHByaXYt
PmJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgcHJpdi0+dW5sb2NrZWQgPSB0cnVlOworCisgICAg
Z19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua191
bmxvY2soR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsg
PSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworCisgICAgdW5sb2NrQnVmZmVyTXV0ZXgoc2lu
ay0+cHJpdik7CisKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChHU1Rf
QkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssIChvYmplY3QpLCBUUlVFKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9wKEdzdEJhc2VTaW5rKiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSURFT19TSU5L
KG9iamVjdCktPnByaXY7CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
KyAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1
ZmZlcl9tdXRleCk7CisKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChH
U1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2tfc3RvcCwgKG9iamVjdCksIFRSVUUpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Npbmtfc3RvcChHc3RCYXNlU2luayogYmFzZV9z
aW5rKQoreworICAgIHVubG9ja0J1ZmZlck11dGV4KFdFQktJVF9WSURFT19TSU5LKGJhc2Vfc2lu
ayktPnByaXYpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0
X3ZpZGVvX3Npbmtfc3RhcnQoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sKKyAgICBXZWJLaXRW
aWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJp
djsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHByaXYtPnVu
bG9ja2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
KyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5r
X3Byb3Bvc2VfYWxsb2NhdGlvbihHc3RCYXNlU2luayogYmFzZV9zaW5rLCBHc3RRdWVyeSogcXVl
cnkpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYmFz
ZV9zaW5rKTsKKyAgICBHc3RDYXBzKiBjYXBzOworICAgIGdib29sZWFuIG5lZWRfcG9vbDsKKwor
ICAgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uKHF1ZXJ5LCAmY2FwcywgJm5lZWRfcG9vbCk7
CisKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGlmICghZ3N0
X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZzaW5rLT5wcml2LT5pbmZvLCBjYXBzKSkKKyAgICAgICAg
cmV0dXJuIEZBTFNFOworCisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEocXVlcnks
IEdTVF9WSURFT19NRVRBX0FQSSk7CisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEo
cXVlcnksIEdTVF9WSURFT19DUk9QX01FVEFfQVBJKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
c3RhdGljIHZvaWQgbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKEdDbG9zdXJlKiBjbG9zdXJlLCBH
VmFsdWUqIHJldHVyblZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGd1aW50IHBhcmFtZXRlcnNOdW1iZXIsIGNvbnN0IEdWYWx1ZSogcGFyYW1ldGVycywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBpbnZvY2F0aW9uSGludCwg
Z3BvaW50ZXIgbWFyc2hhbERhdGEpCit7CisgICAgdHlwZWRlZiB2b2lkICgqbWFyc2hhbGZ1bmNf
Vk9JRF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iamVjdCwgZ3BvaW50ZXIgYXJnMSwgZ3BvaW50
ZXIgZGF0YTIpOworICAgIG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QgY2FsbGJhY2s7Cisg
ICAgR0NDbG9zdXJlKiBjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsKKyAgICBncG9pbnRlciBk
YXRhMSwgZGF0YTI7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKHBhcmFtZXRlcnNOdW1iZXIgPT0g
Mik7CisKKyAgICBpZiAoR19DQ0xPU1VSRV9TV0FQX0RBVEEoY2xvc3VyZSkpIHsKKyAgICAgICAg
ZGF0YTEgPSBjbG9zdXJlLT5kYXRhOworICAgICAgICBkYXRhMiA9IGdfdmFsdWVfcGVla19wb2lu
dGVyKHBhcmFtZXRlcnMgKyAwKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkYXRhMSA9IGdfdmFs
dWVfcGVla19wb2ludGVyKHBhcmFtZXRlcnMgKyAwKTsKKyAgICAgICAgZGF0YTIgPSBjbG9zdXJl
LT5kYXRhOworICAgIH0KKyAgICBjYWxsYmFjayA9IChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JK
RUNUKSAobWFyc2hhbERhdGEgPyBtYXJzaGFsRGF0YSA6IGNjLT5jYWxsYmFjayk7CisKKyAgICBj
YWxsYmFjayhkYXRhMSwgZ192YWx1ZV9nZXRfYm94ZWQocGFyYW1ldGVycyArIDEpLCBkYXRhMik7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0Vmlk
ZW9TaW5rQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RCYXNlU2lua0NsYXNzKiBnc3RiYXNlX3Np
bmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xh
c3MqIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnc3Rf
ZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRfY2xhc3MsIGdzdF9zdGF0aWNf
cGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nf
c2V0X21ldGFkYXRhKGVsZW1lbnRfY2xhc3MsCisgICAgICAgICAgICAiV2ViS2l0IHZpZGVvIHNp
bmsiLAorICAgICAgICAgICAgIlNpbmsvVmlkZW8iLCAiU2VuZHMgdmlkZW8gZGF0YSBmcm9tIGEg
R1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCisgICAgICAgICAgICAiQWxw
IFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZhdGUpKTsKKworICAgIGdvYmplY3Rf
Y2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlOworCisgICAgZ3N0YmFz
ZV9zaW5rX2NsYXNzLT51bmxvY2sgPSB3ZWJraXRfdmlkZW9fc2lua191bmxvY2s7CisgICAgZ3N0
YmFzZV9zaW5rX2NsYXNzLT51bmxvY2tfc3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19z
dG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cmVuZGVyID0gd2Via2l0X3ZpZGVvX3Npbmtf
cmVuZGVyOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJlcm9sbCA9IHdlYmtpdF92aWRlb19z
aW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnN0b3AgPSB3ZWJraXRfdmlkZW9f
c2lua19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3RhcnQgPSB3ZWJraXRfdmlkZW9f
c2lua19zdGFydDsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9
IHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbjsKKworICAgIHdlYmtpdF92aWRl
b19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJyZXBhaW50
LXJlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFMX1JVTl9MQVNUIHwgR19T
SUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsIC8vIENsYXNzIG9mZnNldC4KKyAgICAgICAg
ICAgIDAsIC8vIEFjY3VtdWxhdG9yLgorICAgICAgICAgICAgMCwgLy8gQWNjdW11bGF0b3IgZGF0
YS4KKyAgICAgICAgICAgIG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCwgLy8gQ3VzdG9tIG1hcnNo
YWxsZXIuCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgLy8gUmV0dXJuIHR5cGUuCisgICAgICAg
ICAgICAxLCAvLyBPbmx5IG9uZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICBHU1RfVFlQRV9CVUZG
RVIpOworfQorCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoKQoreworICAgIHJl
dHVybiBHU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklERU9fU0lOSywgMCkp
OworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJ
T05fMSkKLS0gCjEuNy45LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129865</attachid>
            <date>2012-03-02 03:30:08 -0800</date>
            <delta_ts>2012-03-06 09:41:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>31667</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkM2VlYmRiMzc2MDhiZTIzYzE2YmJkNGUyMjI2MWM3OWQ3NGNkYTNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBNb24sIDI3IEZlYiAyMDEyIDIwOjI1OjM5ICswMTAwClN1YmplY3Q6IFtQQVRDSF0g
UGF0Y2gKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCAgIDM5ICsrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtICAgICAg
ICAgICAgICAgICB8ICAgIDEgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oICAgfCAgIDMwICstCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ0cubW0gICAgICAgICB8ICAgNzUgKysrKy0KIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgICAgIHwgICA2NiArKystCiAuLi4vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwICAgICAgICB8ICAgNTcgKystCiAuLi4vZ3N0cmVh
bWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICAgICB8ICAgMTAgKy0KIC4uLi9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCAgICAgIHwgICAgMiArCiAu
Li4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oICAgICAgICB8ICAgIDUg
KwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCAgICAgfCAg
Mzc0ICsrKysrKysrKysrKysrKysrKysrCiAxMCBmaWxlcyBjaGFuZ2VkLCA1ODkgaW5zZXJ0aW9u
cygrKSwgNzAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDA3N2QzYmEuLmZiNDllYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw0NCBAQAog
MjAxMi0wMi0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKKyAg
ICAgICAgW0dTdHJlYW1lcl0gMC4xMSB2aWRlby1zaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkIG5ldyB2
aWRlbyBzaW5rIGNvZGUgdG8gdGhlIGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oOiBjcmVhdGVJbWFnZSBBUEkKKyAgICAgICAgdXBk
YXRlIHNvIGltcGxlbWVudGF0aW9ucyBkb24ndCBuZWVkIHRvIHVzZQorICAgICAgICBnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZCBpbiBnc3QtMC4xMS4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZSk6CisgICAgICAg
IChJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyQ0cubW06CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3Ry
ZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lckNhaXJvLmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQu
Y3BwOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcDogQnVpbGQgb25seQorICAgICAgICBmb3IgZ3N0LTAuMTAuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oOiBObyBuZWVk
IGZvcgorICAgICAgICBHU3RyZWFtZXJHV29ybGQgaW4gdGhlIGdzdC0wLjExIHZpZGVvIHNpbmsu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
cjEuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcC4KKyAgICAgICAgKF9XZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyk6CisgICAg
ICAgICh3ZWJraXRfdmlkZW9fc2lua19yZW5kZXIpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Np
bmtfZGlzcG9zZSk6CisgICAgICAgICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3ZWJr
aXRfdmlkZW9fc2lua191bmxvY2spOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2Nr
X3N0b3ApOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Npbmtfc3RvcCk6CisgICAgICAgICh3ZWJr
aXRfdmlkZW9fc2lua19zdGFydCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19wcm9wb3Nl
X2FsbG9jYXRpb24pOgorICAgICAgICAobWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKToKKyAgICAg
ICAgKHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfbmV3KToKKworMjAxMi0wMi0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CisKICAgICAgICAgW0dUS10gQ3JvcCBzdXBwb3J0IGluIEJpdG1hcEltYWdlCiAg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTY1MQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA3MjBlYmI2Li43NGVmZmZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ1NDEsNiArNDU0MSw3IEBAIHdlYmNvcmVndGtf
c291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1BsYXRmb3JtVmlkZW9XaW5kb3cuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0
V2ViU291cmNlR1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvQ29sb3JHdGsuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
LmgKaW5kZXggYWI3OTliYS4uYjNlMzE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgogICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
QEAgLTIzLDIwICsyMywyMyBAQAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikK
IAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1
ZGUgPGdzdC92aWRlby92aWRlby5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBV
U0UoQ0FJUk8pCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLSNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgX0dz
dEJ1ZmZlciBHc3RCdWZmZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0Q2FwcyBHc3RDYXBzOwogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRTaXplOworY2xhc3MgQml0bWFwSW1hZ2U7CiAK
IGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3RyZWFtZXI+
IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVy
PiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqKTsKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RDYXBzKiBjYXBz
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVh
bWVyKGJ1ZmZlciwgY2FwcykpOworICAgICAgICB9CiAgICAgICAgIH5JbWFnZUdTdHJlYW1lcigp
OwogCiAgICAgICAgIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGltYWdlKCkKQEAgLTQ4LDE4ICs1
MSw3IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3Ry
ZWFtZXI+IHsKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IG1faW1h
Z2U7CiAKLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciom
LCBJbnRTaXplLCBjYWlyb19mb3JtYXRfdCYpOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkK
LSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUsIFFJbWFnZTo6Rm9y
bWF0KTsKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oTUFDKQotICAgICAgICBJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiwgSW50U2l6ZSk7Ci0jZW5kaWYKLQorICAgICAgICBJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiwgR3N0Q2FwcyopOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyQ0cubW0KaW5kZXggZmUwOTI4Yi4uMzQ1M2MzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
Q0cubW0KQEAgLTIyLDMyICsyMiw3NyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
CiAjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRl
by5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0
dmlkZW9tZXRhLmg+CisjZW5kaWYKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NS
ZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZm
ZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBi
dWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7CisKKyNpZmRlZiBHU1Rf
QVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVv
X2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpOworCisgICAgR3N0VmlkZW9Gb3JtYXQg
Zm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUKCZ2aWRlb0luZm8pOworICAgIGludCB3aWR0
aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pOworICAgIGludCBoZWlnaHQgPSBH
U1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyk7CisKKyAgICBHc3RNYXBJbmZvIGluZm87
CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICBj
b25zdCBVSW50OCogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUludDgqPihp
bmZvLmRhdGEpOworI2Vsc2UKICAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdz
dENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0VmlkZW9G
b3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMs
ICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fw
cyk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBnc3RfdmlkZW9fZm9ybWF0X3Bh
cnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKIAotICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQp
KSk7Ci19CisgICAgZ3VpbnQgYnVmZmVyU2l6ZSA9IEdTVF9CVUZGRVJfU0laRShidWZmZXIpOwor
ICAgIGNvbnN0IFVJbnQ4KiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50
OCo+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyNlbmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6
SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUpCi0gICAgOiBt
X2ltYWdlKDApCi17Ci0gICAgQVNTRVJUKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKKyAgICBB
U1NFUlQoYnVmZmVyU2l6ZSk7CiAKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0
Q0YsIENGRGF0YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBzdGF0aWNfY2FzdDxVSW50OCo+KEdT
VF9CVUZGRVJfREFUQShidWZmZXIpKSwgR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlciksIGtDRkFsbG9j
YXRvck51bGwpKTsKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBkYXRhKEFkb3B0Q0YsIENGRGF0
YUNyZWF0ZVdpdGhCeXRlc05vQ29weSgwLCBidWZmZXJEYXRhLCBidWZmZXJTaXplLCBrQ0ZBbGxv
Y2F0b3JOdWxsKSk7CiAgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBwcm92aWRlcihB
ZG9wdENGLCBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhDRkRhdGEoZGF0YS5nZXQoKSkpOwotICAg
IENHSW1hZ2VSZWYgZnJhbWVJbWFnZSA9IENHSW1hZ2VDcmVhdGUoc2l6ZS53aWR0aCgpLCBzaXpl
LmhlaWdodCgpLCA4LCAzMiwgc2l6ZS53aWR0aCgpKjQsIGRldmljZVJHQkNvbG9yU3BhY2VSZWYo
KSwKLSAgICAgICAga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhRmly
c3QsIHByb3ZpZGVyLmdldCgpLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7
CisKKyAgICBzaXplX3QgYml0c1BlckNvbXBvbmVudCA9IDg7CisgICAgc2l6ZV90IGJpdHNQZXJQ
aXhlbDsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3c7CisgICAgQ0dCaXRtYXBJbmZvIGJpdG1hcElu
Zm87CisKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgaWYgKGZvcm1h
dCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUxhc3Q7CisgICAgICAgIGJpdHNQ
ZXJQaXhlbCA9IDMyOworICAgICAgICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVs
c2UgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUgfCBr
Q0dJbWFnZUFscGhhTm9uZTsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5
dGVzUGVyUm93ID0gd2lkdGggKiAzOworICAgIH0KKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX0FSR0IpIHsKKyAgICAgICAgYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5
dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBoYUZpcnN0OworICAgICAgICBiaXRzUGVyUGl4ZWwg
PSAzMjsKKyAgICAgICAgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDQ7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgYml0bWFwSW5mbyA9IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnIHwga0NHSW1hZ2VBbHBo
YU5vbmU7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDI0OworICAgICAgICBieXRlc1BlclJvdyA9
IHdpZHRoICogMzsKKyAgICB9CisjZW5kaWYKKworICAgIENHSW1hZ2VSZWYgZnJhbWVJbWFnZSA9
IENHSW1hZ2VDcmVhdGUod2lkdGgsIGhlaWdodCwgYml0c1BlckNvbXBvbmVudCwgYml0c1BlclBp
eGVsLCBieXRlc1BlclJvdywgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLCBiaXRtYXBJbmZvLCBw
cm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwogICAg
IG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOworCisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJmluZm8pOworI2Vu
ZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4IDhiM2EwNzYuLmEzOWI1ZjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
ckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKQEAgLTIyLDQwICsyMiw3MiBAQAogCiAjaWYgRU5B
QkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNl
bmRpZgorCiAjaW5jbHVkZSAiR093blB0ci5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdl
R1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVy
OjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAg
OiBtX2ltYWdlKDApCiB7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0lu
Zm8gdmlkZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBj
YXBzKTsKKworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1B
VCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlk
ZW9JbmZvKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0lu
Zm8pOworCisgICAgR3N0TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZl
ciwgJm1hcEluZm8sIEdTVF9NQVBfUkVBRCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJE
YXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwSW5mby5kYXRhKTsKKyNl
bHNlCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKICAgICBpbnQgd2lkdGggPSAw
LCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1
ZmZlcik7CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zv
cm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAg
ICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAg
IGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2Fwcyhj
YXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOworI2VuZGlmCiAKICAgICBjYWlyb19mb3Jt
YXRfdCBjYWlyb0Zvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJH
QiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorI2lmIEdfQllURV9PUkRFUiA9
PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdS
QSkKKyAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOworICAgIGVsc2UK
KyAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZWxzZQorICAgIGlm
IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQogICAgICAgICBjYWlyb0Zvcm1hdCA9
IENBSVJPX0ZPUk1BVF9BUkdCMzI7CiAgICAgZWxzZQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENB
SVJPX0ZPUk1BVF9SR0IyNDsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFn
ZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGNhaXJvRm9ybWF0KSk7
Ci19CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVP
X0lORk9fUExBTkVfU1RSSURFKCZ2aWRlb0luZm8sIDApOworI2Vsc2UKKyAgICBpbnQgc3RyaWRl
ID0gY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3JtYXQsIHdpZHRoKTsKKyNl
bmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVy
LCBJbnRTaXplIHNpemUsIGNhaXJvX2Zvcm1hdF90JiBjYWlyb0Zvcm1hdCkKLSAgICA6IG1faW1h
Z2UoMCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgY2Fpcm9Gb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2Zvcm1hdF9zdHJpZGVfZm9yX3dpZHRoKGNhaXJv
Rm9ybWF0LCBzaXplLndpZHRoKCkpKTsKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShidWZmZXJEYXRhLCBjYWlyb0Zvcm1h
dCwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKwor
ICAgIEdzdFZpZGVvQ3JvcE1ldGEqIGNyb3BNZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fY3Jv
cF9tZXRhKGJ1ZmZlcik7CisgICAgaWYgKGNyb3BNZXRhKQorICAgICAgICBtX2ltYWdlLT5jcm9w
KEludFJlY3QoY3JvcE1ldGEtPngsIGNyb3BNZXRhLT55LCBjcm9wTWV0YS0+d2lkdGgsIGNyb3BN
ZXRhLT5oZWlnaHQpKTsKKworICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmbWFwSW5mbyk7
CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3Ry
ZWFtZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXJRdC5jcHAKaW5kZXggMTg4YzBiYi4uZGNjZmI2NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9J
bWFnZUdTdHJlYW1lclF0LmNwcApAQCAtMjMsMzcgKzIzLDU4IEBACiAjaWYgRU5BQkxFKFZJREVP
KSAmJiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIkdPd25QdHIuaCIKIAorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCisK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1Jl
ZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZl
ciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1
ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBpbnQgd2lkdGgg
PSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBz
KGJ1ZmZlcik7Ci0gICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVv
X2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAg
ICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAg
ICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQaXhtYXA7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9O
XzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21f
Y2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKIAotICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAg
IEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZv
KTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAg
ICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pOwogCisgICAg
R3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJmluZm8sIEdTVF9N
QVBfUkVBRCk7CisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PHVjaGFy
Kj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJl
dF9jYXN0PHVjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworICAgIGludCB3aWR0aCA9
IDAsIGhlaWdodCA9IDA7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OworICAgIGdzdF92aWRl
b19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOworI2Vu
ZGlmCiAgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX1JHQikKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFO
CisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCisgICAgICAgIGltYWdl
Rm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisgICAgZWxzZQogICAgICAgICBpbWFnZUZv
cm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX0FSR0IpCisgICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3Jt
YXRfQVJHQjMyOwogICAgIGVsc2UKLSAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1h
dF9SR0IzMjsKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7Cisj
ZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpLCBpbWFnZUZvcm1hdCkpOwotfQorICAgIFFJbWFnZSBpbWFn
ZShidWZmZXJEYXRhLCB3aWR0aCwgaGVpZ2h0LCBpbWFnZUZvcm1hdCk7CiAKLUltYWdlR1N0cmVh
bWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSwgUUlt
YWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgUVBpeG1h
cCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwotICAgIFFJbWFnZSBpbWFnZShHU1RfQlVGRkVSX0RB
VEEoYnVmZmVyKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBpbWFnZUZvcm1hdCk7CiAg
ICAgc3VyZmFjZS0+Y29udmVydEZyb21JbWFnZShpbWFnZSk7CiAgICAgbV9pbWFnZSA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoc3VyZmFjZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAg
IGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3Ry
ZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDZlZTQ5ODQuLjA1YmU4MzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0xNTA1LDcgKzE1MDUs
MTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VH
U3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gd2Vi
a2l0R3N0RWxlbWVudEdldFBhZENhcHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAg
aWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+
IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsK
ICAgICBpZiAoIWdzdEltYWdlKQogICAgICAgICByZXR1cm47CiAKQEAgLTE3NDAsNyArMTc0NCwx
MSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3JlYXRlR1NUUGxheUJpbigp
CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJ2aWRlby1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhtZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAiYXVkaW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0so
bWVkaWFQbGF5ZXJQcml2YXRlQXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKIAorI2lmbmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0X3ZpZGVv
X3NpbmtfbmV3KG1fZ3N0R1dvcmxkLmdldCgpKTsKKyNlbHNlCisgICAgbV93ZWJraXRWaWRlb1Np
bmsgPSB3ZWJraXRfdmlkZW9fc2lua19uZXcoKTsKKyNlbmRpZgogCiAgICAgZ19zaWduYWxfY29u
bmVjdChtX3dlYmtpdFZpZGVvU2luaywgInJlcGFpbnQtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyht
ZWRpYVBsYXllclByaXZhdGVSZXBhaW50Q2FsbGJhY2spLCB0aGlzKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9TaW5rR1N0cmVhbWVyLmNwcAppbmRleCA0MzYzMDM2Li4zMjIzNWFlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
VmlkZW9TaW5rR1N0cmVhbWVyLmNwcApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgogI2lmIEVOQUJMRShWSURFTykg
JiYgVVNFKEdTVFJFQU1FUikKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIAogI2luY2x1ZGUg
PGdsaWIuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CkBAIC0zOTgsNCArMzk5LDUgQEAgR3N0RWxl
bWVudCogd2Via2l0X3ZpZGVvX3NpbmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1lckdXb3JsZCogZ3N0
R1dvcmxkKQogICAgIHJldHVybiBlbGVtZW50OwogfQogCisjZW5kaWYgLy8gR1NUX0FQSV9WRVJT
SU9OXzEKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
ci5oCmluZGV4IDUwMTg1MGYuLjc5ZjdlZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
ci5oCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCiAjaW5j
bHVkZSA8Z2xpYi1vYmplY3QuaD4KICNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9zaW5rLmg+
CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CiAKIEdfQkVHSU5fREVDTFMKIApAQCAtNzUs
NyArNzYsMTEgQEAgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtDbGFzcyB7CiAKIAogR1R5cGUgICAg
ICAgd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOworI2lmbmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQogR3N0RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KFdl
YkNvcmU6OkdTdHJlYW1lckdXb3JsZCopOworI2Vsc2UKK0dzdEVsZW1lbnQgKndlYmtpdF92aWRl
b19zaW5rX25ldygpOworI2VuZGlmCiAKIEdfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIx
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1Np
bmtHU3RyZWFtZXIxLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRm
NmUyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwCkBAIC0wLDAgKzEsMzc0IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEw
LCAyMDExLCAyMDEyIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
Ky8qCisgKgorICogV2ViS2l0VmlkZW9TaW5rIGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0
aGF0IHRyaWdnZXJzCisgKiByZXBhaW50cyBpbiB0aGUgV2ViS2l0IEdTdHJlYW1lciBtZWRpYSBw
bGF5ZXIgZm9yIHRoZQorICogY3VycmVudCB2aWRlbyBidWZmZXIuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2lmIFVTRShHU1RSRUFNRVIpICYmIGRlZmluZWQoR1NUX0FQSV9WRVJTSU9O
XzEpCisjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnbGliLmg+
CisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEu
aD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+CisjaW5jbHVkZSA8Z3N0L3Zp
ZGVvL3ZpZGVvLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RBbGxvY0Jhc2UuaD4KKworLy8gQ0FJUk9f
Rk9STUFUX1JHQjI0IHVzZWQgdG8gcmVuZGVyIHRoZSB2aWRlbyBidWZmZXJzIGlzIGxpdHRsZS9i
aWcgZW5kaWFuIGRlcGVuZGFudC4KKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFO
CitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0gR1NUX1NUQVRJQ19Q
QURfVEVNUExBVEUoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxXQVlTLCBHU1RfU1RB
VElDX0NBUFMoR1NUX1ZJREVPX0NBUFNfTUFLRSgieyBCR1J4LCBCR1JBIH0iKSkpOworI2Vsc2UK
K3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BB
RF9URU1QTEFURSgic2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFU
SUNfQ0FQUyhHU1RfVklERU9fQ0FQU19NQUtFKCJ7IHhSR0IsIEFSR0IgfSIpKSk7CisjZW5kaWYK
KworCitHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnKTsK
KyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF92aWRlb19zaW5rX2RlYnVnCisKK2VudW0g
eworICAgIFJFUEFJTlRfUkVRVUVTVEVELAorICAgIExBU1RfU0lHTkFMCit9OworCitlbnVtIHsK
KyAgICBQUk9QXzAKK307CisKK3N0YXRpYyBndWludCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxz
W0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRl
IHsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKKyAgICBndWludCB0aW1lb3V0X2lkOworICAgIEdN
dXRleCogYnVmZmVyX211dGV4OworICAgIEdDb25kKiBkYXRhX2NvbmQ7CisgICAgR3N0VmlkZW9J
bmZvIGluZm87CisKKyAgICAvLyBJZiB0aGlzIGlzIFRSVUUgYWxsIHByb2Nlc3Npbmcgc2hvdWxk
IGZpbmlzaCBBU0FQCisgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGVyZSBjb3Vs
ZCBiZSBhIHJhY2UgYmV0d2VlbgorICAgIC8vIHVubG9jaygpIGFuZCByZW5kZXIoKSwgd2hlcmUg
dW5sb2NrKCkgd2lucywgc2lnbmFscyB0aGUKKyAgICAvLyBHQ29uZCwgdGhlbiByZW5kZXIoKSB0
cmllcyB0byByZW5kZXIgYSBmcmFtZSBhbHRob3VnaAorICAgIC8vIGV2ZXJ5dGhpbmcgZWxzZSBp
c24ndCBydW5uaW5nIGFueW1vcmUuIFRoaXMgd2lsbCBsZWFkCisgICAgLy8gdG8gZGVhZGxvY2tz
IGJlY2F1c2UgcmVuZGVyKCkgaG9sZHMgdGhlIHN0cmVhbSBsb2NrLgorICAgIC8vCisgICAgLy8g
UHJvdGVjdGVkIGJ5IHRoZSBidWZmZXIgbXV0ZXgKKyAgICBib29sIHVubG9ja2VkOworfTsKKwor
I2RlZmluZSB3ZWJraXRfdmlkZW9fc2lua19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRWaWRlb1NpbmssIHdlYmtpdF92aWRlb19zaW5rLCBH
U1RfVFlQRV9WSURFT19TSU5LLCBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfdmlkZW9f
c2lua19kZWJ1ZywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXRzaW5rIiwg
XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAid2Via2l0IHZpZGVvIHNpbmsiKSk7CisKKworc3RhdGljIHZvaWQgd2Via2l0X3Zp
ZGVvX3NpbmtfaW5pdChXZWJLaXRWaWRlb1NpbmsqIHNpbmspCit7CisgICAgV2ViS2l0VmlkZW9T
aW5rUHJpdmF0ZSogcHJpdjsKKworICAgIHNpbmstPnByaXYgPSBwcml2ID0gR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKHNpbmssIFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVv
U2lua1ByaXZhdGUpOworICAgIHByaXYtPmRhdGFfY29uZCA9IFdURjo6ZmFzdE5ldzxHQ29uZD4o
KTsKKyAgICBnX2NvbmRfaW5pdChwcml2LT5kYXRhX2NvbmQpOworICAgIHByaXYtPmJ1ZmZlcl9t
dXRleCA9IFdURjo6ZmFzdE5ldzxHTXV0ZXg+KCk7CisgICAgZ19tdXRleF9pbml0KHByaXYtPmJ1
ZmZlcl9tdXRleCk7CisgICAgZ3N0X3ZpZGVvX2luZm9faW5pdCgmcHJpdi0+aW5mbyk7Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0X2Z1bmMoZ3BvaW50ZXIg
ZGF0YSkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSByZWludGVycHJldF9jYXN0PFdl
YktpdFZpZGVvU2luayo+KGRhdGEpOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYg
PSBzaW5rLT5wcml2OworICAgIEdzdEJ1ZmZlciogYnVmZmVyOworCisgICAgZ19tdXRleF9sb2Nr
KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyOworICAgIHBy
aXYtPmJ1ZmZlciA9IDA7CisgICAgcHJpdi0+dGltZW91dF9pZCA9IDA7CisKKyAgICBpZiAoIWJ1
ZmZlciB8fCBwcml2LT51bmxvY2tlZCB8fCBVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIp
KSkgeworICAgICAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIGdf
bXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBGQUxTRTsK
KyAgICB9CisKKyAgICBnX3NpZ25hbF9lbWl0KHNpbmssIHdlYmtpdF92aWRlb19zaW5rX3NpZ25h
bHNbUkVQQUlOVF9SRVFVRVNURURdLCAwLCBidWZmZXIpOworICAgIGdzdF9idWZmZXJfdW5yZWYo
YnVmZmVyKTsKKyAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRl
eF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIHJldHVybiBGQUxTRTsKK30KKwor
c3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKEdzdEJhc2VTaW5r
KiBic2luaywgR3N0QnVmZmVyKiBidWZmZXIpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5r
ID0gV0VCS0lUX1ZJREVPX1NJTksoYnNpbmspOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUq
IHByaXYgPSBzaW5rLT5wcml2OworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRl
eCk7CisKKyAgICBpZiAocHJpdi0+dW5sb2NrZWQpIHsKKyAgICAgICAgZ19tdXRleF91bmxvY2so
cHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0K
KworICAgIHByaXYtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmKGJ1ZmZlcik7CisKKyAgICBHc3RW
aWRlb0ZyYW1lIGZyYW1lOworICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1lX21hcCgmZnJhbWUsICZw
cml2LT5pbmZvLCBidWZmZXIsIEdTVF9NQVBfUkVBRCkpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91
bnJlZihidWZmZXIpOworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgp
OworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgfQorCisgICAgR3N0VmlkZW9G
b3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVPX0ZSQU1FX0ZPUk1BVCgmZnJhbWUpOworICAgIGludCB3
aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCgmZnJhbWUpOworICAgIGludCBoZWlnaHQgPSBH
U1RfVklERU9fRlJBTUVfSEVJR0hUKCZmcmFtZSk7CisKKyAgICBnc3RfdmlkZW9fZnJhbWVfdW5t
YXAoJmZyYW1lKTsKKworICAgIC8vIENhaXJvJ3MgQVJHQiBoYXMgcHJlLW11bHRpcGxpZWQgYWxw
aGEgd2hpbGUgR1N0cmVhbWVyJ3MgZG9lc24ndC4KKyAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdG8g
Q2Fpcm8ncyBBUkdCLgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8
IGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpIHsKKyAgICAgICAgLy8gQmVjYXVzZSBH
c3RCYXNlU2luazo6cmVuZGVyKCkgb25seSBvd25zIHRoZSBidWZmZXIgcmVmZXJlbmNlIGluIHRo
ZQorICAgICAgICAvLyBtZXRob2Qgc2NvcGUgd2UgY2FuJ3QgdXNlIGdzdF9idWZmZXJfbWFrZV93
cml0YWJsZSgpIGhlcmUuIEFsc28KKyAgICAgICAgLy8gVGhlIGJ1ZmZlciBjb250ZW50IHNob3Vs
ZCBub3QgYmUgY2hhbmdlZCBoZXJlIGJlY2F1c2UgdGhlIHNhbWUgYnVmZmVyCisgICAgICAgIC8v
IGNvdWxkIGJlIHBhc3NlZCBtdWx0aXBsZSB0aW1lcyB0byB0aGlzIG1ldGhvZCAoaW4gdGhlb3J5
KS4KKyAgICAgICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVy
KTsKKyAgICAgICAgR3N0QnVmZmVyKiBuZXdCdWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxs
b2MoYnVmZmVyU2l6ZSk7CisKKyAgICAgICAgLy8gQ2hlY2sgaWYgYWxsb2NhdGlvbiBmYWlsZWQu
CisgICAgICAgIGlmIChVTkxJS0VMWSghbmV3QnVmZmVyKSkgeworICAgICAgICAgICAgZ19tdXRl
eF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfRkxP
V19FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1
ZmZlciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJf
Q09QWV9NRVRBREFUQSksIDAsIGJ1ZmZlclNpemUpOworCisgICAgICAgIC8vIFdlIGRvbid0IHVz
ZSBDb2xvcjo6cHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoKSBoZXJlIGJlY2F1c2UKKyAgICAg
ICAgLy8gb25lIGZ1bmN0aW9uIGNhbGwgcGVyIHZpZGVvIHBpeGVsIGlzIGp1c3QgdG9vIGV4cGVu
c2l2ZToKKyAgICAgICAgLy8gRm9yIDcyMHAvUEFMIGZvciBleGFtcGxlIHRoaXMgbWVhbnMgMTI4
MCo3MjAqMjU9MjMwNDAwMDAKKyAgICAgICAgLy8gZnVuY3Rpb24gY2FsbHMgcGVyIHNlY29uZCEK
KyAgICAgICAgdW5zaWduZWQgc2hvcnQgYWxwaGE7CisgICAgICAgIEdzdE1hcEluZm8gc291cmNl
SW5mbzsKKyAgICAgICAgR3N0TWFwSW5mbyBkZXN0aW5hdGlvbkluZm87CisgICAgICAgIGdzdF9i
dWZmZXJfbWFwKGJ1ZmZlciwgJnNvdXJjZUluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGNv
bnN0IGd1aW50OCogc291cmNlID0gY29uc3RfY2FzdDxndWludDgqPihzb3VyY2VJbmZvLmRhdGEp
OworICAgICAgICBnc3RfYnVmZmVyX21hcChuZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8sIEdT
VF9NQVBfV1JJVEUpOworICAgICAgICBndWludDgqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8
Z3VpbnQ4Kj4oZGVzdGluYXRpb25JbmZvLmRhdGEpOworCisgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgaGVpZ2h0OyB4KyspIHsKKyAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgd2lk
dGg7IHkrKykgeworI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICAgICAg
ICAgICAgICBhbHBoYSA9IHNvdXJjZVszXTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsw
XSA9IChzb3VyY2VbMF0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVz
dGluYXRpb25bMV0gPSAoc291cmNlWzFdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uWzJdID0gKHNvdXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblszXSA9IGFscGhhOworI2Vsc2UKKyAgICAgICAg
ICAgICAgICBhbHBoYSA9IHNvdXJjZVswXTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsw
XSA9IGFscGhhOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAq
IGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChz
b3VyY2VbMl0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25bM10gPSAoc291cmNlWzNdICogYWxwaGEgKyAxMjgpIC8gMjU1OworI2VuZGlmCisgICAgICAg
ICAgICAgICAgc291cmNlICs9IDQ7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gKz0gNDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZl
ciwgJnNvdXJjZUluZm8pOworICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG5ld0J1ZmZlciwgJmRl
c3RpbmF0aW9uSW5mbyk7CisKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAg
ICAgICBidWZmZXIgPSBwcml2LT5idWZmZXIgPSBuZXdCdWZmZXI7CisgICAgfQorCisKKyAgICAv
LyBUaGlzIHNob3VsZCBsaWtlbHkgdXNlIGEgbG93ZXIgcHJpb3JpdHksIGJ1dCBnbGliIGN1cnJl
bnRseSBzdGFydmVzCisgICAgLy8gbG93ZXIgcHJpb3JpdHkgc291cmNlcy4KKyAgICAvLyBTZWU6
IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTA4MzAuCisgICAg
cHJpdi0+dGltZW91dF9pZCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfdmlk
ZW9fc2lua190aW1lb3V0X2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnc3Rfb2JqZWN0X3JlZihzaW5rKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdzdF9vYmpl
Y3RfdW5yZWYpKTsKKworICAgIGdfY29uZF93YWl0KHByaXYtPmRhdGFfY29uZCwgcHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAg
IHJldHVybiBHU1RfRkxPV19PSzsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3Npbmtf
ZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0g
V0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBw
cml2ID0gc2luay0+cHJpdjsKKworICAgIGlmIChwcml2LT5kYXRhX2NvbmQpIHsKKyAgICAgICAg
Z19jb25kX2NsZWFyKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIFdURjo6ZmFzdERlbGV0ZShw
cml2LT5kYXRhX2NvbmQpOworICAgICAgICBwcml2LT5kYXRhX2NvbmQgPSAwOworICAgIH0KKwor
ICAgIGlmIChwcml2LT5idWZmZXJfbXV0ZXgpIHsKKyAgICAgICAgZ19tdXRleF9jbGVhcihwcml2
LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+YnVmZmVyX211
dGV4KTsKKyAgICAgICAgcHJpdi0+YnVmZmVyX211dGV4ID0gMDsKKyAgICB9CisKKyAgICBHX09C
SkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2
b2lkIHVubG9ja0J1ZmZlck11dGV4KFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYpCit7Cisg
ICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICBpZiAocHJpdi0+YnVm
ZmVyKSB7CisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYocHJpdi0+YnVmZmVyKTsKKyAgICAgICAg
cHJpdi0+YnVmZmVyID0gMDsKKyAgICB9CisKKyAgICBwcml2LT51bmxvY2tlZCA9IHRydWU7CisK
KyAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7CisgICAgZ19tdXRleF91bmxvY2so
cHJpdi0+YnVmZmVyX211dGV4KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19z
aW5rX3VubG9jayhHc3RCYXNlU2luayogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVvU2luayog
c2luayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7CisKKyAgICB1bmxvY2tCdWZmZXJNdXRl
eChzaW5rLT5wcml2KTsKKworICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxU
KEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVubG9jaywgKG9iamVjdCksIFRSVUUpOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3AoR3N0QmFzZVNpbmsqIG9i
amVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVP
X1NJTksob2JqZWN0KS0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0
ZXgpOworICAgIHByaXYtPnVubG9ja2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJp
di0+YnVmZmVyX211dGV4KTsKKworICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZB
VUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVubG9ja19zdG9wLCAob2JqZWN0KSwgVFJVRSk7Cit9
CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19zdG9wKEdzdEJhc2VTaW5rKiBi
YXNlX3NpbmspCit7CisgICAgdW5sb2NrQnVmZmVyTXV0ZXgoV0VCS0lUX1ZJREVPX1NJTksoYmFz
ZV9zaW5rKS0+cHJpdik7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfdmlkZW9fc2lua19zdGFydChHc3RCYXNlU2luayogYmFzZV9zaW5rKQoreworICAgIFdl
YktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3Npbmsp
LT5wcml2OworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJp
di0+dW5sb2NrZWQgPSBmYWxzZTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0
ZXgpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVv
X3NpbmtfcHJvcG9zZV9hbGxvY2F0aW9uKEdzdEJhc2VTaW5rKiBiYXNlX3NpbmssIEdzdFF1ZXJ5
KiBxdWVyeSkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lO
SyhiYXNlX3NpbmspOworICAgIEdzdENhcHMqIGNhcHM7CisgICAgZ2Jvb2xlYW4gbmVlZF9wb29s
OworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24ocXVlcnksICZjYXBzLCAmbmVlZF9w
b29sKTsKKworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYg
KCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnNpbmstPnByaXYtPmluZm8sIGNhcHMpKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShx
dWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUpOworICAgIGdzdF9xdWVyeV9hZGRfYWxsb2Nh
dGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklERU9fQ1JPUF9NRVRBX0FQSV9UWVBFKTsKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKEdDbG9z
dXJlKiBjbG9zdXJlLCBHVmFsdWUqIHJldHVyblZhbHVlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGd1aW50IHBhcmFtZXRlcnNOdW1iZXIsIGNvbnN0IEdWYWx1ZSogcGFy
YW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncG9pbnRlciBp
bnZvY2F0aW9uSGludCwgZ3BvaW50ZXIgbWFyc2hhbERhdGEpCit7CisgICAgdHlwZWRlZiB2b2lk
ICgqbWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iamVjdCwgZ3BvaW50
ZXIgYXJnMSwgZ3BvaW50ZXIgZGF0YTIpOworICAgIG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpF
Q1QgY2FsbGJhY2s7CisgICAgR0NDbG9zdXJlKiBjYyA9IChHQ0Nsb3N1cmUgKikgY2xvc3VyZTsK
KyAgICBncG9pbnRlciBkYXRhMSwgZGF0YTI7CisKKyAgICBnX3JldHVybl9pZl9mYWlsKHBhcmFt
ZXRlcnNOdW1iZXIgPT0gMik7CisKKyAgICBpZiAoR19DQ0xPU1VSRV9TV0FQX0RBVEEoY2xvc3Vy
ZSkpIHsKKyAgICAgICAgZGF0YTEgPSBjbG9zdXJlLT5kYXRhOworICAgICAgICBkYXRhMiA9IGdf
dmFsdWVfcGVla19wb2ludGVyKHBhcmFtZXRlcnMgKyAwKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBkYXRhMSA9IGdfdmFsdWVfcGVla19wb2ludGVyKHBhcmFtZXRlcnMgKyAwKTsKKyAgICAgICAg
ZGF0YTIgPSBjbG9zdXJlLT5kYXRhOworICAgIH0KKyAgICBjYWxsYmFjayA9IChtYXJzaGFsZnVu
Y19WT0lEX19NSU5JT0JKRUNUKSAobWFyc2hhbERhdGEgPyBtYXJzaGFsRGF0YSA6IGNjLT5jYWxs
YmFjayk7CisKKyAgICBjYWxsYmFjayhkYXRhMSwgZ192YWx1ZV9nZXRfYm94ZWQocGFyYW1ldGVy
cyArIDEpLCBkYXRhMik7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2NsYXNz
X2luaXQoV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyog
Z29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RCYXNlU2lua0Ns
YXNzKiBnc3RiYXNlX3NpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNzKTsKKyAg
ICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFz
cyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRfY2xh
c3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisgICAgZ3N0
X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKGVsZW1lbnRfY2xhc3MsCisgICAgICAgICAgICAi
V2ViS2l0IHZpZGVvIHNpbmsiLAorICAgICAgICAgICAgIlNpbmsvVmlkZW8iLCAiU2VuZHMgdmlk
ZW8gZGF0YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCisg
ICAgICAgICAgICAiQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKKworICAgIGdfdHlwZV9j
bGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZhdGUpKTsK
KworICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3Nl
OworCisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxvY2sgPSB3ZWJraXRfdmlkZW9fc2lua191
bmxvY2s7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxvY2tfc3RvcCA9IHdlYmtpdF92aWRl
b19zaW5rX3VubG9ja19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cmVuZGVyID0gd2Vi
a2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJlcm9sbCA9
IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnN0b3Ag
PSB3ZWJraXRfdmlkZW9fc2lua19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3RhcnQg
PSB3ZWJraXRfdmlkZW9fc2lua19zdGFydDsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnByb3Bv
c2VfYWxsb2NhdGlvbiA9IHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbjsKKwor
ICAgIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWdu
YWxfbmV3KCJyZXBhaW50LXJlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
UyhrbGFzcyksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFM
X1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsIC8vIENsYXNzIG9m
ZnNldC4KKyAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxhdG9yLgorICAgICAgICAgICAgMCwgLy8g
QWNjdW11bGF0b3IgZGF0YS4KKyAgICAgICAgICAgIG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCwg
Ly8gQ3VzdG9tIG1hcnNoYWxsZXIuCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgLy8gUmV0dXJu
IHR5cGUuCisgICAgICAgICAgICAxLCAvLyBPbmx5IG9uZSBwYXJhbWV0ZXIuCisgICAgICAgICAg
ICBHU1RfVFlQRV9CVUZGRVIpOworfQorCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19u
ZXcoKQoreworICAgIHJldHVybiBHU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
VklERU9fU0lOSywgMCkpOworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5l
ZChHU1RfQVBJX1ZFUlNJT05fMSkKLS0gCjEuNy45LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130394</attachid>
            <date>2012-03-06 09:41:15 -0800</date>
            <delta_ts>2012-04-16 06:18:15 -0700</delta_ts>
            <desc>video-sink</desc>
            <filename>video-sink.patch</filename>
            <type>text/plain</type>
            <size>32257</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkM2UyZmYxMDMyZjg4ZjliNmEzOGI5NTg3NDI5NThlYzk1N2ZiMDQzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDYgTWFyIDIwMTIgMTA6MTI6MjcgKzAxMDAKU3ViamVjdDogW1BBVENIXSB2
aWRlby1zaW5rCgotLS0KIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAzOSArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAg
ICAgICAgICAgICAgICAgfCAgICAxICsKIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXIuaCAgIHwgICA0MSArKy0KIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJDRy5tbSAgICAgICAgIHwgICA3NSArKysrLQogLi4uL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDY2ICsrKy0KIC4uLi9ncmFwaGlj
cy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgICAgICAgIHwgICA1NyArKy0KIC4uLi9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgIHwgICAxMiArLQog
Li4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwICAgICAgfCAgICAy
ICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggICAgICAgIHwg
ICAgNSArCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwICAg
ICB8ICAzNzQgKysrKysrKysrKysrKysrKysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDYwMCBpbnNl
cnRpb25zKCspLCA3MiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAK
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggNTM3NTQxYS4uZGI0NDU1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQy
IEBACisyMDEyLTAzLTA2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1N0cmVhbWVyXSAwLjExIHZpZGVvLXNpbmsKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGQg
bmV3IHZpZGVvIHNpbmsgY29kZSB0byB0aGUgYnVpbGQuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmg6IGNyZWF0ZUltYWdlIEFQSQorICAgICAg
ICB1cGRhdGUgc28gaW1wbGVtZW50YXRpb25zIGRvbid0IG5lZWQgdG8gdXNlCisgICAgICAgIGdz
dF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGluIGdzdC0w
LjExLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKToKKyAg
ICAgICAgKEltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFn
ZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdl
R1N0cmVhbWVyQ2Fpcm8uY3BwOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVh
bWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFt
ZXJRdC5jcHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1Np
bmtHU3RyZWFtZXIuY3BwOiBCdWlsZCBvbmx5CisgICAgICAgIGZvciBnc3QtMC4xMC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmg6IE5v
IG5lZWQgZm9yCisgICAgICAgIEdTdHJlYW1lckdXb3JsZCBpbiB0aGUgZ3N0LTAuMTEgdmlkZW8g
c2luay4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyMS5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwLgorICAgICAgICAoX1dlYktpdFZpZGVv
U2lua1ByaXZhdGUpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jKToK
KyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcik6CisgICAgICAgICh3ZWJraXRfdmlk
ZW9fc2lua19kaXNwb3NlKToKKyAgICAgICAgKHVubG9ja0J1ZmZlck11dGV4KToKKyAgICAgICAg
KHdlYmtpdF92aWRlb19zaW5rX3VubG9jayk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua191
bmxvY2tfc3RvcCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19zdG9wKToKKyAgICAgICAg
KHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0KToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3By
b3Bvc2VfYWxsb2NhdGlvbik6CisgICAgICAgIChtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QpOgor
ICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRf
dmlkZW9fc2lua19uZXcpOgorCiAyMDEyLTAzLTAyICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEluc3BlY3RvckNvdW50ZXJz
IG1lY2hhbmlzbSBzaG91bGQgYmUgdGhyZWFkLXNhZmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IGQzNTQyNzIuLmEzNzM4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtNDU1MSw2ICs0NTUxLDcgQEAgd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvUGxhdGZvcm1WaWRlb1dpbmRvdy5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2Vi
U291cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Db2xvckd0ay5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAppbmRleCBhYjc5OWJhLi45ZjE2
NzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAy
MDEyIElnYWxpYSBTLkwKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMjAgKzIzLDI0IEBACiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lm
IFVTRShDQUlSTykKLSNpbmNsdWRlIDxjYWlyby5oPgotI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBf
R3N0QnVmZmVyIEdzdEJ1ZmZlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RDYXBzIEdzdENhcHM7CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFNpemU7CitjbGFzcyBCaXRtYXBJbWFnZTsK
IAogY2xhc3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUdTdHJlYW1l
cj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFt
ZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZlciopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNh
cHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3Ry
ZWFtZXIoYnVmZmVyLCBjYXBzKSk7CisgICAgICAgIH0KICAgICAgICAgfkltYWdlR1N0cmVhbWVy
KCk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gaW1hZ2UoKQpAQCAtNDUsMjEg
KzQ5LDE4IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VH
U3RyZWFtZXI+IHsKICAgICAgICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogICAgICAgICB9
CiAKKyAgICAgICAgdm9pZCBzZXRDcm9wUmVjdChGbG9hdFJlY3QgcmVjdCkgeyBtX2Nyb3BSZWN0
ID0gcmVjdDsgfQorICAgICAgICBGbG9hdFJlY3QgcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmICghbV9jcm9wUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdChtX2Nyb3BSZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwg
LTEsIC0xKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEJpdG1h
cEltYWdlPiBtX2ltYWdlOwotCi0jaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRpZgotCi0jaWYg
UExBVEZPUk0oUVQpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXpl
LCBRSW1hZ2U6OkZvcm1hdCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAg
SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUpOwotI2VuZGlmCi0KKyAgICAgICAg
RmxvYXRSZWN0IG1fY3JvcFJlY3Q7CisgICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciom
LCBHc3RDYXBzKik7CiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQppbmRl
eCBmZTA5MjhiLi4zNDUzYzM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQpAQCAtMjIs
MzIgKzIyLDc3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNsdWRlICJJ
bWFnZUdTdHJlYW1lci5oIgogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKyNp
bmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4K
KyNlbmRpZgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdT
dHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQor
SW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgR3N0Q2Fw
cyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
CisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJnZpZGVvSW5mbywgY2Fwcyk7CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1Rf
VklERU9fSU5GT19GT1JNQVQoJnZpZGVvSW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVP
X0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19JTkZP
X0hFSUdIVCgmdmlkZW9JbmZvKTsKKworICAgIEdzdE1hcEluZm8gaW5mbzsKKyAgICBnc3RfYnVm
ZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQpOworICAgIGNvbnN0IFVJbnQ4KiBi
dWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBVSW50OCo+KGluZm8uZGF0YSk7Cisj
ZWxzZQogICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9
IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7
Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAg
cmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBz
LCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCkpKTsKLX0KKyAgICBn
dWludCBidWZmZXJTaXplID0gR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcik7CisgICAgY29uc3QgVUlu
dDgqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IFVJbnQ4Kj4oR1NUX0JVRkZF
Ul9EQVRBKGJ1ZmZlcikpOworI2VuZGlmCiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSkKLSAgICA6IG1faW1hZ2UoMCkKLXsK
LSAgICBBU1NFUlQoR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikpOworICAgIEFTU0VSVChidWZmZXJT
aXplKTsKIAotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3Jl
YXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oR1NUX0JVRkZFUl9EQVRB
KGJ1ZmZlcikpLCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxsb2NhdG9yTnVsbCkpOwor
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5KDAsIGJ1ZmZlckRhdGEsIGJ1ZmZlclNpemUsIGtDRkFsbG9jYXRvck51bGwpKTsK
ICAgICBSZXRhaW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IHByb3ZpZGVyKEFkb3B0Q0YsIENHRGF0
YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShkYXRhLmdldCgpKSk7Ci0gICAgQ0dJbWFnZVJlZiBm
cmFtZUltYWdlID0gQ0dJbWFnZUNyZWF0ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIDgs
IDMyLCBzaXplLndpZHRoKCkqNCwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAotICAgICAgICBr
Q0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFGaXJzdCwgcHJvdmlkZXIu
Z2V0KCksIDAsIGZhbHNlLCBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKworICAgIHNpemVf
dCBiaXRzUGVyQ29tcG9uZW50ID0gODsKKyAgICBzaXplX3QgYml0c1BlclBpeGVsOworICAgIHNp
emVfdCBieXRlc1BlclJvdzsKKyAgICBDR0JpdG1hcEluZm8gYml0bWFwSW5mbzsKKworI2lmIEdf
QllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURF
T19GT1JNQVRfQkdSQSkgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVy
MzJMaXR0bGUgfCBrQ0dJbWFnZUFscGhhTGFzdDsKKyAgICAgICAgYml0c1BlclBpeGVsID0gMzI7
CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0OworICAgIH0gZWxzZSB7CisgICAgICAg
IGJpdG1hcEluZm8gPSBrQ0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSB8IGtDR0ltYWdlQWxwaGFO
b25lOworICAgICAgICBiaXRzUGVyUGl4ZWwgPSAyNDsKKyAgICAgICAgYnl0ZXNQZXJSb3cgPSB3
aWR0aCAqIDM7CisgICAgfQorI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JN
QVRfQVJHQikgeworICAgICAgICBiaXRtYXBJbmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcg
fCBrQ0dJbWFnZUFscGhhRmlyc3Q7CisgICAgICAgIGJpdHNQZXJQaXhlbCA9IDMyOworICAgICAg
ICBieXRlc1BlclJvdyA9IHdpZHRoICogNDsKKyAgICB9IGVsc2UgeworICAgICAgICBiaXRtYXBJ
bmZvID0ga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcgfCBrQ0dJbWFnZUFscGhhTm9uZTsKKyAgICAg
ICAgYml0c1BlclBpeGVsID0gMjQ7CisgICAgICAgIGJ5dGVzUGVyUm93ID0gd2lkdGggKiAzOwor
ICAgIH0KKyNlbmRpZgorCisgICAgQ0dJbWFnZVJlZiBmcmFtZUltYWdlID0gQ0dJbWFnZUNyZWF0
ZSh3aWR0aCwgaGVpZ2h0LCBiaXRzUGVyQ29tcG9uZW50LCBiaXRzUGVyUGl4ZWwsIGJ5dGVzUGVy
Um93LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksIGJpdG1hcEluZm8sIHByb3ZpZGVyLmdldCgp
LCAwLCBmYWxzZSwga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CiAgICAgbV9pbWFnZSA9IEJp
dG1hcEltYWdlOjpjcmVhdGUoZnJhbWVJbWFnZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05f
MQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7CisjZW5kaWYKIH0KIAogSW1h
Z2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
YWlyby5jcHAKaW5kZXggOGIzYTA3Ni4uNDdiYmQyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJl
YW1lckNhaXJvLmNwcApAQCAtMjIsNDAgKzIyLDcyIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYm
IFVTRShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCisKICNpbmNs
dWRlICJHT3duUHRyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6OmNy
ZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVh
bWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkK
IHsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyB2aWRlb0luZm87
CisgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZ2aWRlb0luZm8sIGNhcHMpOworCisgICAg
R3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUKCZ2aWRlb0luZm8p
OworICAgIGludCB3aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pOworICAg
IGludCBoZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyk7CisKKyAgICBH
c3RNYXBJbmZvIG1hcEluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmbWFwSW5mbywg
R1NUX01BUF9SRUFEKTsKKworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVy
cHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBJbmZvLmRhdGEpOworI2Vsc2UKKyAgICB1bnNp
Z25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
R1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOwogICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7
Ci0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAgICBH
c3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2Nh
cHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191
bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5y
ZWYoY2Fwcyk7CisgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQs
ICZ3aWR0aCwgJmhlaWdodCk7CisjZW5kaWYKIAogICAgIGNhaXJvX2Zvcm1hdF90IGNhaXJvRm9y
bWF0OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1hdCA9
PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VO
RElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorICAgICAgICBj
YWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CisgICAgZWxzZQorICAgICAgICBjYWly
b0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IyNDsKKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX0FSR0IpCiAgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJUk9fRk9STUFU
X0FSR0IzMjsKICAgICBlbHNlCiAgICAgICAgIGNhaXJvRm9ybWF0ID0gQ0FJUk9fRk9STUFUX1JH
QjI0OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1
ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgY2Fpcm9Gb3JtYXQpKTsKLX0KKyNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorICAgIGludCBzdHJpZGUgPSBHU1RfVklERU9fSU5GT19QTEFORV9T
VFJJREUoJnZpZGVvSW5mbywgMCk7CisjZWxzZQorICAgIGludCBzdHJpZGUgPSBjYWlyb19mb3Jt
YXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgd2lkdGgpOworI2VuZGlmCiAKLUltYWdl
R1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6
ZSwgY2Fpcm9fZm9ybWF0X3QmIGNhaXJvRm9ybWF0KQotICAgIDogbV9pbWFnZSgwKQotewotICAg
IGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zv
cl9kYXRhKEdTVF9CVUZGRVJfREFUQShidWZmZXIpLCBjYWlyb0Zvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2Fpcm9fZm9ybWF0X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3JtYXQsIHNpemUu
d2lkdGgoKSkpOworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKGJ1ZmZlckRhdGEsIGNhaXJvRm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBzdHJpZGUpOwogICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSA9
PSBDQUlST19TVEFUVVNfU1VDQ0VTUyk7CiAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVh
dGUoc3VyZmFjZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorCisgICAgR3N0VmlkZW9D
cm9wTWV0YSogY3JvcE1ldGEgPSBnc3RfYnVmZmVyX2dldF92aWRlb19jcm9wX21ldGEoYnVmZmVy
KTsKKyAgICBpZiAoY3JvcE1ldGEpCisgICAgICAgIHNldENyb3BSZWN0KEZsb2F0UmVjdChjcm9w
TWV0YS0+eCwgY3JvcE1ldGEtPnksIGNyb3BNZXRhLT53aWR0aCwgY3JvcE1ldGEtPmhlaWdodCkp
OworCisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXBJbmZvKTsKKyNlbmRpZgogfQog
CiBJbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
clF0LmNwcAppbmRleCAxODhjMGJiLi5kY2NmYjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
UXQuY3BwCkBAIC0yMywzNyArMjMsNTggQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RS
RUFNRVIpCiAjaW5jbHVkZSAiR093blB0ci5oIgogCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNp
bmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5kaWYKKwogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0
cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJ
bWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBHc3RDYXBz
KiBjYXBzKQorICAgIDogbV9pbWFnZSgwKQogewotICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9
IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKLSAg
ICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNl
X2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fw
c191bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIFFQaXhtYXAqIHN1
cmZhY2UgPSBuZXcgUVBpeG1hcDsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZp
ZGVvSW5mbyB2aWRlb0luZm87CisgICAgZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZ2aWRlb0lu
Zm8sIGNhcHMpOwogCi0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisgICAgR3N0VmlkZW9Gb3Jt
YXQgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUKCZ2aWRlb0luZm8pOworICAgIGludCB3
aWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRIKCZ2aWRlb0luZm8pOworICAgIGludCBoZWlnaHQg
PSBHU1RfVklERU9fSU5GT19IRUlHSFQoJnZpZGVvSW5mbyk7CiAKKyAgICBHc3RNYXBJbmZvIGlu
Zm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsKKyAg
ICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihpbmZvLmRhdGEp
OworI2Vsc2UKKyAgICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIq
PihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7CisgICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0g
MDsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7CisgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJz
ZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCk7CisjZW5kaWYKICAgICBRSW1h
Z2U6OkZvcm1hdCBpbWFnZUZvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JN
QVRfUkdCKQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpZiAoZm9y
bWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1h
Z2U6OkZvcm1hdF9SR0IzMjsKKyAgICBlbHNlCiAgICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdl
OjpGb3JtYXRfUkdCODg4OworI2Vsc2UKKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JN
QVRfQVJHQikKKyAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9BUkdCMzI7CiAg
ICAgZWxzZQotICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOworICAg
ICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKKyNlbmRpZgogCi0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgs
IGhlaWdodCksIGltYWdlRm9ybWF0KSk7Ci19CisgICAgUUltYWdlIGltYWdlKGJ1ZmZlckRhdGEs
IHdpZHRoLCBoZWlnaHQsIGltYWdlRm9ybWF0KTsKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0
cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXplLCBRSW1hZ2U6OkZvcm1hdCBp
bWFnZUZvcm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBRUGl4bWFwKiBzdXJmYWNlID0g
bmV3IFFQaXhtYXA7Ci0gICAgUUltYWdlIGltYWdlKEdTVF9CVUZGRVJfREFUQShidWZmZXIpLCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGltYWdlRm9ybWF0KTsKICAgICBzdXJmYWNlLT5j
b252ZXJ0RnJvbUltYWdlKGltYWdlKTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0
ZShzdXJmYWNlKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2J1ZmZlcl91
bm1hcChidWZmZXIsICZpbmZvKTsKKyNlbmRpZgogfQogCiBJbWFnZUdTdHJlYW1lcjo6fkltYWdl
R1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKaW5kZXggOThlYjA0NC4uNjNiNDBkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKQEAgLTE1MDUsMTIgKzE1MDUsMTYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNy
ZWF0ZUltYWdlKG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gd2Via2l0R3N0RWxlbWVu
dEdldFBhZENhcHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAgaWYgKCFjYXBzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0g
SW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKICAgICBpZiAoIWdz
dEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRl
cnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNS
R0IsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIENvbXBvc2l0ZUNvcHksIGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgZ3N0SW1hZ2UtPnJlY3QoKSwgQ29tcG9zaXRl
Q29weSwgZmFsc2UpOwogfQogCiBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUo
KQpAQCAtMTc0Niw3ICsxNzUwLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpjcmVhdGVHU1RQbGF5QmluKCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgInZp
ZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJhdWRpby1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFj
ayksIHRoaXMpOwogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgbV93ZWJraXRWaWRl
b1NpbmsgPSB3ZWJraXRfdmlkZW9fc2lua19uZXcobV9nc3RHV29ybGQuZ2V0KCkpOworI2Vsc2UK
KyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5rX25ldygpOworI2VuZGlm
CiAKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Via2l0VmlkZW9TaW5rLCAicmVwYWludC1yZXF1
ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayksIHRo
aXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDQzNjMwMzYuLjMy
MjM1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgi
CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorI2lmbmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQogCiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KQEAgLTM5
OCw0ICszOTksNSBAQCBHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoV2ViQ29yZTo6
R1N0cmVhbWVyR1dvcmxkKiBnc3RHV29ybGQpCiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKKyNl
bmRpZiAvLyBHU1RfQVBJX1ZFUlNJT05fMQogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9T
aW5rR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKaW5kZXggNTAxODUwZi4uNzlmN2VkNWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJHU3Ry
ZWFtZXJHV29ybGQuaCIKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPGdzdC92
aWRlby9nc3R2aWRlb3NpbmsuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KIAogR19C
RUdJTl9ERUNMUwogCkBAIC03NSw3ICs3NiwxMSBAQCBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua0Ns
YXNzIHsKIAogCiBHVHlwZSAgICAgICB3ZWJraXRfdmlkZW9fc2lua19nZXRfdHlwZSh2b2lkKSBH
X0dOVUNfQ09OU1Q7CisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiBHc3RFbGVtZW50ICp3ZWJr
aXRfdmlkZW9fc2lua19uZXcoV2ViQ29yZTo6R1N0cmVhbWVyR1dvcmxkKik7CisjZWxzZQorR3N0
RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CisjZW5kaWYKIAogR19FTkRfREVDTFMK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjhhZGY2ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAKQEAg
LTAsMCArMSwzNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA3IE9wZW5lZEhhbmQKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTAorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworLyoKKyAqCisgKiBXZWJLaXRWaWRlb1NpbmsgaXMgYSBHU3Ry
ZWFtZXIgc2luayBlbGVtZW50IHRoYXQgdHJpZ2dlcnMKKyAqIHJlcGFpbnRzIGluIHRoZSBXZWJL
aXQgR1N0cmVhbWVyIG1lZGlhIHBsYXllciBmb3IgdGhlCisgKiBjdXJyZW50IHZpZGVvIGJ1ZmZl
ci4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKEdTVFJFQU1FUikgJiYgZGVm
aW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKyNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIK
KworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0
L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Bvb2wu
aD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9j
QmFzZS5oPgorCisvLyBDQUlST19GT1JNQVRfUkdCMjQgdXNlZCB0byByZW5kZXIgdGhlIHZpZGVv
IGJ1ZmZlcnMgaXMgbGl0dGxlL2JpZyBlbmRpYW4gZGVwZW5kYW50LgorI2lmIEdfQllURV9PUkRF
UiA9PSBHX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVt
cGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsIEdTVF9QQURfU0lOSywgR1NU
X1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQU19NQUtFKCJ7IEJHUngs
IEJHUkEgfSIpKSk7CisjZWxzZQorc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1w
bGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1Rf
UEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTKEdTVF9WSURFT19DQVBTX01BS0UoInsgeFJHQiwg
QVJHQiB9IikpKTsKKyNlbmRpZgorCisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0
X3ZpZGVvX3NpbmtfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3ZpZGVv
X3NpbmtfZGVidWcKKworZW51bSB7CisgICAgUkVQQUlOVF9SRVFVRVNURUQsCisgICAgTEFTVF9T
SUdOQUwKK307CisKK2VudW0geworICAgIFBST1BfMAorfTsKKworc3RhdGljIGd1aW50IHdlYmtp
dF92aWRlb19zaW5rX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitzdHJ1Y3QgX1dl
YktpdFZpZGVvU2lua1ByaXZhdGUgeworICAgIEdzdEJ1ZmZlciogYnVmZmVyOworICAgIGd1aW50
IHRpbWVvdXRfaWQ7CisgICAgR011dGV4KiBidWZmZXJfbXV0ZXg7CisgICAgR0NvbmQqIGRhdGFf
Y29uZDsKKyAgICBHc3RWaWRlb0luZm8gaW5mbzsKKworICAgIC8vIElmIHRoaXMgaXMgVFJVRSBh
bGwgcHJvY2Vzc2luZyBzaG91bGQgZmluaXNoIEFTQVAKKyAgICAvLyBUaGlzIGlzIG5lY2Vzc2Fy
eSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBiZXR3ZWVuCisgICAgLy8gdW5sb2NrKCkg
YW5kIHJlbmRlcigpLCB3aGVyZSB1bmxvY2soKSB3aW5zLCBzaWduYWxzIHRoZQorICAgIC8vIEdD
b25kLCB0aGVuIHJlbmRlcigpIHRyaWVzIHRvIHJlbmRlciBhIGZyYW1lIGFsdGhvdWdoCisgICAg
Ly8gZXZlcnl0aGluZyBlbHNlIGlzbid0IHJ1bm5pbmcgYW55bW9yZS4gVGhpcyB3aWxsIGxlYWQK
KyAgICAvLyB0byBkZWFkbG9ja3MgYmVjYXVzZSByZW5kZXIoKSBob2xkcyB0aGUgc3RyZWFtIGxv
Y2suCisgICAgLy8KKyAgICAvLyBQcm90ZWN0ZWQgYnkgdGhlIGJ1ZmZlciBtdXRleAorICAgIGJv
b2wgdW5sb2NrZWQ7Cit9OworCisjZGVmaW5lIHdlYmtpdF92aWRlb19zaW5rX3BhcmVudF9jbGFz
cyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFZpZGVvU2luaywg
d2Via2l0X3ZpZGVvX3NpbmssIEdTVF9UWVBFX1ZJREVPX1NJTkssIEdTVF9ERUJVR19DQVRFR09S
WV9JTklUKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnLCBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIndlYmtpdHNpbmsiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgXAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQgdmlkZW8gc2luayIpKTsKKworCitz
dGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19pbml0KFdlYktpdFZpZGVvU2luayogc2luaykK
K3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2OworCisgICAgc2luay0+cHJpdiA9
IHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2luaywgV0VCS0lUX1RZUEVfVklE
RU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSk7CisgICAgcHJpdi0+ZGF0YV9jb25kID0g
V1RGOjpmYXN0TmV3PEdDb25kPigpOworICAgIGdfY29uZF9pbml0KHByaXYtPmRhdGFfY29uZCk7
CisgICAgcHJpdi0+YnVmZmVyX211dGV4ID0gV1RGOjpmYXN0TmV3PEdNdXRleD4oKTsKKyAgICBn
X211dGV4X2luaXQocHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBnc3RfdmlkZW9faW5mb19pbml0
KCZwcml2LT5pbmZvKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3Rp
bWVvdXRfZnVuYyhncG9pbnRlciBkYXRhKQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0VmlkZW9TaW5rKj4oZGF0YSk7CisgICAgV2ViS2l0Vmlk
ZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7
CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBidWZmZXIgPSBw
cml2LT5idWZmZXI7CisgICAgcHJpdi0+YnVmZmVyID0gMDsKKyAgICBwcml2LT50aW1lb3V0X2lk
ID0gMDsKKworICAgIGlmICghYnVmZmVyIHx8IHByaXYtPnVubG9ja2VkIHx8IFVOTElLRUxZKCFH
U1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7CisgICAgICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0
YV9jb25kKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAg
ICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAgIGdfc2lnbmFsX2VtaXQoc2luaywgd2Vi
a2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0sIDAsIGJ1ZmZlcik7Cisg
ICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0
YV9jb25kKTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAg
cmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRfdmlkZW9fc2lu
a19yZW5kZXIoR3N0QmFzZVNpbmsqIGJzaW5rLCBHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBX
ZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhic2luayk7CisgICAgV2Vi
S2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICBnX211dGV4X2xv
Y2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIGlmIChwcml2LT51bmxvY2tlZCkgeworICAg
ICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfT0s7CisgICAgfQorCisgICAgcHJpdi0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYo
YnVmZmVyKTsKKworICAgIEdzdFZpZGVvRnJhbWUgZnJhbWU7CisgICAgaWYgKCFnc3RfdmlkZW9f
ZnJhbWVfbWFwKCZmcmFtZSwgJnByaXYtPmluZm8sIGJ1ZmZlciwgR1NUX01BUF9SRUFEKSkgewor
ICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CisgICAgICAgIGdfbXV0ZXhfdW5sb2Nr
KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKKyAg
ICB9CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9fRlJBTUVfRk9STUFU
KCZmcmFtZSk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIKCZmcmFtZSk7
CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19GUkFNRV9IRUlHSFQoJmZyYW1lKTsKKworICAg
IGdzdF92aWRlb19mcmFtZV91bm1hcCgmZnJhbWUpOworCisgICAgLy8gQ2Fpcm8ncyBBUkdCIGhh
cyBwcmUtbXVsdGlwbGllZCBhbHBoYSB3aGlsZSBHU3RyZWFtZXIncyBkb2Vzbid0LgorICAgIC8v
IEhlcmUgd2UgY29udmVydCB0byBDYWlybydzIEFSR0IuCisgICAgaWYgKGZvcm1hdCA9PSBHU1Rf
VklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkgewor
ICAgICAgICAvLyBCZWNhdXNlIEdzdEJhc2VTaW5rOjpyZW5kZXIoKSBvbmx5IG93bnMgdGhlIGJ1
ZmZlciByZWZlcmVuY2UgaW4gdGhlCisgICAgICAgIC8vIG1ldGhvZCBzY29wZSB3ZSBjYW4ndCB1
c2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgaGVyZS4gQWxzbworICAgICAgICAvLyBUaGUg
YnVmZmVyIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGhlcmUgYmVjYXVzZSB0aGUgc2Ft
ZSBidWZmZXIKKyAgICAgICAgLy8gY291bGQgYmUgcGFzc2VkIG11bHRpcGxlIHRpbWVzIHRvIHRo
aXMgbWV0aG9kIChpbiB0aGVvcnkpLgorICAgICAgICBnc2l6ZSBidWZmZXJTaXplID0gZ3N0X2J1
ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworICAgICAgICBHc3RCdWZmZXIqIG5ld0J1ZmZlciA9IGdz
dF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKworICAgICAgICAvLyBDaGVjayBp
ZiBhbGxvY2F0aW9uIGZhaWxlZC4KKyAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdCdWZmZXIpKSB7
CisgICAgICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X2J1
ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZmZXIsIHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNv
cHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBKSwgMCwgYnVmZmVyU2l6ZSk7CisKKyAg
ICAgICAgLy8gV2UgZG9uJ3QgdXNlIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigp
IGhlcmUgYmVjYXVzZQorICAgICAgICAvLyBvbmUgZnVuY3Rpb24gY2FsbCBwZXIgdmlkZW8gcGl4
ZWwgaXMganVzdCB0b28gZXhwZW5zaXZlOgorICAgICAgICAvLyBGb3IgNzIwcC9QQUwgZm9yIGV4
YW1wbGUgdGhpcyBtZWFucyAxMjgwKjcyMCoyNT0yMzA0MDAwMAorICAgICAgICAvLyBmdW5jdGlv
biBjYWxscyBwZXIgc2Vjb25kIQorICAgICAgICB1bnNpZ25lZCBzaG9ydCBhbHBoYTsKKyAgICAg
ICAgR3N0TWFwSW5mbyBzb3VyY2VJbmZvOworICAgICAgICBHc3RNYXBJbmZvIGRlc3RpbmF0aW9u
SW5mbzsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmc291cmNlSW5mbywgR1NUX01B
UF9SRUFEKTsKKyAgICAgICAgY29uc3QgZ3VpbnQ4KiBzb3VyY2UgPSBjb25zdF9jYXN0PGd1aW50
OCo+KHNvdXJjZUluZm8uZGF0YSk7CisgICAgICAgIGdzdF9idWZmZXJfbWFwKG5ld0J1ZmZlciwg
JmRlc3RpbmF0aW9uSW5mbywgR1NUX01BUF9XUklURSk7CisgICAgICAgIGd1aW50OCogZGVzdGlu
YXRpb24gPSBzdGF0aWNfY2FzdDxndWludDgqPihkZXN0aW5hdGlvbkluZm8uZGF0YSk7CisKKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBoZWlnaHQ7IHgrKykgeworICAgICAgICAgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCB3aWR0aDsgeSsrKSB7CisjaWYgR19CWVRFX09SREVSID09IEdfTElU
VExFX0VORElBTgorICAgICAgICAgICAgICAgIGFscGhhID0gc291cmNlWzNdOworICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gKHNvdXJjZVswXSAqIGFscGhhICsgMTI4KSAvIDI1NTsK
KyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9IChzb3VyY2VbMV0gKiBhbHBoYSArIDEy
OCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMl0gPSAoc291cmNlWzJdICog
YWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzNdID0gYWxw
aGE7CisjZWxzZQorICAgICAgICAgICAgICAgIGFscGhhID0gc291cmNlWzBdOworICAgICAgICAg
ICAgICAgIGRlc3RpbmF0aW9uWzBdID0gYWxwaGE7CisgICAgICAgICAgICAgICAgZGVzdGluYXRp
b25bMV0gPSAoc291cmNlWzFdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAgICAg
IGRlc3RpbmF0aW9uWzJdID0gKHNvdXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAg
ICAgICAgICAgICBkZXN0aW5hdGlvblszXSA9IChzb3VyY2VbM10gKiBhbHBoYSArIDEyOCkgLyAy
NTU7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBzb3VyY2UgKz0gNDsKKyAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbiArPSA0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGdz
dF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmc291cmNlSW5mbyk7CisgICAgICAgIGdzdF9idWZmZXJf
dW5tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvKTsKKworICAgICAgICBnc3RfYnVmZmVy
X3VucmVmKGJ1ZmZlcik7CisgICAgICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlciA9IG5ld0J1ZmZl
cjsKKyAgICB9CisKKworICAgIC8vIFRoaXMgc2hvdWxkIGxpa2VseSB1c2UgYSBsb3dlciBwcmlv
cml0eSwgYnV0IGdsaWIgY3VycmVudGx5IHN0YXJ2ZXMKKyAgICAvLyBsb3dlciBwcmlvcml0eSBz
b3VyY2VzLgorICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcu
Y2dpP2lkPTYxMDgzMC4KKyAgICBwcml2LT50aW1lb3V0X2lkID0gZ190aW1lb3V0X2FkZF9mdWxs
KEdfUFJJT1JJVFlfREVGQVVMVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9vYmplY3RfcmVmKHNpbmspLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4oZ3N0X29iamVjdF91bnJlZikpOworCisgICAgZ19jb25kX3dhaXQocHJpdi0+
ZGF0YV9jb25kLCBwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7CisgICAgcmV0dXJuIEdTVF9GTE9XX09LOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworICAgIFdlYktp
dFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2OworCisgICAgaWYgKHByaXYtPmRh
dGFfY29uZCkgeworICAgICAgICBnX2NvbmRfY2xlYXIocHJpdi0+ZGF0YV9jb25kKTsKKyAgICAg
ICAgV1RGOjpmYXN0RGVsZXRlKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAgIHByaXYtPmRhdGFf
Y29uZCA9IDA7CisgICAgfQorCisgICAgaWYgKHByaXYtPmJ1ZmZlcl9tdXRleCkgeworICAgICAg
ICBnX211dGV4X2NsZWFyKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIFdURjo6ZmFzdERl
bGV0ZShwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBwcml2LT5idWZmZXJfbXV0ZXggPSAw
OworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2Jq
ZWN0KTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrQnVmZmVyTXV0ZXgoV2ViS2l0VmlkZW9TaW5r
UHJpdmF0ZSogcHJpdikKK3sKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsK
KworICAgIGlmIChwcml2LT5idWZmZXIpIHsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihwcml2
LT5idWZmZXIpOworICAgICAgICBwcml2LT5idWZmZXIgPSAwOworICAgIH0KKworICAgIHByaXYt
PnVubG9ja2VkID0gdHJ1ZTsKKworICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsK
KyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKEdzdEJhc2VTaW5rKiBvYmplY3QpCit7Cisg
ICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKKwor
ICAgIHVubG9ja0J1ZmZlck11dGV4KHNpbmstPnByaXYpOworCisgICAgcmV0dXJuIEdTVF9DQUxM
X1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrLCAob2JqZWN0
KSwgVFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua191bmxvY2tf
c3RvcChHc3RCYXNlU2luayogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUq
IHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpLT5wcml2OworCisgICAgZ19tdXRleF9s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJpdi0+dW5sb2NrZWQgPSBmYWxzZTsKKyAg
ICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAgcmV0dXJuIEdTVF9D
QUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrX3N0b3As
IChvYmplY3QpLCBUUlVFKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5r
X3N0b3AoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sKKyAgICB1bmxvY2tCdWZmZXJNdXRleChX
RUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2KTsKKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0KEdzdEJhc2VTaW5rKiBi
YXNlX3NpbmspCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9W
SURFT19TSU5LKGJhc2Vfc2luayktPnByaXY7CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOworICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9jYXRpb24oR3N0QmFzZVNpbmsq
IGJhc2Vfc2luaywgR3N0UXVlcnkqIHF1ZXJ5KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2lu
ayA9IFdFQktJVF9WSURFT19TSU5LKGJhc2Vfc2luayk7CisgICAgR3N0Q2FwcyogY2FwczsKKyAg
ICBnYm9vbGVhbiBuZWVkX3Bvb2w7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbihx
dWVyeSwgJmNhcHMsICZuZWVkX3Bvb2wpOworCisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1
cm4gRkFMU0U7CisKKyAgICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2Fwcygmc2luay0+cHJp
di0+aW5mbywgY2FwcykpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGdzdF9xdWVyeV9h
ZGRfYWxsb2NhdGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklERU9fTUVUQV9BUElfVFlQRSk7CisgICAg
Z3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEocXVlcnksIEdTVF9WSURFT19DUk9QX01FVEFf
QVBJX1RZUEUpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBtYXJzaGFsX1ZP
SURfX01JTklPQkpFQ1QoR0Nsb3N1cmUqIGNsb3N1cmUsIEdWYWx1ZSogcmV0dXJuVmFsdWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgcGFyYW1ldGVyc051bWJl
ciwgY29uc3QgR1ZhbHVlKiBwYXJhbWV0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdwb2ludGVyIGludm9jYXRpb25IaW50LCBncG9pbnRlciBtYXJzaGFsRGF0YSkK
K3sKKyAgICB0eXBlZGVmIHZvaWQgKCptYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUKSAoZ3Bv
aW50ZXIgb2JqZWN0LCBncG9pbnRlciBhcmcxLCBncG9pbnRlciBkYXRhMik7CisgICAgbWFyc2hh
bGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCBjYWxsYmFjazsKKyAgICBHQ0Nsb3N1cmUqIGNjID0gKEdD
Q2xvc3VyZSAqKSBjbG9zdXJlOworICAgIGdwb2ludGVyIGRhdGExLCBkYXRhMjsKKworICAgIGdf
cmV0dXJuX2lmX2ZhaWwocGFyYW1ldGVyc051bWJlciA9PSAyKTsKKworICAgIGlmIChHX0NDTE9T
VVJFX1NXQVBfREFUQShjbG9zdXJlKSkgeworICAgICAgICBkYXRhMSA9IGNsb3N1cmUtPmRhdGE7
CisgICAgICAgIGRhdGEyID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIocGFyYW1ldGVycyArIDApOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGRhdGExID0gZ192YWx1ZV9wZWVrX3BvaW50ZXIocGFyYW1l
dGVycyArIDApOworICAgICAgICBkYXRhMiA9IGNsb3N1cmUtPmRhdGE7CisgICAgfQorICAgIGNh
bGxiYWNrID0gKG1hcnNoYWxmdW5jX1ZPSURfX01JTklPQkpFQ1QpIChtYXJzaGFsRGF0YSA/IG1h
cnNoYWxEYXRhIDogY2MtPmNhbGxiYWNrKTsKKworICAgIGNhbGxiYWNrKGRhdGExLCBnX3ZhbHVl
X2dldF9ib3hlZChwYXJhbWV0ZXJzICsgMSksIGRhdGEyKTsKK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCit7
CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3Mp
OworICAgIEdzdEJhc2VTaW5rQ2xhc3MqIGdzdGJhc2Vfc2lua19jbGFzcyA9IEdTVF9CQVNFX1NJ
TktfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudF9jbGFzcyA9IEdT
VF9FTEVNRU5UX0NMQVNTKGtsYXNzKTsKKworICAgIGdzdF9lbGVtZW50X2NsYXNzX2FkZF9wYWRf
dGVtcGxhdGUoZWxlbWVudF9jbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzaW5r
VGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEoZWxlbWVudF9j
bGFzcywKKyAgICAgICAgICAgICJXZWJLaXQgdmlkZW8gc2luayIsCisgICAgICAgICAgICAiU2lu
ay9WaWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8g
YSBDYWlybyBzdXJmYWNlIiwKKyAgICAgICAgICAgICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PiIpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0
VmlkZW9TaW5rUHJpdmF0ZSkpOworCisgICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtp
dF92aWRlb19zaW5rX2Rpc3Bvc2U7CisKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVubG9jayA9
IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVubG9j
a19zdG9wID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3A7CisgICAgZ3N0YmFzZV9zaW5r
X2NsYXNzLT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CisgICAgZ3N0YmFzZV9z
aW5rX2NsYXNzLT5wcmVyb2xsID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJh
c2Vfc2lua19jbGFzcy0+c3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7CisgICAgZ3N0YmFz
ZV9zaW5rX2NsYXNzLT5zdGFydCA9IHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0OworICAgIGdzdGJh
c2Vfc2lua19jbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uID0gd2Via2l0X3ZpZGVvX3NpbmtfcHJv
cG9zZV9hbGxvY2F0aW9uOworCisgICAgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5U
X1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQtcmVxdWVzdGVkIiwKKyAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEdT
aWduYWxGbGFncz4oR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAg
ICAgICAgMCwgLy8gQ2xhc3Mgb2Zmc2V0LgorICAgICAgICAgICAgMCwgLy8gQWNjdW11bGF0b3Iu
CisgICAgICAgICAgICAwLCAvLyBBY2N1bXVsYXRvciBkYXRhLgorICAgICAgICAgICAgbWFyc2hh
bF9WT0lEX19NSU5JT0JKRUNULCAvLyBDdXN0b20gbWFyc2hhbGxlci4KKyAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAvLyBSZXR1cm4gdHlwZS4KKyAgICAgICAgICAgIDEsIC8vIE9ubHkgb25lIHBh
cmFtZXRlci4KKyAgICAgICAgICAgIEdTVF9UWVBFX0JVRkZFUik7Cit9CisKK0dzdEVsZW1lbnQq
IHdlYmtpdF92aWRlb19zaW5rX25ldygpCit7CisgICAgcmV0dXJuIEdTVF9FTEVNRU5UKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9CisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQotLSAKMS43LjkuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137331</attachid>
            <date>2012-04-16 06:18:15 -0700</date>
            <delta_ts>2012-04-16 06:51:15 -0700</delta_ts>
            <desc>video-sink</desc>
            <filename>video-sink.patch</filename>
            <type>text/plain</type>
            <size>30990</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBlN2ZmYWQ2YjYwOTQ5MzFiYmQ1YTU5YjE1ZWJiNDRiOTI1OWYyNjY5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBGcmksIDMwIE1hciAyMDEyIDE3OjIwOjM3ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
dmlkZW8tc2luawoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNDIgKysrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9JbWFnZUdTdHJlYW1lci5oICAgfCAgIDQxICstLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9J
bWFnZUdTdHJlYW1lckNHLm1tICAgICAgICAgfCAgIDYxIC0tLS0KIC4uLi9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgICAgIHwgICA2OSArKystCiAuLi4vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwICAgICAgICB8ICAgNTcgKysrLQogLi4u
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDE0ICst
CiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgICAgICB8ICAg
IDIgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCAgICAgICAg
fCAgICA1ICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAg
ICAgIHwgIDM1MSArKysrKysrKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgNTI2IGlu
c2VydGlvbnMoKyksIDExNyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYzcyMTc1Li45NDc2
OWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTItMDMtMzAgIFBoaWxpcHBlIE5v
cm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEg
dmlkZW8tc2luaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzcwODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBWaWRlbyBmcmFtZSByZW5kZXJpbmcgY2hhbmdlcyBmb3IgR1N0cmVhbWVyIDAuMTEvMS4wLiBU
aGUKKyAgICAgICAgSW1hZ2VHU3RyZWFtZXJDRyBhYnN0cmFjdGlvbiBpcyBiZWluZyByZW1vdmVk
IHVudGlsIEkgbWFuYWdlIHRvCisgICAgICAgIHBvcnQgbXkgZ3N0LW1hYyBXZWJLaXQgYnJhbmNo
IG92ZXIgdG8gV2ViS2l0MiBtYWMgcG9ydC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06IEFkZCBuZXcgdmlkZW8gc2luayBjb2RlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaDogY3JlYXRlSW1hZ2UgQVBJ
CisgICAgICAgIHVwZGF0ZSBzbyBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byB1c2UKKyAg
ICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQg
aW4gZ3N0LTAuMTEuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcDoKKyAgICAg
ICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwOgorICAgICAgICAoSW1hZ2VH
U3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDogQnVpbGQgb25s
eQorICAgICAgICBmb3IgZ3N0LTAuMTAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oOiBObyBuZWVkIGZvcgorICAgICAgICBHU3RyZWFt
ZXJHV29ybGQgaW4gdGhlIGdzdC0wLjExIHZpZGVvIHNpbmsuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcC4KKyAgICAgICAgKF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlKToKKyAgICAgICAgKHdl
YmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lu
a19yZW5kZXIpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZSk6CisgICAgICAg
ICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua191bmxvY2sp
OgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3ApOgorICAgICAgICAod2Vi
a2l0X3ZpZGVvX3Npbmtfc3RvcCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19zdGFydCk6
CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9jYXRpb24pOgorICAgICAg
ICAobWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5r
X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfbmV3KToKKwogMjAxMi0w
NC0xNiAgSmFzb24gTGl1ICA8amFzb24ubGl1QHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAg
ICBbQmxhY2tCZXJyeV0gTWlzc2luZyByZWFkeVN0YXRlIDIgd2hlbiBhIFhNTEh0dHBSZXF1ZXN0
IGNhbGxzIHhtbGh0dHAub3BlbigiSEVBRCIsIm5vdEV4aXN0Lmh0bWwiLHRydWUpLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNTc0YmIwNC4uMDZmMmJhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NjUxLDYgKzQ2NTEsNyBAQCB3ZWJjb3JlZ3RrX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0
Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCmlu
ZGV4IGFiNzk5YmEuLjlmMTY3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MywyMCArMjMsMjQgQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxn
c3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYK
K3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dz
dENhcHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsKK2Ns
YXNzIEJpdG1hcEltYWdlOwogCiBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKik7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1
ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIGNhcHMpKTsKKyAgICAgICAgfQogICAgICAg
ICB+SW1hZ2VHU3RyZWFtZXIoKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBp
bWFnZSgpCkBAIC00NSwyMSArNDksMTggQEAgY2xhc3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewogICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2Uu
Z2V0KCk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHNldENyb3BSZWN0KEZsb2F0UmVjdCBy
ZWN0KSB7IG1fY3JvcFJlY3QgPSByZWN0OyB9CisgICAgICAgIEZsb2F0UmVjdCByZWN0KCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2Nyb3BSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG1fY3JvcFJlY3QpOworICAgICAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IG1faW1hZ2U7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAg
ICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXplLCBjYWlyb19mb3JtYXRfdCYp
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0
QnVmZmVyKiYsIEludFNpemUsIFFJbWFnZTo6Rm9ybWF0KTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSk7Ci0j
ZW5kaWYKLQorICAgICAgICBGbG9hdFJlY3QgbV9jcm9wUmVjdDsKKyAgICAgICAgSW1hZ2VHU3Ry
ZWFtZXIoR3N0QnVmZmVyKiYsIEdzdENhcHMqKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
Ry5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdT
dHJlYW1lckNHLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTA5MjhiLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lckNHLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKLSNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRl
SW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0g
MDsKLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAg
IEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2Vf
Y2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBz
X3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KSkpOwotfQotCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVm
ZmVyLCBJbnRTaXplIHNpemUpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgQVNTRVJUKEdTVF9C
VUZGRVJfU0laRShidWZmZXIpKTsKLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRv
cHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4o
R1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpLCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxs
b2NhdG9yTnVsbCkpOwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIo
QWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKLSAg
ICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUud2lkdGgoKSo0LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVm
KCksCi0gICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZp
cnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
OwotICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOwotfQotCi1J
bWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAg
ICAgICAgbV9pbWFnZS5jbGVhcigpOwotCi0gICAgbV9pbWFnZSA9IDA7Ci19Ci0KLSNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4
IGEwYmY1ZjQuLmFiOWQ2M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAK
QEAgLTIyLDQwICsyMiw3NyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVS
KQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8
Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUg
PGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVh
dGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7
CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOwor
ICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKKworICAgIEdz
dFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKTsK
KyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAgICBp
bnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pOworCisgICAgR3N0
TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJm1hcEluZm8sIEdT
VF9NQVBfUkVBRCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwSW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5zaWdu
ZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KEdT
VF9CVUZGRVJfREFUQShidWZmZXIpKTsKICAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0
VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBz
KGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5y
ZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBnc3RfdmlkZW9fZm9ybWF0
X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKKyNlbmRpZgogCi0g
ICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CiAKICAgICBjYWlyb19mb3JtYXRfdCBjYWlyb0Zvcm1h
dDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0g
R1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJ
QU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKKyAgICAgICAgY2Fp
cm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9G
b3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NU
X1ZJREVPX0ZPUk1BVF9BUkdCKQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9B
UkdCMzI7CiAgICAgZWxzZQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0Iy
NDsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZm
ZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGNhaXJvRm9ybWF0KSk7Ci19CisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RS
SURFKCZ2aWRlb0luZm8sIDApOworI2Vsc2UKKyAgICBpbnQgc3RyaWRlOworICAgIGlmIChmb3Jt
YXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorICAgICAgICBzdHJpZGUgPSBHU1RfUk9VTkRf
VVBfNCh3aWR0aCAqIDQpOworICAgIGVsc2UKKyAgICAgICAgc3RyaWRlID0gR1NUX1JPVU5EX1VQ
XzQod2lkdGggKiAzKTsKKyNlbmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIo
R3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIGNhaXJvX2Zvcm1hdF90JiBjYWlyb0Zv
cm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVm
ZmVyKSwgY2Fpcm9Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2Zvcm1hdF9zdHJp
ZGVfZm9yX3dpZHRoKGNhaXJvRm9ybWF0LCBzaXplLndpZHRoKCkpKTsKKyAgICBjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShidWZm
ZXJEYXRhLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKICAgICBBU1NFUlQo
Y2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwog
ICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKworICAgIEdzdFZpZGVvQ3JvcE1ldGEqIGNyb3BNZXRhID0gZ3N0X2J1
ZmZlcl9nZXRfdmlkZW9fY3JvcF9tZXRhKGJ1ZmZlcik7CisgICAgaWYgKGNyb3BNZXRhKQorICAg
ICAgICBzZXRDcm9wUmVjdChGbG9hdFJlY3QoY3JvcE1ldGEtPngsIGNyb3BNZXRhLT55LCBjcm9w
TWV0YS0+d2lkdGgsIGNyb3BNZXRhLT5oZWlnaHQpKTsKKworICAgIGdzdF9idWZmZXJfdW5tYXAo
YnVmZmVyLCAmbWFwSW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdT
dHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKaW5kZXggMzZiMDgwNi4uZmY2
NjIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcApAQCAtMjMsMzcgKzIzLDU4IEBA
CiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dPd25QdHIuaD4KIAorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3Qvdmlk
ZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L3Zp
ZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VH
U3RyZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6
OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6
IG1faW1hZ2UoMCkKIHsKLSAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENh
cHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7Ci0gICAgR3N0VmlkZW9Gb3Jt
YXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZm
b3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQ
aXhtYXA7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9J
bmZvOworICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKIAot
ICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdT
VF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklE
RU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAgICBpbnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lO
Rk9fSEVJR0hUKCZ2aWRlb0luZm8pOwogCisgICAgR3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9i
dWZmZXJfbWFwKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgdWNoYXIqIGJ1ZmZl
ckRhdGEgPSByZWludGVycHJldF9jYXN0PHVjaGFyKj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAg
dWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PHVjaGFyKj4oR1NUX0JVRkZFUl9E
QVRBKGJ1ZmZlcikpOworICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CisgICAgR3N0Vmlk
ZW9Gb3JtYXQgZm9ybWF0OworICAgIGdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAm
Zm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpOworI2VuZGlmCiAgICAgUUltYWdlOjpGb3JtYXQgaW1h
Z2VGb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX1JHQikKKyNpZiBH
X0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklE
RU9fRk9STUFUX0JHUkEpCisgICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdC
MzI7CisgICAgZWxzZQogICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjg4
ODsKKyNlbHNlCisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IpCisgICAg
ICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfQVJHQjMyOwogICAgIGVsc2UKLSAgICAg
ICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsKKyAgICAgICAgaW1hZ2VGb3Jt
YXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7CisjZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBpbWFn
ZUZvcm1hdCkpOwotfQorICAgIFFJbWFnZSBpbWFnZShidWZmZXJEYXRhLCB3aWR0aCwgaGVpZ2h0
LCBpbWFnZUZvcm1hdCk7CiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZm
ZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSwgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQpCi0g
ICAgOiBtX2ltYWdlKDApCi17Ci0gICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwot
ICAgIFFJbWFnZSBpbWFnZShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCBpbWFnZUZvcm1hdCk7CiAgICAgc3VyZmFjZS0+Y29udmVydEZyb21JbWFn
ZShpbWFnZSk7CiAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoc3VyZmFjZSk7CisK
KyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAm
aW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IGVh
NDlkMGUuLmY2Nzg4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXIuY3BwCkBAIC0yNjIsMTAgKzI2MiwxMiBAQCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQogICAgICAgICBtX21lZGlhTG9j
YXRpb25zID0gMDsKICAgICB9CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBpZiAo
bV92aWRlb1NpbmtCaW4pIHsKICAgICAgICAgZ3N0X29iamVjdF91bnJlZihtX3ZpZGVvU2lua0Jp
bik7CiAgICAgICAgIG1fdmlkZW9TaW5rQmluID0gMDsKICAgICB9CisjZW5kaWYKIAogICAgIGlm
IChtX3BsYXlCaW4pIHsKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwg
R1NUX1NUQVRFX05VTEwpOwpAQCAtMTQ5MywxMiArMTQ5NSwxNiBAQCB2b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJ
bnRSZWN0JgogICAgIGlmICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZlB0
cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2UgPSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2Uo
bV9idWZmZXIpOworICAgIEdzdENhcHMqIGNhcHMgPSB3ZWJraXRHc3RFbGVtZW50R2V0UGFkQ2Fw
cyhtX3dlYmtpdFZpZGVvU2luaywgInNpbmsiKTsKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJl
dHVybjsKKworICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2UgPSBJbWFnZUdTdHJl
YW1lcjo6Y3JlYXRlSW1hZ2UobV9idWZmZXIsIGNhcHMpOwogICAgIGlmICghZ3N0SW1hZ2UpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZWludGVycHJldF9jYXN0
PEltYWdlKj4oZ3N0SW1hZ2UtPmltYWdlKCkuZ2V0KCkpLCBDb2xvclNwYWNlU1JHQiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdCwgQ29tcG9zaXRlQ29weSwgRG9Ob3RSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbiwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBnc3RJbWFn
ZS0+cmVjdCgpLCBDb21wb3NpdGVDb3B5LCBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBm
YWxzZSk7CiB9CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgpCkBAIC0x
NzM0LDcgKzE3NDAsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNyZWF0
ZUdTVFBsYXlCaW4oKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAidmlkZW8tY2hh
bmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFuZ2VkQ2FsbGJhY2sp
LCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgImF1ZGlvLWNoYW5nZWQi
LCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENhbGxiYWNrKSwgdGhp
cyk7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBtX3dlYmtpdFZpZGVvU2luayA9
IHdlYmtpdF92aWRlb19zaW5rX25ldyhtX2dzdEdXb3JsZC5nZXQoKSk7CisjZWxzZQorICAgIG1f
d2Via2l0VmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7CisjZW5kaWYKIAogICAg
IGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmssICJyZXBhaW50LXJlcXVlc3RlZCIs
IEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhpcyk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggNDM2MzAzNi4uMzIyMzVhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1Zp
ZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKICNpZiBF
TkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8x
CiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgpAQCAtMzk4LDQgKzM5
OSw1IEBAIEdzdEVsZW1lbnQqIHdlYmtpdF92aWRlb19zaW5rX25ldyhXZWJDb3JlOjpHU3RyZWFt
ZXJHV29ybGQqIGdzdEdXb3JsZCkKICAgICByZXR1cm4gZWxlbWVudDsKIH0KIAorI2VuZGlmIC8v
IEdTVF9BUElfVkVSU0lPTl8xCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1NpbmtHU3RyZWFtZXIuaAppbmRleCA1MDE4NTBmLi43OWY3ZWQ1YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRl
b1NpbmtHU3RyZWFtZXIuaApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckdX
b3JsZC5oIgogI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dz
dHZpZGVvc2luay5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogCiBHX0JFR0lOX0RF
Q0xTCiAKQEAgLTc1LDcgKzc2LDExIEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3Mgewog
CiAKIEdUeXBlICAgICAgIHdlYmtpdF92aWRlb19zaW5rX2dldF90eXBlKHZvaWQpIEdfR05VQ19D
T05TVDsKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQgKndlYmtpdF92aWRl
b19zaW5rX25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqKTsKKyNlbHNlCitHc3RFbGVtZW50
ICp3ZWJraXRfdmlkZW9fc2lua19uZXcoKTsKKyNlbmRpZgogCiBHX0VORF9ERUNMUwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9T
aW5rR1N0cmVhbWVyMS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOGY0YzI3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcApAQCAtMCwwICsx
LDM1MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZAorICogIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisvKgorICoKKyAqIFdlYktpdFZpZGVvU2luayBpcyBhIEdTdHJlYW1lciBz
aW5rIGVsZW1lbnQgdGhhdCB0cmlnZ2VycworICogcmVwYWludHMgaW4gdGhlIFdlYktpdCBHU3Ry
ZWFtZXIgbWVkaWEgcGxheWVyIGZvciB0aGUKKyAqIGN1cnJlbnQgdmlkZW8gYnVmZmVyLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBVU0UoR1NUUkVBTUVSKSAmJiBkZWZpbmVkKEdT
VF9BUElfVkVSU0lPTl8xKQorI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgorCisjaW5j
bHVkZSA8Z2xpYi5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8v
Z3N0dmlkZW9tZXRhLmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgorI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+
CisKKy8vIENBSVJPX0ZPUk1BVF9SR0IyNCB1c2VkIHRvIHJlbmRlciB0aGUgdmlkZW8gYnVmZmVy
cyBpcyBsaXR0bGUvYmlnIGVuZGlhbiBkZXBlbmRhbnQuCisjaWYgR19CWVRFX09SREVSID09IEdf
TElUVExFX0VORElBTgorc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9
IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FM
V0FZUywgR1NUX1NUQVRJQ19DQVBTKEdTVF9WSURFT19DQVBTX01BS0UoInsgQkdSeCwgQkdSQSB9
IikpKTsKKyNlbHNlCitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua1RlbXBsYXRlID0g
R1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLCBHU1RfUEFEX1NJTkssIEdTVF9QQURfQUxX
QVlTLCBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNfTUFLRSgieyB4UkdCLCBBUkdCIH0i
KSkpOworI2VuZGlmCisKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfdmlkZW9f
c2lua19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfdmlkZW9fc2lua19k
ZWJ1ZworCitlbnVtIHsKKyAgICBSRVBBSU5UX1JFUVVFU1RFRCwKKyAgICBMQVNUX1NJR05BTAor
fTsKKworZW51bSB7CisgICAgUFJPUF8wCit9OworCitzdGF0aWMgZ3VpbnQgd2Via2l0X3ZpZGVv
X3Npbmtfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK3N0cnVjdCBfV2ViS2l0Vmlk
ZW9TaW5rUHJpdmF0ZSB7CisgICAgR3N0QnVmZmVyKiBidWZmZXI7CisgICAgZ3VpbnQgdGltZW91
dF9pZDsKKyAgICBHTXV0ZXgqIGJ1ZmZlcl9tdXRleDsKKyAgICBHQ29uZCogZGF0YV9jb25kOwor
ICAgIEdzdFZpZGVvSW5mbyBpbmZvOworCisgICAgLy8gSWYgdGhpcyBpcyBUUlVFIGFsbCBwcm9j
ZXNzaW5nIHNob3VsZCBmaW5pc2ggQVNBUAorICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1
c2UgdGhlcmUgY291bGQgYmUgYSByYWNlIGJldHdlZW4KKyAgICAvLyB1bmxvY2soKSBhbmQgcmVu
ZGVyKCksIHdoZXJlIHVubG9jaygpIHdpbnMsIHNpZ25hbHMgdGhlCisgICAgLy8gR0NvbmQsIHRo
ZW4gcmVuZGVyKCkgdHJpZXMgdG8gcmVuZGVyIGEgZnJhbWUgYWx0aG91Z2gKKyAgICAvLyBldmVy
eXRoaW5nIGVsc2UgaXNuJ3QgcnVubmluZyBhbnltb3JlLiBUaGlzIHdpbGwgbGVhZAorICAgIC8v
IHRvIGRlYWRsb2NrcyBiZWNhdXNlIHJlbmRlcigpIGhvbGRzIHRoZSBzdHJlYW0gbG9jay4KKyAg
ICAvLworICAgIC8vIFByb3RlY3RlZCBieSB0aGUgYnVmZmVyIG11dGV4CisgICAgYm9vbCB1bmxv
Y2tlZDsKK307CisKKyNkZWZpbmUgd2Via2l0X3ZpZGVvX3NpbmtfcGFyZW50X2NsYXNzIHBhcmVu
dF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0VmlkZW9TaW5rLCB3ZWJraXRf
dmlkZW9fc2luaywgR1NUX1RZUEVfVklERU9fU0lOSywgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQo
d2Via2l0X3ZpZGVvX3NpbmtfZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
d2Via2l0c2luayIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIndlYmtpdCB2aWRlbyBzaW5rIikpOworCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rKQoreworICAg
IFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXY7CisKKyAgICBzaW5rLT5wcml2ID0gcHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19TSU5L
LCBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKTsKKyAgICBwcml2LT5kYXRhX2NvbmQgPSBXVEY6OmZh
c3ROZXc8R0NvbmQ+KCk7CisgICAgZ19jb25kX2luaXQocHJpdi0+ZGF0YV9jb25kKTsKKyAgICBw
cml2LT5idWZmZXJfbXV0ZXggPSBXVEY6OmZhc3ROZXc8R011dGV4PigpOworICAgIGdfbXV0ZXhf
aW5pdChwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdzdF92aWRlb19pbmZvX2luaXQoJnByaXYt
PmluZm8pOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9m
dW5jKGdwb2ludGVyIGRhdGEpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gcmVpbnRl
cnByZXRfY2FzdDxXZWJLaXRWaWRlb1NpbmsqPihkYXRhKTsKKyAgICBXZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKKworICAg
IGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGJ1ZmZlciA9IHByaXYtPmJ1
ZmZlcjsKKyAgICBwcml2LT5idWZmZXIgPSAwOworICAgIHByaXYtPnRpbWVvdXRfaWQgPSAwOwor
CisgICAgaWYgKCFidWZmZXIgfHwgcHJpdi0+dW5sb2NrZWQgfHwgVU5MSUtFTFkoIUdTVF9JU19C
VUZGRVIoYnVmZmVyKSkpIHsKKyAgICAgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQp
OworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgfQorCisgICAgZ19zaWduYWxfZW1pdChzaW5rLCB3ZWJraXRfdmlk
ZW9fc2lua19zaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVEXSwgMCwgYnVmZmVyKTsKKyAgICBnc3Rf
YnVmZmVyX3VucmVmKGJ1ZmZlcik7CisgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQp
OworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICByZXR1cm4g
RkFMU0U7Cit9CisKK3N0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdF92aWRlb19zaW5rX3JlbmRl
cihHc3RCYXNlU2luayogYnNpbmssIEdzdEJ1ZmZlciogYnVmZmVyKQoreworICAgIFdlYktpdFZp
ZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJzaW5rKTsKKyAgICBXZWJLaXRWaWRl
b1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOworCisgICAgaWYgKHByaXYtPnVubG9ja2VkKSB7CisgICAgICAgIGdf
bXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJldHVybiBHU1RfRkxP
V19PSzsKKyAgICB9CisKKyAgICBwcml2LT5idWZmZXIgPSBnc3RfYnVmZmVyX3JlZihidWZmZXIp
OworCisgICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKKyAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9t
YXAoJmZyYW1lLCAmcHJpdi0+aW5mbywgYnVmZmVyLCBHU1RfTUFQX1JFQUQpKSB7CisgICAgICAg
IGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+
YnVmZmVyX211dGV4KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgIH0KKwor
ICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19GUkFNRV9GT1JNQVQoJmZyYW1l
KTsKKyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fRlJBTUVfV0lEVEgoJmZyYW1lKTsKKyAgICBp
bnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0ZSQU1FX0hFSUdIVCgmZnJhbWUpOworCisgICAgZ3N0X3Zp
ZGVvX2ZyYW1lX3VubWFwKCZmcmFtZSk7CisKKyAgICAvLyBDYWlybydzIEFSR0IgaGFzIHByZS1t
dWx0aXBsaWVkIGFscGhhIHdoaWxlIEdTdHJlYW1lcidzIGRvZXNuJ3QuCisgICAgLy8gSGVyZSB3
ZSBjb252ZXJ0IHRvIENhaXJvJ3MgQVJHQi4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSB7CisgICAgICAg
IC8vIEJlY2F1c2UgR3N0QmFzZVNpbms6OnJlbmRlcigpIG9ubHkgb3ducyB0aGUgYnVmZmVyIHJl
ZmVyZW5jZSBpbiB0aGUKKyAgICAgICAgLy8gbWV0aG9kIHNjb3BlIHdlIGNhbid0IHVzZSBnc3Rf
YnVmZmVyX21ha2Vfd3JpdGFibGUoKSBoZXJlLiBBbHNvCisgICAgICAgIC8vIFRoZSBidWZmZXIg
Y29udGVudCBzaG91bGQgbm90IGJlIGNoYW5nZWQgaGVyZSBiZWNhdXNlIHRoZSBzYW1lIGJ1ZmZl
cgorICAgICAgICAvLyBjb3VsZCBiZSBwYXNzZWQgbXVsdGlwbGUgdGltZXMgdG8gdGhpcyBtZXRo
b2QgKGluIHRoZW9yeSkuCisgICAgICAgIGdzaXplIGJ1ZmZlclNpemUgPSBnc3RfYnVmZmVyX2dl
dF9zaXplKGJ1ZmZlcik7CisgICAgICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gZ3N0X2J1ZmZl
cl9uZXdfYW5kX2FsbG9jKGJ1ZmZlclNpemUpOworCisgICAgICAgIC8vIENoZWNrIGlmIGFsbG9j
YXRpb24gZmFpbGVkLgorICAgICAgICBpZiAoVU5MSUtFTFkoIW5ld0J1ZmZlcikpIHsKKyAgICAg
ICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgICAgICBy
ZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBnc3RfYnVmZmVyX2Nv
cHlfaW50byhuZXdCdWZmZXIsIGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0QnVmZmVyQ29weUZsYWdz
PihHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEpLCAwLCBidWZmZXJTaXplKTsKKworICAgICAgICAv
LyBXZSBkb24ndCB1c2UgQ29sb3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgaGVyZSBi
ZWNhdXNlCisgICAgICAgIC8vIG9uZSBmdW5jdGlvbiBjYWxsIHBlciB2aWRlbyBwaXhlbCBpcyBq
dXN0IHRvbyBleHBlbnNpdmU6CisgICAgICAgIC8vIEZvciA3MjBwL1BBTCBmb3IgZXhhbXBsZSB0
aGlzIG1lYW5zIDEyODAqNzIwKjI1PTIzMDQwMDAwCisgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxz
IHBlciBzZWNvbmQhCisgICAgICAgIHVuc2lnbmVkIHNob3J0IGFscGhhOworICAgICAgICBHc3RN
YXBJbmZvIHNvdXJjZUluZm87CisgICAgICAgIEdzdE1hcEluZm8gZGVzdGluYXRpb25JbmZvOwor
ICAgICAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZzb3VyY2VJbmZvLCBHU1RfTUFQX1JFQUQp
OworICAgICAgICBjb25zdCBndWludDgqIHNvdXJjZSA9IGNvbnN0X2Nhc3Q8Z3VpbnQ4Kj4oc291
cmNlSW5mby5kYXRhKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAobmV3QnVmZmVyLCAmZGVzdGlu
YXRpb25JbmZvLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAgZ3VpbnQ4KiBkZXN0aW5hdGlvbiA9
IHN0YXRpY19jYXN0PGd1aW50OCo+KGRlc3RpbmF0aW9uSW5mby5kYXRhKTsKKworICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IGhlaWdodDsgeCsrKSB7CisgICAgICAgICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IHdpZHRoOyB5KyspIHsKKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5E
SUFOCisgICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2VbM107CisgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25bMF0gPSAoc291cmNlWzBdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAg
ICAgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1
NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSAr
IDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSBhbHBoYTsKKyNl
bHNlCisgICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2VbMF07CisgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25bMF0gPSBhbHBoYTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9
IChzb3VyY2VbMV0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bMl0gPSAoc291cmNlWzJdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gKHNvdXJjZVszXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyNl
bmRpZgorICAgICAgICAgICAgICAgIHNvdXJjZSArPSA0OworICAgICAgICAgICAgICAgIGRlc3Rp
bmF0aW9uICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ3N0X2J1ZmZl
cl91bm1hcChidWZmZXIsICZzb3VyY2VJbmZvKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChu
ZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8pOworCisgICAgICAgIGdzdF9idWZmZXJfdW5yZWYo
YnVmZmVyKTsKKyAgICAgICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyID0gbmV3QnVmZmVyOworICAg
IH0KKworCisgICAgLy8gVGhpcyBzaG91bGQgbGlrZWx5IHVzZSBhIGxvd2VyIHByaW9yaXR5LCBi
dXQgZ2xpYiBjdXJyZW50bHkgc3RhcnZlcworICAgIC8vIGxvd2VyIHByaW9yaXR5IHNvdXJjZXMu
CisgICAgLy8gU2VlOiBodHRwczovL2J1Z3ppbGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjEwODMwLgorICAgIHByaXYtPnRpbWVvdXRfaWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklP
UklUWV9ERUZBVUxULCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3N0X29iamVjdF9yZWYoc2luayksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90
aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CisKKyAgICBnX2NvbmRfd2FpdChwcml2LT5kYXRhX2Nv
bmQsIHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVy
X211dGV4KTsKKyAgICByZXR1cm4gR1NUX0ZMT1dfT0s7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF92aWRlb19zaW5rX2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFZpZGVv
U2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7CisgICAgV2ViS2l0VmlkZW9T
aW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CisKKyAgICBpZiAocHJpdi0+ZGF0YV9jb25k
KSB7CisgICAgICAgIGdfY29uZF9jbGVhcihwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBXVEY6
OmZhc3REZWxldGUocHJpdi0+ZGF0YV9jb25kKTsKKyAgICAgICAgcHJpdi0+ZGF0YV9jb25kID0g
MDsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+YnVmZmVyX211dGV4KSB7CisgICAgICAgIGdfbXV0
ZXhfY2xlYXIocHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgV1RGOjpmYXN0RGVsZXRlKHBy
aXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHByaXYtPmJ1ZmZlcl9tdXRleCA9IDA7CisgICAg
fQorCisgICAgR19PQkpFQ1RfQ0xBU1MocGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOwor
fQorCitzdGF0aWMgdm9pZCB1bmxvY2tCdWZmZXJNdXRleChXZWJLaXRWaWRlb1NpbmtQcml2YXRl
KiBwcml2KQoreworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworCisgICAg
aWYgKHByaXYtPmJ1ZmZlcikgeworICAgICAgICBnc3RfYnVmZmVyX3VucmVmKHByaXYtPmJ1ZmZl
cik7CisgICAgICAgIHByaXYtPmJ1ZmZlciA9IDA7CisgICAgfQorCisgICAgcHJpdi0+dW5sb2Nr
ZWQgPSB0cnVlOworCisgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOworICAgIGdf
bXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfdmlkZW9fc2lua191bmxvY2soR3N0QmFzZVNpbmsqIG9iamVjdCkKK3sKKyAgICBXZWJL
aXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworCisgICAgdW5s
b2NrQnVmZmVyTXV0ZXgoc2luay0+cHJpdik7CisKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5U
X1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssIChvYmplY3QpLCBUUlVF
KTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9wKEdz
dEJhc2VTaW5rKiBvYmplY3QpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCktPnByaXY7CisKKyAgICBnX211dGV4X2xvY2socHJp
di0+YnVmZmVyX211dGV4KTsKKyAgICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOworICAgIGdfbXV0
ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisKKyAgICByZXR1cm4gR1NUX0NBTExfUEFS
RU5UX1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2tfc3RvcCwgKG9iamVj
dCksIFRSVUUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Npbmtfc3RvcChH
c3RCYXNlU2luayogYmFzZV9zaW5rKQoreworICAgIHVubG9ja0J1ZmZlck11dGV4KFdFQktJVF9W
SURFT19TSU5LKGJhc2Vfc2luayktPnByaXYpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQoR3N0QmFzZVNpbmsqIGJhc2Vfc2lu
aykKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJ
TksoYmFzZV9zaW5rKS0+cHJpdjsKKworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0
ZXgpOworICAgIHByaXYtPnVubG9ja2VkID0gZmFsc2U7CisgICAgZ19tdXRleF91bmxvY2socHJp
di0+YnVmZmVyX211dGV4KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFu
IHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbihHc3RCYXNlU2luayogYmFzZV9z
aW5rLCBHc3RRdWVyeSogcXVlcnkpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VC
S0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKTsKKyAgICBHc3RDYXBzKiBjYXBzOworICAgIGdib29s
ZWFuIG5lZWRfcG9vbDsKKworICAgIGdzdF9xdWVyeV9wYXJzZV9hbGxvY2F0aW9uKHF1ZXJ5LCAm
Y2FwcywgJm5lZWRfcG9vbCk7CisKKyAgICBpZiAoIWNhcHMpCisgICAgICAgIHJldHVybiBGQUxT
RTsKKworICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZzaW5rLT5wcml2LT5pbmZv
LCBjYXBzKSkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxv
Y2F0aW9uX21ldGEocXVlcnksIEdTVF9WSURFT19NRVRBX0FQSV9UWVBFKTsKKyAgICBnc3RfcXVl
cnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX0NST1BfTUVUQV9BUElfVFlQ
RSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5r
X2NsYXNzX2luaXQoV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RD
bGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RCYXNl
U2lua0NsYXNzKiBnc3RiYXNlX3NpbmtfY2xhc3MgPSBHU1RfQkFTRV9TSU5LX0NMQVNTKGtsYXNz
KTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRfY2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFT
UyhrbGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1l
bnRfY2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7Cisg
ICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKGVsZW1lbnRfY2xhc3MsCisgICAgICAg
ICAgICAiV2ViS2l0IHZpZGVvIHNpbmsiLAorICAgICAgICAgICAgIlNpbmsvVmlkZW8iLCAiU2Vu
ZHMgdmlkZW8gZGF0YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFj
ZSIsCisgICAgICAgICAgICAiQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKKworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZh
dGUpKTsKKworICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfdmlkZW9fc2lua19k
aXNwb3NlOworCisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxvY2sgPSB3ZWJraXRfdmlkZW9f
c2lua191bmxvY2s7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT51bmxvY2tfc3RvcCA9IHdlYmtp
dF92aWRlb19zaW5rX3VubG9ja19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cmVuZGVy
ID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+cHJl
cm9sbCA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3Mt
PnN0b3AgPSB3ZWJraXRfdmlkZW9fc2lua19zdG9wOworICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+
c3RhcnQgPSB3ZWJraXRfdmlkZW9fc2lua19zdGFydDsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3Mt
PnByb3Bvc2VfYWxsb2NhdGlvbiA9IHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlv
bjsKKworICAgIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0g
Z19zaWduYWxfbmV3KCJyZXBhaW50LXJlcXVlc3RlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyhrbGFzcyksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+KEdf
U0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsIC8vIENs
YXNzIG9mZnNldC4KKyAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxhdG9yLgorICAgICAgICAgICAg
MCwgLy8gQWNjdW11bGF0b3IgZGF0YS4KKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9n
ZW5lcmljLCAvLyBDdXN0b20gbWFyc2hhbGxlci4KKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAv
LyBSZXR1cm4gdHlwZS4KKyAgICAgICAgICAgIDEsIC8vIE9ubHkgb25lIHBhcmFtZXRlci4KKyAg
ICAgICAgICAgIEdTVF9UWVBFX0JVRkZFUik7Cit9CisKK0dzdEVsZW1lbnQqIHdlYmtpdF92aWRl
b19zaW5rX25ldygpCit7CisgICAgcmV0dXJuIEdTVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKSAm
JiBkZWZpbmVkKEdTVF9BUElfVkVSU0lPTl8xKQotLSAKMS43LjEw
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137337</attachid>
            <date>2012-04-16 06:51:15 -0700</date>
            <delta_ts>2012-05-03 07:07:38 -0700</delta_ts>
            <desc>video-sink</desc>
            <filename>video-sink.patch</filename>
            <type>text/plain</type>
            <size>31021</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBjMjc1M2FjYTQ0ZjNjNTkyYmMxNGFkOTQ0NTE0MmE3YzZmMmE5NTE5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBGcmksIDMwIE1hciAyMDEyIDE3OjIwOjM3ICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
dmlkZW8tc2luawoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgNDIgKysrCiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
ICAgICAgICAgICAgICAgICB8ICAgIDEgKwogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9JbWFnZUdTdHJlYW1lci5oICAgfCAgIDQxICstLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9J
bWFnZUdTdHJlYW1lckNHLm1tICAgICAgICAgfCAgIDYxIC0tLS0KIC4uLi9ncmFwaGljcy9nc3Ry
ZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgICAgIHwgICA2OSArKystCiAuLi4vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwICAgICAgICB8ICAgNTcgKysrLQogLi4u
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDE0ICst
CiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgICAgICB8ICAg
IDIgKwogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCAgICAgICAg
fCAgICA1ICsKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyMS5jcHAg
ICAgIHwgIDM1MSArKysrKysrKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgNTI2IGlu
c2VydGlvbnMoKyksIDExNyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbQog
Y3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYzcyMTc1Li45NDc2
OWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMTItMDMtMzAgIFBoaWxpcHBlIE5v
cm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEg
dmlkZW8tc2luaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzcwODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBWaWRlbyBmcmFtZSByZW5kZXJpbmcgY2hhbmdlcyBmb3IgR1N0cmVhbWVyIDAuMTEvMS4wLiBU
aGUKKyAgICAgICAgSW1hZ2VHU3RyZWFtZXJDRyBhYnN0cmFjdGlvbiBpcyBiZWluZyByZW1vdmVk
IHVudGlsIEkgbWFuYWdlIHRvCisgICAgICAgIHBvcnQgbXkgZ3N0LW1hYyBXZWJLaXQgYnJhbmNo
IG92ZXIgdG8gV2ViS2l0MiBtYWMgcG9ydC4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3Qu
YW06IEFkZCBuZXcgdmlkZW8gc2luayBjb2RlIHRvIHRoZSBidWlsZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaDogY3JlYXRlSW1hZ2UgQVBJ
CisgICAgICAgIHVwZGF0ZSBzbyBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byB1c2UKKyAg
ICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQg
aW4gZ3N0LTAuMTEuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1h
Z2UpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tOiBSZW1vdmVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcDoKKyAgICAg
ICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwOgorICAgICAgICAoSW1hZ2VH
U3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDogQnVpbGQgb25s
eQorICAgICAgICBmb3IgZ3N0LTAuMTAuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oOiBObyBuZWVkIGZvcgorICAgICAgICBHU3RyZWFt
ZXJHV29ybGQgaW4gdGhlIGdzdC0wLjExIHZpZGVvIHNpbmsuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwOiBDb3BpZWQgZnJvbSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcC4KKyAgICAgICAgKF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlKToKKyAgICAgICAgKHdl
YmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lu
a19yZW5kZXIpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZSk6CisgICAgICAg
ICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua191bmxvY2sp
OgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3ApOgorICAgICAgICAod2Vi
a2l0X3ZpZGVvX3Npbmtfc3RvcCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19zdGFydCk6
CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9jYXRpb24pOgorICAgICAg
ICAobWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5r
X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfbmV3KToKKwogMjAxMi0w
NC0xNiAgSmFzb24gTGl1ICA8amFzb24ubGl1QHRvcmNobW9iaWxlLmNvbS5jbj4KIAogICAgICAg
ICBbQmxhY2tCZXJyeV0gTWlzc2luZyByZWFkeVN0YXRlIDIgd2hlbiBhIFhNTEh0dHBSZXF1ZXN0
IGNhbGxzIHhtbGh0dHAub3BlbigiSEVBRCIsIm5vdEV4aXN0Lmh0bWwiLHRydWUpLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNTc0YmIwNC4uMDZmMmJhOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCkBAIC00NjUxLDYgKzQ2NTEsNyBAQCB3ZWJjb3JlZ3RrX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9QbGF0
Zm9ybVZpZGVvV2luZG93LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIxLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNv
dXJjZUdTdHJlYW1lci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0NvbG9yR3RrLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCmlu
ZGV4IGFiNzk5YmEuLjlmMTY3NTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIDIwMTEsIDIwMTIgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0y
MywyMCArMjMsMjQgQEAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxn
c3QvdmlkZW8vdmlkZW8uaD4KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYK
K3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dz
dENhcHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsKK2Ns
YXNzIEJpdG1hcEltYWdlOwogCiBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKik7CisgICAgICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1
ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIGNhcHMpKTsKKyAgICAgICAgfQogICAgICAg
ICB+SW1hZ2VHU3RyZWFtZXIoKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBp
bWFnZSgpCkBAIC00NSwyMSArNDksMTggQEAgY2xhc3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMg
UmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewogICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2Uu
Z2V0KCk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIHNldENyb3BSZWN0KEZsb2F0UmVjdCBy
ZWN0KSB7IG1fY3JvcFJlY3QgPSByZWN0OyB9CisgICAgICAgIEZsb2F0UmVjdCByZWN0KCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2Nyb3BSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG1fY3JvcFJlY3QpOworICAgICAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IG1faW1hZ2U7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAg
ICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXplLCBjYWlyb19mb3JtYXRfdCYp
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0
QnVmZmVyKiYsIEludFNpemUsIFFJbWFnZTo6Rm9ybWF0KTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiwgSW50U2l6ZSk7Ci0j
ZW5kaWYKLQorICAgICAgICBGbG9hdFJlY3QgbV9jcm9wUmVjdDsKKyAgICAgICAgSW1hZ2VHU3Ry
ZWFtZXIoR3N0QnVmZmVyKiYsIEdzdENhcHMqKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJD
Ry5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdT
dHJlYW1lckNHLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTA5MjhiLi4wMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lckNHLm1tCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgot
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKLSNp
ZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwotCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRl
SW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0g
MDsKLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAg
IEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2Vf
Y2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBz
X3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0
KSkpOwotfQotCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVm
ZmVyLCBJbnRTaXplIHNpemUpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgQVNTRVJUKEdTVF9C
VUZGRVJfU0laRShidWZmZXIpKTsKLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRv
cHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4o
R1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpLCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxs
b2NhdG9yTnVsbCkpOwotICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIo
QWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKLSAg
ICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUud2lkdGgoKSo0LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVm
KCksCi0gICAgICAgIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZp
cnN0LCBwcm92aWRlci5nZXQoKSwgMCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQp
OwotICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOwotfQotCi1J
bWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAg
ICAgICAgbV9pbWFnZS5jbGVhcigpOwotCi0gICAgbV9pbWFnZSA9IDA7Ci19Ci0KLSNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4
IGEwYmY1ZjQuLmFiOWQ2M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAK
QEAgLTIyLDQwICsyMiw3NyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVS
KQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8
Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUg
PGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL2dvYmpl
Y3QvR093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVh
dGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1l
cihHc3RCdWZmZXIqJiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7
CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8gdmlkZW9JbmZvOwor
ICAgIGdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmdmlkZW9JbmZvLCBjYXBzKTsKKworICAgIEdz
dFZpZGVvRm9ybWF0IGZvcm1hdCA9IEdTVF9WSURFT19JTkZPX0ZPUk1BVCgmdmlkZW9JbmZvKTsK
KyAgICBpbnQgd2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgmdmlkZW9JbmZvKTsKKyAgICBp
bnQgaGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZ2aWRlb0luZm8pOworCisgICAgR3N0
TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJm1hcEluZm8sIEdT
VF9NQVBfUkVBRCk7CisKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwSW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5zaWdu
ZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KEdT
VF9CVUZGRVJfREFUQShidWZmZXIpKTsKICAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0
VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBz
KGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5y
ZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBnc3RfdmlkZW9fZm9ybWF0
X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsKKyNlbmRpZgogCi0g
ICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CiAKICAgICBjYWlyb19mb3JtYXRfdCBjYWlyb0Zvcm1h
dDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0g
R1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJ
QU4KKyAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKKyAgICAgICAgY2Fp
cm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOworICAgIGVsc2UKKyAgICAgICAgY2Fpcm9G
b3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7CisjZWxzZQorICAgIGlmIChmb3JtYXQgPT0gR1NU
X1ZJREVPX0ZPUk1BVF9BUkdCKQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9B
UkdCMzI7CiAgICAgZWxzZQogICAgICAgICBjYWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0Iy
NDsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1lcihidWZm
ZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGNhaXJvRm9ybWF0KSk7Ci19CisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBpbnQgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RS
SURFKCZ2aWRlb0luZm8sIDApOworI2Vsc2UKKyAgICBpbnQgc3RyaWRlOworICAgIGlmIChmb3Jt
YXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorICAgICAgICBzdHJpZGUgPSBHU1RfUk9VTkRf
VVBfNCh3aWR0aCAqIDQpOworICAgIGVsc2UKKyAgICAgICAgc3RyaWRlID0gR1NUX1JPVU5EX1VQ
XzQod2lkdGggKiAzKTsKKyNlbmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIo
R3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIGNhaXJvX2Zvcm1hdF90JiBjYWlyb0Zv
cm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2Ug
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEoYnVm
ZmVyKSwgY2Fpcm9Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2Zvcm1hdF9zdHJp
ZGVfZm9yX3dpZHRoKGNhaXJvRm9ybWF0LCBzaXplLndpZHRoKCkpKTsKKyAgICBjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShidWZm
ZXJEYXRhLCBjYWlyb0Zvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKICAgICBBU1NFUlQo
Y2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwog
ICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKworICAgIEdzdFZpZGVvQ3JvcE1ldGEqIGNyb3BNZXRhID0gZ3N0X2J1
ZmZlcl9nZXRfdmlkZW9fY3JvcF9tZXRhKGJ1ZmZlcik7CisgICAgaWYgKGNyb3BNZXRhKQorICAg
ICAgICBzZXRDcm9wUmVjdChGbG9hdFJlY3QoY3JvcE1ldGEtPngsIGNyb3BNZXRhLT55LCBjcm9w
TWV0YS0+d2lkdGgsIGNyb3BNZXRhLT5oZWlnaHQpKTsKKworICAgIGdzdF9idWZmZXJfdW5tYXAo
YnVmZmVyLCAmbWFwSW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdT
dHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKaW5kZXggMzZiMDgwNi4uYmJh
NmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcApAQCAtMjEsMzkgKzIxLDYwIEBA
CiAjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNF
KEdTVFJFQU1FUikKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3Zp
ZGVvLmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9n
c3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBh
c3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RC
dWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIq
JiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdlKDApCiB7Ci0gICAgaW50IHdp
ZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRf
Y2FwcyhidWZmZXIpOwotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92
aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7
Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
CisgICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIHZpZGVvSW5mbzsKKyAgICBnc3RfdmlkZW9faW5mb19m
cm9tX2NhcHMoJnZpZGVvSW5mbywgY2Fwcyk7CiAKLSAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsK
KyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9fSU5GT19GT1JNQVQoJnZpZGVv
SW5mbyk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJREVPX0lORk9fV0lEVEgoJnZpZGVvSW5mbyk7
CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmdmlkZW9JbmZvKTsKIAor
ICAgIEdzdE1hcEluZm8gaW5mbzsKKyAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBH
U1RfTUFQX1JFQUQpOworICAgIHVjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
Y2hhcio+KGluZm8uZGF0YSk7CisjZWxzZQorICAgIHVjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRl
cnByZXRfY2FzdDx1Y2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyAgICBpbnQgd2lk
dGggPSAwLCBoZWlnaHQgPSAwOworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKKyAgICBnc3Rf
dmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KTsK
KyNlbmRpZgogICAgIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0OwotICAgIGlmIChmb3JtYXQg
PT0gR1NUX1ZJREVPX0ZPUk1BVF9SR0IpCisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VO
RElBTgorICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQorICAgICAgICBp
bWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOworICAgIGVsc2UKICAgICAgICAgaW1h
Z2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7CisjZWxzZQorICAgIGlmIChmb3JtYXQg
PT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKQorICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6
Rm9ybWF0X0FSR0IzMjsKICAgICBlbHNlCi0gICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpG
b3JtYXRfUkdCMzI7CisgICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCODg4
OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZl
ciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgaW1hZ2VGb3JtYXQpKTsKLX0KKyAgICBRSW1hZ2Ug
aW1hZ2UoYnVmZmVyRGF0YSwgd2lkdGgsIGhlaWdodCwgaW1hZ2VGb3JtYXQpOwogCi1JbWFnZUdT
dHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUs
IFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0KQotICAgIDogbV9pbWFnZSgwKQotewotICAgIFFQ
aXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKLSAgICBRSW1hZ2UgaW1hZ2UoR1NUX0JVRkZF
Ul9EQVRBKGJ1ZmZlciksIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQp
OwogICAgIHN1cmZhY2UtPmNvbnZlcnRGcm9tSW1hZ2UoaW1hZ2UpOwogICAgIG1faW1hZ2UgPSBC
aXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEK
KyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJmluZm8pOworI2VuZGlmCiB9CiAKIEltYWdl
R1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBlYTQ5ZDBlLi5mNjc4OGViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMjYyLDEwICsy
NjIsMTIgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyKCkKICAgICAgICAgbV9tZWRpYUxvY2F0aW9ucyA9IDA7CiAgICAgfQogCisjaWZu
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgaWYgKG1fdmlkZW9TaW5rQmluKSB7CiAgICAgICAg
IGdzdF9vYmplY3RfdW5yZWYobV92aWRlb1NpbmtCaW4pOwogICAgICAgICBtX3ZpZGVvU2lua0Jp
biA9IDA7CiAgICAgfQorI2VuZGlmCiAKICAgICBpZiAobV9wbGF5QmluKSB7CiAgICAgICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9OVUxMKTsKQEAgLTE0OTMs
MTIgKzE0OTUsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdl
ID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBj
YXBzID0gd2Via2l0R3N0RWxlbWVudEdldFBhZENhcHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5r
Iik7CisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VH
U3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVy
LCBjYXBzKTsKICAgICBpZiAoIWdzdEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBjb250
ZXh0LT5kcmF3SW1hZ2UocmVpbnRlcnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdlLT5pbWFnZSgp
LmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIENv
bXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgcmVjdCwgZ3N0SW1hZ2UtPnJlY3QoKSwgQ29tcG9zaXRlQ29weSwg
RG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2UpOwogfQogCiBzdGF0aWMgSGFzaFNl
dDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQpAQCAtMTczNCw3ICsxNzQwLDExIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fcGxheUJpbiwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxh
eWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29u
bmVjdChtX3BsYXlCaW4sICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclBy
aXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogCisjaWZuZGVmIEdTVF9BUElfVkVS
U0lPTl8xCiAgICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRfdmlkZW9fc2lua19uZXcobV9n
c3RHV29ybGQuZ2V0KCkpOworI2Vsc2UKKyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdF92
aWRlb19zaW5rX25ldygpOworI2VuZGlmCiAKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Via2l0
VmlkZW9TaW5rLCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJp
dmF0ZVJlcGFpbnRDYWxsYmFjayksIHRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFt
ZXIuY3BwCmluZGV4IDQzNjMwMzYuLjMyMjM1YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3Ry
ZWFtZXIuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVB
TUVSKQorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogCiAjaW5jbHVkZSA8Z2xpYi5oPgogI2lu
Y2x1ZGUgPGdzdC9nc3QuaD4KQEAgLTM5OCw0ICszOTksNSBAQCBHc3RFbGVtZW50KiB3ZWJraXRf
dmlkZW9fc2lua19uZXcoV2ViQ29yZTo6R1N0cmVhbWVyR1dvcmxkKiBnc3RHV29ybGQpCiAgICAg
cmV0dXJuIGVsZW1lbnQ7CiB9CiAKKyNlbmRpZiAvLyBHU1RfQVBJX1ZFUlNJT05fMQogI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKaW5kZXggNTAx
ODUwZi4uNzlmN2VkNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKQEAgLTI1LDYg
KzI1LDcgQEAKICNpbmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIKICNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgogI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3NpbmsuaD4KKyNpbmNsdWRlIDxn
c3QvdmlkZW8vdmlkZW8uaD4KIAogR19CRUdJTl9ERUNMUwogCkBAIC03NSw3ICs3NiwxMSBAQCBz
dHJ1Y3QgX1dlYktpdFZpZGVvU2lua0NsYXNzIHsKIAogCiBHVHlwZSAgICAgICB3ZWJraXRfdmlk
ZW9fc2lua19nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CisjaWZuZGVmIEdTVF9BUElfVkVS
U0lPTl8xCiBHc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lua19uZXcoV2ViQ29yZTo6R1N0cmVh
bWVyR1dvcmxkKik7CisjZWxzZQorR3N0RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7
CisjZW5kaWYKIAogR19FTkRfREVDTFMKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNGMyNzAKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9TaW5rR1N0cmVhbWVyMS5jcHAKQEAgLTAsMCArMSwzNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDA3IE9wZW5lZEhhbmQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxh
bHBAYXRva2VyLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIg
SWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworLyoKKyAqCisgKiBX
ZWJLaXRWaWRlb1NpbmsgaXMgYSBHU3RyZWFtZXIgc2luayBlbGVtZW50IHRoYXQgdHJpZ2dlcnMK
KyAqIHJlcGFpbnRzIGluIHRoZSBXZWJLaXQgR1N0cmVhbWVyIG1lZGlhIHBsYXllciBmb3IgdGhl
CisgKiBjdXJyZW50IHZpZGVvIGJ1ZmZlci4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aWYgVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05fMSkKKyNpbmNsdWRl
ICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdsaWIuaD4KKyNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2luY2x1ZGUg
PGdzdC92aWRlby9nc3R2aWRlb3Bvb2wuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgorCisvLyBDQUlST19GT1JNQVRfUkdCMjQg
dXNlZCB0byByZW5kZXIgdGhlIHZpZGVvIGJ1ZmZlcnMgaXMgbGl0dGxlL2JpZyBlbmRpYW4gZGVw
ZW5kYW50LgorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyBHc3RT
dGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgi
c2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhHU1Rf
VklERU9fQ0FQU19NQUtFKCJ7IEJHUngsIEJHUkEgfSIpKSk7CisjZWxzZQorc3RhdGljIEdzdFN0
YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJz
aW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTKEdTVF9W
SURFT19DQVBTX01BS0UoInsgeFJHQiwgQVJHQiB9IikpKTsKKyNlbmRpZgorCisKK0dTVF9ERUJV
R19DQVRFR09SWV9TVEFUSUMod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcpOworI2RlZmluZSBHU1Rf
Q0FUX0RFRkFVTFQgd2Via2l0X3ZpZGVvX3NpbmtfZGVidWcKKworZW51bSB7CisgICAgUkVQQUlO
VF9SRVFVRVNURUQsCisgICAgTEFTVF9TSUdOQUwKK307CisKK2VudW0geworICAgIFBST1BfMAor
fTsKKworc3RhdGljIGd1aW50IHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbTEFTVF9TSUdOQUxd
ID0geyAwLCB9OworCitzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZhdGUgeworICAgIEdzdEJ1
ZmZlciogYnVmZmVyOworICAgIGd1aW50IHRpbWVvdXRfaWQ7CisgICAgR011dGV4KiBidWZmZXJf
bXV0ZXg7CisgICAgR0NvbmQqIGRhdGFfY29uZDsKKyAgICBHc3RWaWRlb0luZm8gaW5mbzsKKwor
ICAgIC8vIElmIHRoaXMgaXMgVFJVRSBhbGwgcHJvY2Vzc2luZyBzaG91bGQgZmluaXNoIEFTQVAK
KyAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBi
ZXR3ZWVuCisgICAgLy8gdW5sb2NrKCkgYW5kIHJlbmRlcigpLCB3aGVyZSB1bmxvY2soKSB3aW5z
LCBzaWduYWxzIHRoZQorICAgIC8vIEdDb25kLCB0aGVuIHJlbmRlcigpIHRyaWVzIHRvIHJlbmRl
ciBhIGZyYW1lIGFsdGhvdWdoCisgICAgLy8gZXZlcnl0aGluZyBlbHNlIGlzbid0IHJ1bm5pbmcg
YW55bW9yZS4gVGhpcyB3aWxsIGxlYWQKKyAgICAvLyB0byBkZWFkbG9ja3MgYmVjYXVzZSByZW5k
ZXIoKSBob2xkcyB0aGUgc3RyZWFtIGxvY2suCisgICAgLy8KKyAgICAvLyBQcm90ZWN0ZWQgYnkg
dGhlIGJ1ZmZlciBtdXRleAorICAgIGJvb2wgdW5sb2NrZWQ7Cit9OworCisjZGVmaW5lIHdlYmtp
dF92aWRlb19zaW5rX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lU
SF9DT0RFKFdlYktpdFZpZGVvU2luaywgd2Via2l0X3ZpZGVvX3NpbmssIEdTVF9UWVBFX1ZJREVP
X1NJTkssIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF92aWRlb19zaW5rX2RlYnVnLCBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdHNpbmsiLCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJr
aXQgdmlkZW8gc2luayIpKTsKKworCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19pbml0
KFdlYktpdFZpZGVvU2luayogc2luaykKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBw
cml2OworCisgICAgc2luay0+cHJpdiA9IHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZB
VEUoc2luaywgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSk7
CisgICAgcHJpdi0+ZGF0YV9jb25kID0gV1RGOjpmYXN0TmV3PEdDb25kPigpOworICAgIGdfY29u
ZF9pbml0KHByaXYtPmRhdGFfY29uZCk7CisgICAgcHJpdi0+YnVmZmVyX211dGV4ID0gV1RGOjpm
YXN0TmV3PEdNdXRleD4oKTsKKyAgICBnX211dGV4X2luaXQocHJpdi0+YnVmZmVyX211dGV4KTsK
KyAgICBnc3RfdmlkZW9faW5mb19pbml0KCZwcml2LT5pbmZvKTsKK30KKworc3RhdGljIGdib29s
ZWFuIHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyhncG9pbnRlciBkYXRhKQoreworICAg
IFdlYktpdFZpZGVvU2luayogc2luayA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0VmlkZW9TaW5r
Kj4oZGF0YSk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7
CisgICAgR3N0QnVmZmVyKiBidWZmZXI7CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVy
X211dGV4KTsKKyAgICBidWZmZXIgPSBwcml2LT5idWZmZXI7CisgICAgcHJpdi0+YnVmZmVyID0g
MDsKKyAgICBwcml2LT50aW1lb3V0X2lkID0gMDsKKworICAgIGlmICghYnVmZmVyIHx8IHByaXYt
PnVubG9ja2VkIHx8IFVOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7CisgICAgICAg
IGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2so
cHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKworICAg
IGdfc2lnbmFsX2VtaXQoc2luaywgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JF
UVVFU1RFRF0sIDAsIGJ1ZmZlcik7CisgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOworICAg
IGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsKKyAgICBnX211dGV4X3VubG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgR3N0Rmxv
d1JldHVybiB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXIoR3N0QmFzZVNpbmsqIGJzaW5rLCBHc3RC
dWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklE
RU9fU0lOSyhic2luayk7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmst
PnByaXY7CisKKyAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIGlm
IChwcml2LT51bmxvY2tlZCkgeworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJf
bXV0ZXgpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfQorCisgICAgcHJpdi0+
YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYoYnVmZmVyKTsKKworICAgIEdzdFZpZGVvRnJhbWUgZnJh
bWU7CisgICAgaWYgKCFnc3RfdmlkZW9fZnJhbWVfbWFwKCZmcmFtZSwgJnByaXYtPmluZm8sIGJ1
ZmZlciwgR1NUX01BUF9SRUFEKSkgeworICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7
CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIHJl
dHVybiBHU1RfRkxPV19FUlJPUjsKKyAgICB9CisKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQg
PSBHU1RfVklERU9fRlJBTUVfRk9STUFUKCZmcmFtZSk7CisgICAgaW50IHdpZHRoID0gR1NUX1ZJ
REVPX0ZSQU1FX1dJRFRIKCZmcmFtZSk7CisgICAgaW50IGhlaWdodCA9IEdTVF9WSURFT19GUkFN
RV9IRUlHSFQoJmZyYW1lKTsKKworICAgIGdzdF92aWRlb19mcmFtZV91bm1hcCgmZnJhbWUpOwor
CisgICAgLy8gQ2Fpcm8ncyBBUkdCIGhhcyBwcmUtbXVsdGlwbGllZCBhbHBoYSB3aGlsZSBHU3Ry
ZWFtZXIncyBkb2Vzbid0LgorICAgIC8vIEhlcmUgd2UgY29udmVydCB0byBDYWlybydzIEFSR0Iu
CisgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdT
VF9WSURFT19GT1JNQVRfQkdSQSkgeworICAgICAgICAvLyBCZWNhdXNlIEdzdEJhc2VTaW5rOjpy
ZW5kZXIoKSBvbmx5IG93bnMgdGhlIGJ1ZmZlciByZWZlcmVuY2UgaW4gdGhlCisgICAgICAgIC8v
IG1ldGhvZCBzY29wZSB3ZSBjYW4ndCB1c2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgaGVy
ZS4gQWxzbworICAgICAgICAvLyBUaGUgYnVmZmVyIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBjaGFu
Z2VkIGhlcmUgYmVjYXVzZSB0aGUgc2FtZSBidWZmZXIKKyAgICAgICAgLy8gY291bGQgYmUgcGFz
c2VkIG11bHRpcGxlIHRpbWVzIHRvIHRoaXMgbWV0aG9kIChpbiB0aGVvcnkpLgorICAgICAgICBn
c2l6ZSBidWZmZXJTaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworICAgICAgICBH
c3RCdWZmZXIqIG5ld0J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXpl
KTsKKworICAgICAgICAvLyBDaGVjayBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KKyAgICAgICAgaWYg
KFVOTElLRUxZKCFuZXdCdWZmZXIpKSB7CisgICAgICAgICAgICBnX211dGV4X3VubG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAg
ICAgICB9CisKKyAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZmZXIs
IHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRB
KSwgMCwgYnVmZmVyU2l6ZSk7CisKKyAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIENvbG9yOjpwcmVt
dWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGhlcmUgYmVjYXVzZQorICAgICAgICAvLyBvbmUgZnVu
Y3Rpb24gY2FsbCBwZXIgdmlkZW8gcGl4ZWwgaXMganVzdCB0b28gZXhwZW5zaXZlOgorICAgICAg
ICAvLyBGb3IgNzIwcC9QQUwgZm9yIGV4YW1wbGUgdGhpcyBtZWFucyAxMjgwKjcyMCoyNT0yMzA0
MDAwMAorICAgICAgICAvLyBmdW5jdGlvbiBjYWxscyBwZXIgc2Vjb25kIQorICAgICAgICB1bnNp
Z25lZCBzaG9ydCBhbHBoYTsKKyAgICAgICAgR3N0TWFwSW5mbyBzb3VyY2VJbmZvOworICAgICAg
ICBHc3RNYXBJbmZvIGRlc3RpbmF0aW9uSW5mbzsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAoYnVm
ZmVyLCAmc291cmNlSW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgY29uc3QgZ3VpbnQ4KiBz
b3VyY2UgPSBjb25zdF9jYXN0PGd1aW50OCo+KHNvdXJjZUluZm8uZGF0YSk7CisgICAgICAgIGdz
dF9idWZmZXJfbWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0aW9uSW5mbywgR1NUX01BUF9XUklURSk7
CisgICAgICAgIGd1aW50OCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxndWludDgqPihkZXN0
aW5hdGlvbkluZm8uZGF0YSk7CisKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBoZWlnaHQ7
IHgrKykgeworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB3aWR0aDsgeSsrKSB7Cisj
aWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgICAgICAgICAgICAgIGFscGhh
ID0gc291cmNlWzNdOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gKHNvdXJjZVsw
XSAqIGFscGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9
IChzb3VyY2VbMV0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bMl0gPSAoc291cmNlWzJdICogYWxwaGEgKyAxMjgpIC8gMjU1OworICAgICAgICAgICAg
ICAgIGRlc3RpbmF0aW9uWzNdID0gYWxwaGE7CisjZWxzZQorICAgICAgICAgICAgICAgIGFscGhh
ID0gc291cmNlWzBdOworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzBdID0gYWxwaGE7Cisg
ICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMV0gPSAoc291cmNlWzFdICogYWxwaGEgKyAxMjgp
IC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzJdID0gKHNvdXJjZVsyXSAqIGFs
cGhhICsgMTI4KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblszXSA9IChzb3Vy
Y2VbM10gKiBhbHBoYSArIDEyOCkgLyAyNTU7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBzb3Vy
Y2UgKz0gNDsKKyAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiArPSA0OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmc291cmNlSW5m
byk7CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZv
KTsKKworICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CisgICAgICAgIGJ1ZmZlciA9
IHByaXYtPmJ1ZmZlciA9IG5ld0J1ZmZlcjsKKyAgICB9CisKKworICAgIC8vIFRoaXMgc2hvdWxk
IGxpa2VseSB1c2UgYSBsb3dlciBwcmlvcml0eSwgYnV0IGdsaWIgY3VycmVudGx5IHN0YXJ2ZXMK
KyAgICAvLyBsb3dlciBwcmlvcml0eSBzb3VyY2VzLgorICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6
aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDgzMC4KKyAgICBwcml2LT50aW1lb3V0
X2lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF92aWRlb19zaW5rX3RpbWVv
dXRfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9v
YmplY3RfcmVmKHNpbmspLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ3N0X29iamVjdF91bnJlZikpOwor
CisgICAgZ19jb25kX3dhaXQocHJpdi0+ZGF0YV9jb25kLCBwcml2LT5idWZmZXJfbXV0ZXgpOwor
ICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcmV0dXJuIEdTVF9G
TE9XX09LOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9f
U0lOSyhvYmplY3QpOworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5w
cml2OworCisgICAgaWYgKHByaXYtPmRhdGFfY29uZCkgeworICAgICAgICBnX2NvbmRfY2xlYXIo
cHJpdi0+ZGF0YV9jb25kKTsKKyAgICAgICAgV1RGOjpmYXN0RGVsZXRlKHByaXYtPmRhdGFfY29u
ZCk7CisgICAgICAgIHByaXYtPmRhdGFfY29uZCA9IDA7CisgICAgfQorCisgICAgaWYgKHByaXYt
PmJ1ZmZlcl9tdXRleCkgeworICAgICAgICBnX211dGV4X2NsZWFyKHByaXYtPmJ1ZmZlcl9tdXRl
eCk7CisgICAgICAgIFdURjo6ZmFzdERlbGV0ZShwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAg
ICBwcml2LT5idWZmZXJfbXV0ZXggPSAwOworICAgIH0KKworICAgIEdfT0JKRUNUX0NMQVNTKHBh
cmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworc3RhdGljIHZvaWQgdW5sb2NrQnVm
ZmVyTXV0ZXgoV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdikKK3sKKyAgICBnX211dGV4X2xv
Y2socHJpdi0+YnVmZmVyX211dGV4KTsKKworICAgIGlmIChwcml2LT5idWZmZXIpIHsKKyAgICAg
ICAgZ3N0X2J1ZmZlcl91bnJlZihwcml2LT5idWZmZXIpOworICAgICAgICBwcml2LT5idWZmZXIg
PSAwOworICAgIH0KKworICAgIHByaXYtPnVubG9ja2VkID0gdHJ1ZTsKKworICAgIGdfY29uZF9z
aWduYWwocHJpdi0+ZGF0YV9jb25kKTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJf
bXV0ZXgpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKEdz
dEJhc2VTaW5rKiBvYmplY3QpCit7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lU
X1ZJREVPX1NJTksob2JqZWN0KTsKKworICAgIHVubG9ja0J1ZmZlck11dGV4KHNpbmstPnByaXYp
OworCisgICAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lO
S19DTEFTUywgdW5sb2NrLCAob2JqZWN0KSwgVFJVRSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3
ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcChHc3RCYXNlU2luayogb2JqZWN0KQoreworICAg
IFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3Qp
LT5wcml2OworCisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcHJp
di0+dW5sb2NrZWQgPSBmYWxzZTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0
ZXgpOworCisgICAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0Vf
U0lOS19DTEFTUywgdW5sb2NrX3N0b3AsIChvYmplY3QpLCBUUlVFKTsKK30KKworc3RhdGljIGdi
b29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3N0b3AoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3sK
KyAgICB1bmxvY2tCdWZmZXJNdXRleChXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2
KTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19z
aW5rX3N0YXJ0KEdzdEJhc2VTaW5rKiBiYXNlX3NpbmspCit7CisgICAgV2ViS2l0VmlkZW9TaW5r
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSURFT19TSU5LKGJhc2Vfc2luayktPnByaXY7CisKKyAg
ICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBwcml2LT51bmxvY2tlZCA9
IGZhbHNlOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19wcm9wb3Nl
X2FsbG9jYXRpb24oR3N0QmFzZVNpbmsqIGJhc2Vfc2luaywgR3N0UXVlcnkqIHF1ZXJ5KQorewor
ICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJhc2Vfc2luayk7
CisgICAgR3N0Q2FwcyogY2FwczsKKyAgICBnYm9vbGVhbiBuZWVkX3Bvb2w7CisKKyAgICBnc3Rf
cXVlcnlfcGFyc2VfYWxsb2NhdGlvbihxdWVyeSwgJmNhcHMsICZuZWVkX3Bvb2wpOworCisgICAg
aWYgKCFjYXBzKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoIWdzdF92aWRlb19p
bmZvX2Zyb21fY2Fwcygmc2luay0+cHJpdi0+aW5mbywgY2FwcykpCisgICAgICAgIHJldHVybiBG
QUxTRTsKKworICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklE
RU9fTUVUQV9BUElfVFlQRSk7CisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEocXVl
cnksIEdTVF9WSURFT19DUk9QX01FVEFfQVBJX1RZUEUpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZpZGVvU2lu
a0NsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0QmFzZVNpbmtDbGFzcyogZ3N0YmFzZV9zaW5rX2Ns
YXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBl
bGVtZW50X2NsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworCisgICAgZ3N0X2VsZW1l
bnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50X2NsYXNzLCBnc3Rfc3RhdGljX3BhZF90
ZW1wbGF0ZV9nZXQoJnNpbmtUZW1wbGF0ZSkpOworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9t
ZXRhZGF0YShlbGVtZW50X2NsYXNzLAorICAgICAgICAgICAgIldlYktpdCB2aWRlbyBzaW5rIiwK
KyAgICAgICAgICAgICJTaW5rL1ZpZGVvIiwgIlNlbmRzIHZpZGVvIGRhdGEgZnJvbSBhIEdTdHJl
YW1lciBwaXBlbGluZSB0byBhIENhaXJvIHN1cmZhY2UiLAorICAgICAgICAgICAgIkFscCBUb2tl
ciA8YWxwQGF0b2tlci5jb20+Iik7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xh
c3MsIHNpemVvZihXZWJLaXRWaWRlb1NpbmtQcml2YXRlKSk7CisKKyAgICBnb2JqZWN0X2NsYXNz
LT5kaXNwb3NlID0gd2Via2l0X3ZpZGVvX3NpbmtfZGlzcG9zZTsKKworICAgIGdzdGJhc2Vfc2lu
a19jbGFzcy0+dW5sb2NrID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrOworICAgIGdzdGJhc2Vf
c2lua19jbGFzcy0+dW5sb2NrX3N0b3AgPSB3ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcDsK
KyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnJlbmRlciA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRl
cjsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnByZXJvbGwgPSB3ZWJraXRfdmlkZW9fc2lua19y
ZW5kZXI7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5zdG9wID0gd2Via2l0X3ZpZGVvX3Npbmtf
c3RvcDsKKyAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnN0YXJ0ID0gd2Via2l0X3ZpZGVvX3Npbmtf
c3RhcnQ7CisgICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gPSB3ZWJr
aXRfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9jYXRpb247CisKKyAgICB3ZWJraXRfdmlkZW9fc2lu
a19zaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVEXSA9IGdfc2lnbmFsX25ldygicmVwYWludC1yZXF1
ZXN0ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xhc3MpLAorICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8R1NpZ25hbEZsYWdzPihHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCisgICAgICAgICAgICAwLCAvLyBDbGFzcyBvZmZzZXQuCisgICAgICAgICAgICAw
LCAvLyBBY2N1bXVsYXRvci4KKyAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxhdG9yIGRhdGEuCisg
ICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2VuZXJpYywgLy8gQ3VzdG9tIG1hcnNoYWxs
ZXIuCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgLy8gUmV0dXJuIHR5cGUuCisgICAgICAgICAg
ICAxLCAvLyBPbmx5IG9uZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICBHU1RfVFlQRV9CVUZGRVIp
OworfQorCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoKQoreworICAgIHJldHVy
biBHU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklERU9fU0lOSywgMCkpOwor
fQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikgJiYgZGVmaW5lZChHU1RfQVBJX1ZFUlNJT05f
MSkKLS0gCjEuNy4xMA==
</data>
<flag name="review"
          id="142349"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140004</attachid>
            <date>2012-05-03 07:07:38 -0700</date>
            <delta_ts>2012-05-03 07:32:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>44926</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA1NjNmMTZmYTRiNWM5M2UxY2M2NjY0MTIzMmJkMTdlYTZjZDViMjAxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDMgTWF5IDIwMTIgMTU6MDY6MzMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBQ
YXRjaAoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgNDQgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25p
bmcuY3BwICAgICB8ICAgMjkgKysKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVy
c2lvbmluZy5oICAgICAgIHwgICAgNiArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyLmggICB8ICAgNDEgKy0tCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyQ0cubW0gICAgICAgICB8ICAgNjEgLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDU1ICstLQogLi4uL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCAgICAgICAgfCAgIDUwICstLQogLi4uL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDYzICsrLS0K
IC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCAgICAgIHwgIDM1
OSArKysrKysrKysrKystLS0tLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuaCAgICAgICAgfCAgIDEzICstCiAxMCBmaWxlcyBjaGFuZ2VkLCA0MTcgaW5zZXJ0
aW9ucygrKSwgMzA0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGE4ODQ1YmUuLmU0MzgyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAor
MjAxMi0wNS0wMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dTdHJlYW1lcl0gMC4xMSB2aWRlby1zaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFZpZGVvIGZyYW1lIHJlbmRlcmluZyBjaGFuZ2VzIGZv
ciBHU3RyZWFtZXIgMC4xMS8xLjAuIFRoZQorICAgICAgICBJbWFnZUdTdHJlYW1lckNHIGFic3Ry
YWN0aW9uIGlzIGJlaW5nIHJlbW92ZWQgdW50aWwgSSBtYW5hZ2UgdG8KKyAgICAgICAgcG9ydCBt
eSBnc3QtbWFjIFdlYktpdCBicmFuY2ggb3ZlciB0byBXZWJLaXQyIG1hYyBwb3J0LgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3Bw
OgorICAgICAgICAod2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXIuaDogY3JlYXRlSW1hZ2UgQVBJCisgICAgICAgIHVwZGF0ZSBzbyBpbXBs
ZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byB1c2UKKyAgICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9w
YXJzZV9jYXBzIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgaW4gZ3N0LTAuMTEuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VHU3RyZWFtZXI6OnNldENyb3BSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlR1N0
cmVhbWVyOjpyZWN0KToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5j
cHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcDoKKyAgICAg
ICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpuYXR1cmFsU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6CisgICAgICAgIChfV2ViS2l0VmlkZW9TaW5rUHJp
dmF0ZSk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0X2Z1bmMpOgorICAgICAg
ICAod2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5r
X2Rpc3Bvc2UpOgorICAgICAgICAodW5sb2NrQnVmZmVyTXV0ZXgpOgorICAgICAgICAod2Via2l0
X3ZpZGVvX3NpbmtfdW5sb2NrKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19z
dG9wKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0b3ApOgorICAgICAgICAod2Via2l0
X3ZpZGVvX3Npbmtfc3RhcnQpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfcHJvcG9zZV9h
bGxvY2F0aW9uKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaDoK
KwogMjAxMi0wNC0zMCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtL1dpbmRvd3NdIEFkZCBMb2NhbGl6ZWREYXRlV2luCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lv
bmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyVmVyc2lvbmluZy5jcHAKaW5kZXggZDQyMzhjMS4uYjIxYjJiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNp
b25pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKIAogdm9pZCB3ZWJraXRHc3RPYmplY3RSZWZTaW5rKEdzdE9iamVjdCogZ3N0T2Jq
ZWN0KQogewpAQCAtNDgsMyArNDksMzEgQEAgR3N0Q2Fwcyogd2Via2l0R3N0RWxlbWVudEdldFBh
ZENhcHMoR3N0RWxlbWVudCogZWxlbWVudCwgY29uc3QgY2hhciogZGlyZWN0aW9uKQogICAgIGdz
dF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChwYWQpKTsKICAgICByZXR1cm4gY2FwczsKIH0KKwor
Ym9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhHc3RDYXBzKiBjYXBzLCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBHc3RWaWRlb0Zvcm1hdCYgZm9ybWF0LCBpbnQmIHBpeGVs
QXNwZWN0UmF0aW9OdW1lcmF0b3IsIGludCYgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBp
bnQmIHN0cmlkZSkKK3sKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5m
byBpbmZvOworICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9S
TUFUKCZpbmZvKTsKKyAgICBzaXplLnNldFdpZHRoKEdTVF9WSURFT19JTkZPX1dJRFRIKCZpbmZv
KSk7CisgICAgc2l6ZS5zZXRIZWlnaHQoR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZpbmZvKSk7Cisg
ICAgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IEdTVF9WSURFT19JTkZPX1BBUl9OKCZpbmZv
KTsKKyAgICBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IgPSBHU1RfVklERU9fSU5GT19QQVJf
RCgmaW5mbyk7CisgICAgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RSSURFKCZpbmZv
LCAwKTsKKyNlbHNlCisgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworICAgIGlmICghR1NUX0lTX0NB
UFMoY2FwcykgfHwgIWdzdF9jYXBzX2lzX2ZpeGVkKGNhcHMpCisgICAgICAgIHx8ICFnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KQorICAg
ICAgICB8fCAhZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvKGNhcHMsICZw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc2l6ZS5zZXRXaWR0aCh3aWR0aCk7CisgICAgc2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICBzdHJpZGUgPSBzaXplLndpZHRoKCkgKiA0OworI2VuZGlm
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oCmlu
ZGV4IGZhYWRjMjYuLmZkNDI3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuaApA
QCAtMjEsOCArMjEsMTQgQEAKICNkZWZpbmUgR1N0cmVhbWVyVmVyc2lvbmluZ19oCiAKICNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEludFNpemU7Cit9OwogCiB2b2lkIHdlYmtpdEdzdE9iamVjdFJl
ZlNpbmsoR3N0T2JqZWN0Kik7CiBHc3RDYXBzKiB3ZWJraXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhH
c3RFbGVtZW50KiwgY29uc3QgY2hhciopOworYm9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3Jt
YXRGcm9tQ2FwcyhHc3RDYXBzKiwgV2ViQ29yZTo6SW50U2l6ZSYsIEdzdFZpZGVvRm9ybWF0Jiwg
aW50JiwgaW50JiwgaW50Jik7CiAKICNlbmRpZiAvLyBHU3RyZWFtZXJWZXJzaW9uaW5nX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyLmgKaW5kZXggYWI3OTliYS4uZjZhYzFhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIzLDIwICsyMywyNCBAQAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSA8Z3N0
L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZlcnNpb25pbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKK3R5
cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdENh
cHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsKIAogY2xh
c3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNy
ZWF0ZUltYWdlKEdzdEJ1ZmZlciopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdT
dHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIo
YnVmZmVyLCBjYXBzKSk7CisgICAgICAgIH0KICAgICAgICAgfkltYWdlR1N0cmVhbWVyKCk7CiAK
ICAgICAgICAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gaW1hZ2UoKQpAQCAtNDUsMjEgKzQ5LDE4
IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3RyZWFt
ZXI+IHsKICAgICAgICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgdm9pZCBzZXRDcm9wUmVjdChGbG9hdFJlY3QgcmVjdCkgeyBtX2Nyb3BSZWN0ID0gcmVj
dDsgfQorICAgICAgICBGbG9hdFJlY3QgcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbV9jcm9wUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dChtX2Nyb3BSZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEJpdG1hcEltYWdl
PiBtX2ltYWdlOwotCi0jaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RC
dWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXplLCBRSW1h
Z2U6OkZvcm1hdCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgSW1hZ2VH
U3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUpOwotI2VuZGlmCi0KKyAgICAgICAgRmxvYXRS
ZWN0IG1fY3JvcFJlY3Q7CisgICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciosIEdzdENh
cHMqKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmZTA5MjhiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QYXNzUmVmUHRyPEltYWdl
R1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIp
Ci17Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0g
Z3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsK
LSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVh
bWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpOwotfQotCi1JbWFnZUdTdHJlYW1l
cjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUpCi0gICAg
OiBtX2ltYWdlKDApCi17Ci0gICAgQVNTRVJUKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKLQot
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikp
LCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxsb2NhdG9yTnVsbCkpOwotICAgIFJldGFp
blB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKLSAgICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2Ug
PSBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUu
d2lkdGgoKSo0LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0JpdG1hcEJ5
dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwg
ZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwotICAgIG1faW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOwotfQotCi1JbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0
cmVhbWVyKCkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS5jbGVhcigpOwot
Ci0gICAgbV9pbWFnZSA9IDA7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4IGEwYmY1ZjQuLjAxODYzMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdT
dHJlYW1lckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKQEAgLTIyLDQwICsyMiw1MyBAQAogCiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNp
ZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEu
aD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZl
cikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0
Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBpbnQgd2lkdGggPSAwLCBoZWln
aHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7
CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9w
YXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0
X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBJbnRTaXpl
IHNpemU7CisgICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0
aW9EZW5vbWluYXRvciwgc3RyaWRlOworICAgIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZy
b21DYXBzKGNhcHMsIHNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4
ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpOwogCi0gICAgZ3N0X2NhcHNfdW5yZWYo
Y2Fwcyk7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RNYXBJbmZvIG1hcEluZm87
CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmbWFwSW5mbywgR1NUX01BUF9SRUFEKTsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwSW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZm
ZXIpKTsKKyNlbmRpZgogCiAgICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9Gb3JtYXQ7Ci0gICAgaWYg
KGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQkdSQSkKLSAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwot
ICAgIGVsc2UKLSAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7Ci0KLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSwgY2Fpcm9Gb3JtYXQpKTsKLX0KKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRU
TEVfRU5ESUFOCisgICAgY2Fpcm9Gb3JtYXQgPSAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRf
QkdSQSkgPyBDQUlST19GT1JNQVRfQVJHQjMyIDogQ0FJUk9fRk9STUFUX1JHQjI0OworI2Vsc2UK
KyAgICBjYWlyb0Zvcm1hdCA9IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSA/IENB
SVJPX0ZPUk1BVF9BUkdCMzIgOiBDQUlST19GT1JNQVRfUkdCMjQ7CisjZW5kaWYKIAotSW1hZ2VH
U3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXpl
LCBjYWlyb19mb3JtYXRfdCYgY2Fpcm9Gb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAg
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y
X2RhdGEoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIGNhaXJvRm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53
aWR0aCgpKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGVfZm9yX2RhdGEoYnVmZmVyRGF0YSwgY2Fpcm9Gb3JtYXQsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICBHc3RWaWRlb0Nyb3BNZXRhKiBjcm9wTWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3Bf
bWV0YShidWZmZXIpOworICAgIGlmIChjcm9wTWV0YSkKKyAgICAgICAgc2V0Q3JvcFJlY3QoRmxv
YXRSZWN0KGNyb3BNZXRhLT54LCBjcm9wTWV0YS0+eSwgY3JvcE1ldGEtPndpZHRoLCBjcm9wTWV0
YS0+aGVpZ2h0KSk7CisKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcEluZm8pOwor
I2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyUXQuY3BwCmluZGV4IDM2YjA4MDYuLjdiMjBhNzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJRdC5jcHAKQEAgLTIxLDM5ICsyMSw0OSBAQAogI2luY2x1ZGUgIkltYWdlR1N0
cmVhbWVyLmgiCiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5k
aWYKKwogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVh
bWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFn
ZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNh
cHMpCisgICAgOiBtX2ltYWdlKDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsK
LSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOworICAgIFFQ
aXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7
Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisgICAgSW50U2l6
ZSBzaXplOworICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IsIHN0cmlkZTsKKyAgICB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRG
cm9tQ2FwcyhjYXBzLCAmc2l6ZSwgJmZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwg
cGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpOwogCisjaWZkZWYgR1NUX0FQSV9W
RVJTSU9OXzEKKyAgICBHc3RNYXBJbmZvIGluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVy
LCAmaW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWNoYXIqPihpbmZvLmRhdGEpOworI2Vsc2UKKyAgICB1Y2hhciogYnVmZmVyRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7Cisj
ZW5kaWYKICAgICBRSW1hZ2U6OkZvcm1hdCBpbWFnZUZvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09
IEdTVF9WSURFT19GT1JNQVRfUkdCKQotICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9y
bWF0X1JHQjg4ODsKLSAgICBlbHNlCi0gICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3Jt
YXRfUkdCMzI7CisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgIGltYWdl
Rm9ybWF0ID0gKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpID8gUUltYWdlOjpGb3Jt
YXRfUkdCMzIgOiBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7CisjZWxzZQorICAgIGltYWdlRm9ybWF0
ID0gKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IpID8gUUltYWdlOjpGb3JtYXRfQVJH
QjMyIDogUUltYWdlOjpGb3JtYXRfUkdCODg4OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgaW1h
Z2VGb3JtYXQpKTsKLX0KKyAgICBRSW1hZ2UgaW1hZ2UoYnVmZmVyRGF0YSwgc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpLCBpbWFnZUZvcm1hdCk7CiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdT
dHJlYW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSwgUUltYWdlOjpGb3JtYXQg
aW1hZ2VGb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgUVBpeG1hcCogc3VyZmFjZSA9
IG5ldyBRUGl4bWFwOwotICAgIFFJbWFnZSBpbWFnZShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBpbWFnZUZvcm1hdCk7CiAgICAgc3VyZmFjZS0+
Y29udmVydEZyb21JbWFnZShpbWFnZSk7CiAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVh
dGUoc3VyZmFjZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF9idWZmZXJf
dW5tYXAoYnVmZmVyLCAmaW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFn
ZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwCmluZGV4IGQwOTkzYzIuLmM0ZTFkNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC0yNTMsMTAgKzI1MywxMiBAQCBNZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQogICAg
ICAgICBtX21lZGlhTG9jYXRpb25zID0gMDsKICAgICB9CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJT
SU9OXzEKICAgICBpZiAobV92aWRlb1NpbmtCaW4pIHsKICAgICAgICAgZ3N0X29iamVjdF91bnJl
ZihtX3ZpZGVvU2lua0Jpbik7CiAgICAgICAgIG1fdmlkZW9TaW5rQmluID0gMDsKICAgICB9Cisj
ZW5kaWYKIAogICAgIGlmIChtX3BsYXlCaW4pIHsKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0
YXRlKG1fcGxheUJpbiwgR1NUX1NUQVRFX05VTEwpOwpAQCAtNDk2LDkgKzQ5OCwxMCBAQCBJbnRT
aXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogICAg
IGlmICghY2FwcykKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKIAotICAgIGludCBwaXhlbEFz
cGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3I7CisgICAgaW50
IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwg
c3RyaWRlOwogICAgIGludCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlBc3Bl
Y3RSYXRpb0dDRDsKLSAgICBpbnQgb3JpZ2luYWxXaWR0aCA9IDAsIG9yaWdpbmFsSGVpZ2h0ID0g
MDsKKyAgICBJbnRTaXplIG9yaWdpbmFsU2l6ZTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7
CiAKICAgICAvLyBUT0RPOiBoYW5kbGUgcG9zc2libGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2Vl
CiAgICAgLy8gaHR0cHM6Ly9idWd6aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjU3
MQpAQCAtNTA3LDMwICs1MTAsMTUgQEAgSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKIAogICAgIC8vIEdldCB0aGUgdmlkZW8gUEFSIGFuZCBv
cmlnaW5hbCBzaXplLCBpZiB0aGlzIGZhaWxzIHRoZQogICAgIC8vIHZpZGVvLXNpbmsgaGFzIGxp
a2VseSBub3QgeWV0IG5lZ290aWF0ZWQgaXRzIGNhcHMuCi0jaWZkZWYgR1NUX0FQSV9WRVJTSU9O
XzEKLSAgICBHc3RWaWRlb0luZm8gaW5mbzsKLSAgICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21f
Y2FwcygmaW5mbywgY2FwcykpCisgICAgaWYgKCF3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRG
cm9tQ2FwcyhjYXBzLCBvcmlnaW5hbFNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVy
YXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpKQogICAgICAgICByZXR1
cm4gSW50U2l6ZSgpOwogCi0gICAgb3JpZ2luYWxXaWR0aCA9IEdTVF9WSURFT19JTkZPX1dJRFRI
KCZpbmZvKTsKLSAgICBvcmlnaW5hbEhlaWdodCA9IEdTVF9WSURFT19JTkZPX0hFSUdIVCgmaW5m
byk7Ci0gICAgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IEdTVF9WSURFT19JTkZPX1BBUl9O
KCZpbmZvKTsKLSAgICBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IgPSBHU1RfVklERU9fSU5G
T19QQVJfRCgmaW5mbyk7Ci0jZWxzZQotICAgIC8vIEdldCB0aGUgdmlkZW8gUEFSIGFuZCBvcmln
aW5hbCBzaXplLgotICAgIGlmICghR1NUX0lTX0NBUFMoY2FwcykgfHwgIWdzdF9jYXBzX2lzX2Zp
eGVkKGNhcHMpCi0gICAgICAgIHx8ICFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2Fwcywg
MCwgJm9yaWdpbmFsV2lkdGgsICZvcmlnaW5hbEhlaWdodCkKLSAgICAgICAgfHwgIWdzdF92aWRl
b19wYXJzZV9jYXBzX3BpeGVsX2FzcGVjdF9yYXRpbyhjYXBzLCAmcGl4ZWxBc3BlY3RSYXRpb051
bWVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKSkKLSAgICAgICAgcmV0dXJuIEludFNp
emUoKTsKLSNlbmRpZgotCi0gICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJPcmlnaW5hbCB2aWRlbyBz
aXplOiAlZHglZCIsIG9yaWdpbmFsV2lkdGgsIG9yaWdpbmFsSGVpZ2h0KTsKKyAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxTaXplLndp
ZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJQ
aXhlbCBhc3BlY3QgcmF0aW86ICVkLyVkIiwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4
ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKTsKIAogICAgIC8vIENhbGN1bGF0ZSBEQVIgYmFzZWQg
b24gUEFSIGFuZCB2aWRlbyBzaXplLgotICAgIGRpc3BsYXlXaWR0aCA9IG9yaWdpbmFsV2lkdGgg
KiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOwotICAgIGRpc3BsYXlIZWlnaHQgPSBvcmlnaW5h
bEhlaWdodCAqIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKKyAgICBkaXNwbGF5V2lkdGgg
PSBvcmlnaW5hbFNpemUud2lkdGgoKSAqIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3I7CisgICAg
ZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0UmF0aW9E
ZW5vbWluYXRvcjsKIAogICAgIC8vIERpdmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgYnkg
dGhlaXIgR0NEIHRvIGF2b2lkIHBvc3NpYmxlIG92ZXJmbG93cy4KICAgICBkaXNwbGF5QXNwZWN0
UmF0aW9HQ0QgPSBncmVhdGVzdENvbW1vbkRpdmlzb3IoZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVp
Z2h0KTsKQEAgLTUzOSwxOCArNTI3LDE4IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAKICAgICAvLyBBcHBseSBEQVIgdG8gb3JpZ2lu
YWwgdmlkZW8gc2l6ZS4gVGhpcyBpcyB0aGUgc2FtZSBiZWhhdmlvciBhcyBpbiB4dmltYWdlc2lu
aydzIHNldGNhcHMgZnVuY3Rpb24uCiAgICAgZ3VpbnQ2NCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7
Ci0gICAgaWYgKCEob3JpZ2luYWxIZWlnaHQgJSBkaXNwbGF5SGVpZ2h0KSkgeworICAgIGlmICgh
KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAlIGRpc3BsYXlIZWlnaHQpKSB7CiAgICAgICAgIExPR19W
RVJCT1NFKE1lZGlhLCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKLSAgICAgICAg
d2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsSGVpZ2h0LCBkaXNwbGF5
V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwotICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWlu
dDY0PihvcmlnaW5hbEhlaWdodCk7Ci0gICAgfSBlbHNlIGlmICghKG9yaWdpbmFsV2lkdGggJSBk
aXNwbGF5V2lkdGgpKSB7CisgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2lu
dChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7Cisg
ICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQo
KSk7CisgICAgfSBlbHNlIGlmICghKG9yaWdpbmFsU2l6ZS53aWR0aCgpICUgZGlzcGxheVdpZHRo
KSkgewogICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwg
d2lkdGgiKTsKLSAgICAgICAgaGVpZ2h0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmln
aW5hbFdpZHRoLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5V2lkdGgpOwotICAgICAgICB3aWR0aCA9
IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsV2lkdGgpOworICAgICAgICBoZWlnaHQgPSBn
c3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVp
Z2h0LCBkaXNwbGF5V2lkdGgpOworICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+
KG9yaWdpbmFsU2l6ZS53aWR0aCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBMT0dfVkVSQk9T
RShNZWRpYSwgIkFwcHJveGltYXRpbmcgd2hpbGUga2VlcGluZyBvcmlnaW5hbCB2aWRlbyBoZWln
aHQiKTsKLSAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFs
SGVpZ2h0LCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwotICAgICAgICBoZWlnaHQgPSBz
dGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbEhlaWdodCk7CisgICAgICAgIHdpZHRoID0gZ3N0
X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0
aCwgZGlzcGxheUhlaWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+
KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEs
ICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJTlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRfRk9STUFU
LCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTE0ODQsMTcgKzE0NzIsMjAgQEAgdm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
SW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWZQ
dHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdl
KG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gd2Via2l0R3N0RWxlbWVudEdldFBhZENh
cHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAgaWYgKCFjYXBzKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3Ry
ZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKICAgICBpZiAoIWdzdEltYWdlKQog
ICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRlcnByZXRfY2Fz
dDxJbWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNSR0IsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QsIENvbXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdl
T3JpZW50YXRpb24sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgZ3N0SW1h
Z2UtPnJlY3QoKSwgQ29tcG9zaXRlQ29weSwgRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwg
ZmFsc2UpOwogfQogCiBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogewot
CiAgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVudHMoKTsKIAog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNoZSwgKCkpOwpAQCAt
MTUxMiw3ICsxNTAzLDExIEBAIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVDYWNoZSgp
CiAgICAgICAgIGZvciAoR0xpc3QqIGl0ZXJhdG9yID0gZmFjdG9yaWVzOyBpdGVyYXRvcjsgaXRl
cmF0b3IgPSBpdGVyYXRvci0+bmV4dCkgewogICAgICAgICAgICAgR3N0VHlwZUZpbmRGYWN0b3J5
KiBmYWN0b3J5ID0gR1NUX1RZUEVfRklORF9GQUNUT1JZKGl0ZXJhdG9yLT5kYXRhKTsKICAgICAg
ICAgICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfdHlwZV9maW5kX2ZhY3RvcnlfZ2V0X2NhcHMoZmFj
dG9yeSk7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICogY29uc3QgKiBleHRlbnNpb25zOworI2Vsc2UKICAgICAgICAgICAgIGdjaGFyKiogZXh0ZW5z
aW9uczsKKyNlbmRpZgogCiAgICAgICAgICAgICBpZiAoIWNhcHMpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7CkBAIC0xNzI1LDcgKzE3MjAsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5
QmluLCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9D
aGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwg
ImF1ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBtX3dl
YmtpdFZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5rX25ldyhtX2dzdEdXb3JsZC5nZXQoKSk7
CisjZWxzZQorICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0X3ZpZGVvX3NpbmtfbmV3KCk7
CisjZW5kaWYKIAogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmssICJyZXBh
aW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxi
YWNrKSwgdGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggNDM2
MzAzNi4uNGFmNjhiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTEs
NiArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwNyBPcGVuZWRIYW5kCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiAgQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIElnYWxpYSBTLkwKICAqCiAgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKQEAgLTE3LDMzICsxOCw0MiBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAK
LS8qKgotICogU0VDVElPTjp3ZWJraXQtdmlkZW8tc2luawotICogQHNob3J0X2Rlc2NyaXB0aW9u
OiBHU3RyZWFtZXIgdmlkZW8gc2luaworLyoKICAqCi0gKiAjV2ViS2l0VmlkZW9TaW5rIGlzIGEg
R1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHRyaWdnZXJzCisgKiBXZWJLaXRWaWRlb1Npbmsg
aXMgYSBHU3RyZWFtZXIgc2luayBlbGVtZW50IHRoYXQgdHJpZ2dlcnMKICAqIHJlcGFpbnRzIGlu
IHRoZSBXZWJLaXQgR1N0cmVhbWVyIG1lZGlhIHBsYXllciBmb3IgdGhlCiAgKiBjdXJyZW50IHZp
ZGVvIGJ1ZmZlci4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKEdTVFJFQU1F
UikKICNpbmNsdWRlICJWaWRlb1NpbmtHU3RyZWFtZXIuaCIKLSNpZiBFTkFCTEUoVklERU8pICYm
IFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5o
PgorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVv
bWV0YS5oPgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Bvb2wuaD4KKyNlbmRpZgogI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+
CiAKLXN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rdGVtcGxhdGUgPSBHU1RfU1RBVElD
X1BBRF9URU1QTEFURSgic2luayIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FM
V0FZUywKIC8vIENBSVJPX0ZPUk1BVF9SR0IyNCB1c2VkIHRvIHJlbmRlciB0aGUgdmlkZW8gYnVm
ZmVycyBpcyBsaXR0bGUvYmlnIGVuZGlhbiBkZXBlbmRhbnQuCiAjaWYgR19CWVRFX09SREVSID09
IEdfTElUVExFX0VORElBTgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQ
U19CR1J4ICI7IiBHU1RfVklERU9fQ0FQU19CR1JBKQorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05f
MQorI2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUyBHU1RfVklERU9fQ0FQU19CR1J4
ICI7IiBHU1RfVklERU9fQ0FQU19CR1JBCisjZWxzZQorI2RlZmluZSBXRUJLSVRfVklERU9fU0lO
S19QQURfQ0FQUyBHU1RfVklERU9fQ0FQU19NQUtFKCJ7IEJHUngsIEJHUkEgfSIpCisjZW5kaWYK
KyNlbHNlCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjZGVmaW5lIFdFQktJVF9WSURFT19T
SU5LX1BBRF9DQVBTIEdTVF9WSURFT19DQVBTX3hSR0IgIjsiIEdTVF9WSURFT19DQVBTX0FSR0IK
ICNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR1NUX1NUQVRJQ19DQVBTKEdTVF9WSURFT19DQVBTX3hSR0IgIjsi
IEdTVF9WSURFT19DQVBTX0FSR0IpCisjZGVmaW5lIFdFQktJVF9WSURFT19TSU5LX1BBRF9DQVBT
IEdTVF9WSURFT19DQVBTX01BS0UoInsgeFJHQiwgQVJHQiB9IikKICNlbmRpZgotKTsKKyNlbmRp
Zgorc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNpbmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNf
UEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NUX1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NU
QVRJQ19DQVBTKFdFQktJVF9WSURFT19TSU5LX1BBRF9DQVBTKSk7CisKIAogR1NUX0RFQlVHX0NB
VEVHT1JZX1NUQVRJQyh3ZWJraXRfdmlkZW9fc2lua19kZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRf
REVGQVVMVCB3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZwpAQCAtNjEsMTAgKzcxLDE3IEBAIHN0YXRp
YyBndWludCB3ZWJraXRfdmlkZW9fc2lua19zaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsK
IAogc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtQcml2YXRlIHsKICAgICBHc3RCdWZmZXIqIGJ1ZmZl
cjsKLSAgICBndWludCB0aW1lb3V0X2lkOwotICAgIEdNdXRleCogYnVmZmVyX211dGV4OwotICAg
IEdDb25kKiBkYXRhX2NvbmQ7CisgICAgZ3VpbnQgdGltZW91dElkOworICAgIEdNdXRleCogYnVm
ZmVyTXV0ZXg7CisgICAgR0NvbmQqIGRhdGFDb25kaXRpb247CisKKyNpZmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyBpbmZvOworI2VuZGlmCisKKyNpZm5kZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKICAgICBXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3JsZDsKKyNl
bmRpZgogCiAgICAgLy8gSWYgdGhpcyBpcyBUUlVFIGFsbCBwcm9jZXNzaW5nIHNob3VsZCBmaW5p
c2ggQVNBUAogICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgY291bGQgYmUg
YSByYWNlIGJldHdlZW4KQEAgLTc0LDE0OSArOTEsMTY1IEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9T
aW5rUHJpdmF0ZSB7CiAgICAgLy8gdG8gZGVhZGxvY2tzIGJlY2F1c2UgcmVuZGVyKCkgaG9sZHMg
dGhlIHN0cmVhbSBsb2NrLgogICAgIC8vCiAgICAgLy8gUHJvdGVjdGVkIGJ5IHRoZSBidWZmZXIg
bXV0ZXgKLSAgICBnYm9vbGVhbiB1bmxvY2tlZDsKKyAgICBib29sIHVubG9ja2VkOwogfTsKIAot
I2RlZmluZSBfZG9faW5pdChibGEpIFwKLSAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJr
aXRfdmlkZW9fc2lua19kZWJ1ZywgXAorI2RlZmluZSB3ZWJraXRfdmlkZW9fc2lua19wYXJlbnRf
Y2xhc3MgcGFyZW50X2NsYXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRWaWRlb1Np
bmssIHdlYmtpdF92aWRlb19zaW5rLCBHU1RfVFlQRV9WSURFT19TSU5LLCBHU1RfREVCVUdfQ0FU
RUdPUllfSU5JVCh3ZWJraXRfdmlkZW9fc2lua19kZWJ1ZywgXAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ3ZWJraXRzaW5rIiwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0IHZpZGVvIHNpbmsiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXQgdmlkZW8gc2luayIpKTsKIAotR1NUX0JP
SUxFUlBMQVRFX0ZVTEwoV2ViS2l0VmlkZW9TaW5rLAotICAgICAgICAgICAgICAgICAgICAgd2Vi
a2l0X3ZpZGVvX3NpbmssCi0gICAgICAgICAgICAgICAgICAgICBHc3RWaWRlb1NpbmssCi0gICAg
ICAgICAgICAgICAgICAgICBHU1RfVFlQRV9WSURFT19TSU5LLAotICAgICAgICAgICAgICAgICAg
ICAgX2RvX2luaXQpOwogCi1zdGF0aWMgdm9pZAotd2Via2l0X3ZpZGVvX3NpbmtfYmFzZV9pbml0
KGdwb2ludGVyIGdfY2xhc3MpCi17Ci0gICAgR3N0RWxlbWVudENsYXNzKiBlbGVtZW50X2NsYXNz
ID0gR1NUX0VMRU1FTlRfQ0xBU1MoZ19jbGFzcyk7Ci0KLSAgICBnc3RfZWxlbWVudF9jbGFzc19h
ZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRfY2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dl
dCgmc2lua3RlbXBsYXRlKSk7Ci0gICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2lt
cGxlKGVsZW1lbnRfY2xhc3MsICJXZWJLaXQgdmlkZW8gc2luayIsCi0gICAgICAgICAgICAiU2lu
ay9WaWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8g
YSBDYWlybyBzdXJmYWNlIiwKLSAgICAgICAgICAgICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PiIpOwotfQotCi1zdGF0aWMgdm9pZAotd2Via2l0X3ZpZGVvX3NpbmtfaW5pdChXZWJLaXRWaWRl
b1NpbmsqIHNpbmssIFdlYktpdFZpZGVvU2lua0NsYXNzKiBrbGFzcykKK3N0YXRpYyB2b2lkIHdl
YmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rKQogewotICAgIFdlYktp
dFZpZGVvU2lua1ByaXZhdGUqIHByaXY7Ci0KLSAgICBzaW5rLT5wcml2ID0gcHJpdiA9IEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJL
aXRWaWRlb1NpbmtQcml2YXRlKTsKKyAgICBzaW5rLT5wcml2ID0gR19UWVBFX0lOU1RBTkNFX0dF
VF9QUklWQVRFKHNpbmssIFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIFdlYktpdFZpZGVvU2lua1By
aXZhdGUpOwogI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAzMSwgMCkKLSAgICBwcml2LT5kYXRh
X2NvbmQgPSBXVEY6OmZhc3ROZXc8R0NvbmQ+KCk7Ci0gICAgZ19jb25kX2luaXQocHJpdi0+ZGF0
YV9jb25kKTsKLSAgICBwcml2LT5idWZmZXJfbXV0ZXggPSBXVEY6OmZhc3ROZXc8R011dGV4Pigp
OwotICAgIGdfbXV0ZXhfaW5pdChwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIHNpbmstPnByaXYt
PmRhdGFDb25kaXRpb24gPSBXVEY6OmZhc3ROZXc8R0NvbmQ+KCk7CisgICAgZ19jb25kX2luaXQo
c2luay0+cHJpdi0+ZGF0YUNvbmRpdGlvbik7CisgICAgc2luay0+cHJpdi0+YnVmZmVyTXV0ZXgg
PSBXVEY6OmZhc3ROZXc8R011dGV4PigpOworICAgIGdfbXV0ZXhfaW5pdChzaW5rLT5wcml2LT5i
dWZmZXJNdXRleCk7CiAjZWxzZQotICAgIHByaXYtPmRhdGFfY29uZCA9IGdfY29uZF9uZXcoKTsK
LSAgICBwcml2LT5idWZmZXJfbXV0ZXggPSBnX211dGV4X25ldygpOworICAgIHByaXYtPmRhdGFD
b25kaXRpb24gPSBnX2NvbmRfbmV3KCk7CisgICAgcHJpdi0+YnVmZmVyTXV0ZXggPSBnX211dGV4
X25ldygpOworI2VuZGlmCisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF92aWRl
b19pbmZvX2luaXQoJnNpbmstPnByaXYtPmluZm8pOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBnYm9v
bGVhbgotd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jKGdwb2ludGVyIGRhdGEpCitzdGF0
aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdGltZW91dF9mdW5jKGdwb2ludGVyIGRhdGEp
CiB7CiAgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gcmVpbnRlcnByZXRfY2FzdDxXZWJLaXRW
aWRlb1NpbmsqPihkYXRhKTsKICAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2lu
ay0+cHJpdjsKLSAgICBHc3RCdWZmZXIqIGJ1ZmZlcjsKIAotICAgIGdfbXV0ZXhfbG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOwotICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKKyAgICBnX211dGV4
X2xvY2socHJpdi0+YnVmZmVyTXV0ZXgpOworICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gcHJpdi0+
YnVmZmVyOwogICAgIHByaXYtPmJ1ZmZlciA9IDA7Ci0gICAgcHJpdi0+dGltZW91dF9pZCA9IDA7
CisgICAgcHJpdi0+dGltZW91dElkID0gMDsKIAotICAgIGlmICghYnVmZmVyIHx8IHByaXYtPnVu
bG9ja2VkIHx8IEdfVU5MSUtFTFkoIUdTVF9JU19CVUZGRVIoYnVmZmVyKSkpIHsKLSAgICAgICAg
Z19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOwotICAgICAgICBnX211dGV4X3VubG9jayhw
cml2LT5idWZmZXJfbXV0ZXgpOworICAgIGlmICghYnVmZmVyIHx8IHByaXYtPnVubG9ja2VkIHx8
IFVOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7CisgICAgICAgIGdfY29uZF9zaWdu
YWwocHJpdi0+ZGF0YUNvbmRpdGlvbik7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1
ZmZlck11dGV4KTsKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIH0KIAogICAgIGdfc2lnbmFs
X2VtaXQoc2luaywgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0s
IDAsIGJ1ZmZlcik7CiAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwotICAgIGdfY29uZF9z
aWduYWwocHJpdi0+ZGF0YV9jb25kKTsKLSAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJf
bXV0ZXgpOworICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YUNvbmRpdGlvbik7CisgICAgZ19t
dXRleF91bmxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwogCiAgICAgcmV0dXJuIEZBTFNFOwogfQog
Ci1zdGF0aWMgR3N0Rmxvd1JldHVybgotd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKEdzdEJhc2VT
aW5rKiBic2luaywgR3N0QnVmZmVyKiBidWZmZXIpCitzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJr
aXRfdmlkZW9fc2lua19yZW5kZXIoR3N0QmFzZVNpbmsqIGJhc2VTaW5rLCBHc3RCdWZmZXIqIGJ1
ZmZlcikKIHsKLSAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhi
c2luayk7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYmFz
ZVNpbmspOwogICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5wcml2Owog
Ci0gICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19tdXRleF9sb2Nr
KHByaXYtPmJ1ZmZlck11dGV4KTsKIAogICAgIGlmIChwcml2LT51bmxvY2tlZCkgewotICAgICAg
ICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBnX211dGV4X3Vu
bG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKICAg
ICB9CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAvLyBJZ25vcmUgYnVmZmVycyBp
ZiB0aGUgdmlkZW8gaXMgYWxyZWFkeSBpbiBmdWxsc2NyZWVuIHVzaW5nCiAgICAgLy8gYW5vdGhl
ciBzaW5rLgogICAgIGlmIChwcml2LT5nc3RHV29ybGQtPmlzRnVsbHNjcmVlbigpKSB7Ci0gICAg
ICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIGdfbXV0ZXhf
dW5sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwog
ICAgIH0KKyNlbmRpZgogCiAgICAgcHJpdi0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYoYnVmZmVy
KTsKIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIC8vIEZvciB0aGUgdW5saWtlbHkg
Y2FzZSB3aGVyZSB0aGUgYnVmZmVyIGhhcyBubyBjYXBzLCB0aGUgY2FwcwogICAgIC8vIGFyZSBp
bXBsaWNpdGVseSB0aGUgY2FwcyBvZiB0aGUgcGFkLiBUaGlzIHNob3VsZG4ndCBoYXBwZW4uCi0g
ICAgaWYgKEdfVU5MSUtFTFkoIUdTVF9CVUZGRVJfQ0FQUyhidWZmZXIpKSkgeworICAgIGlmIChV
TkxJS0VMWSghR1NUX0JVRkZFUl9DQVBTKGJ1ZmZlcikpKSB7CiAgICAgICAgIGJ1ZmZlciA9IHBy
aXYtPmJ1ZmZlciA9IGdzdF9idWZmZXJfbWFrZV9tZXRhZGF0YV93cml0YWJsZShwcml2LT5idWZm
ZXIpOwotICAgICAgICBnc3RfYnVmZmVyX3NldF9jYXBzKHByaXYtPmJ1ZmZlciwgR1NUX1BBRF9D
QVBTKEdTVF9CQVNFX1NJTktfUEFEKGJzaW5rKSkpOworICAgICAgICBnc3RfYnVmZmVyX3NldF9j
YXBzKHByaXYtPmJ1ZmZlciwgR1NUX1BBRF9DQVBTKEdTVF9CQVNFX1NJTktfUEFEKGJhc2VTaW5r
KSkpOwogICAgIH0KIAogICAgIEdzdENhcHMgKmNhcHMgPSBHU1RfQlVGRkVSX0NBUFMoYnVmZmVy
KTsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7CiAgICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0g
ICAgaWYgKEdfVU5MSUtFTFkoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9y
bWF0LCAmd2lkdGgsICZoZWlnaHQpKSkgeworICAgIGlmIChVTkxJS0VMWSghZ3N0X3ZpZGVvX2Zv
cm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpKSB7CisgICAg
ICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJp
di0+YnVmZmVyTXV0ZXgpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CisgICAgfQor
I2Vsc2UKKyAgICBHc3RWaWRlb0ZyYW1lIGZyYW1lOworICAgIGlmICghZ3N0X3ZpZGVvX2ZyYW1l
X21hcCgmZnJhbWUsICZwcml2LT5pbmZvLCBidWZmZXIsIEdTVF9NQVBfUkVBRCkpIHsKICAgICAg
ICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwotICAgICAgICBnX211dGV4X3VubG9jayhwcml2
LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRl
eCk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKICAgICB9CiAKKyAgICBHc3RWaWRl
b0Zvcm1hdCBmb3JtYXQgPSBHU1RfVklERU9fRlJBTUVfRk9STUFUKCZmcmFtZSk7CisgICAgaW50
IHdpZHRoID0gR1NUX1ZJREVPX0ZSQU1FX1dJRFRIKCZmcmFtZSk7CisgICAgaW50IGhlaWdodCA9
IEdTVF9WSURFT19GUkFNRV9IRUlHSFQoJmZyYW1lKTsKKworICAgIGdzdF92aWRlb19mcmFtZV91
bm1hcCgmZnJhbWUpOworI2VuZGlmCisKICAgICAvLyBDYWlybydzIEFSR0IgaGFzIHByZS1tdWx0
aXBsaWVkIGFscGhhIHdoaWxlIEdTdHJlYW1lcidzIGRvZXNuJ3QuCiAgICAgLy8gSGVyZSB3ZSBj
b252ZXJ0IHRvIENhaXJvJ3MgQVJHQi4KICAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JN
QVRfQVJHQiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSB7CiAgICAgICAgIC8v
IEJlY2F1c2UgR3N0QmFzZVNpbms6OnJlbmRlcigpIG9ubHkgb3ducyB0aGUgYnVmZmVyIHJlZmVy
ZW5jZSBpbiB0aGUKICAgICAgICAgLy8gbWV0aG9kIHNjb3BlIHdlIGNhbid0IHVzZSBnc3RfYnVm
ZmVyX21ha2Vfd3JpdGFibGUoKSBoZXJlLiBBbHNvCiAgICAgICAgIC8vIFRoZSBidWZmZXIgY29u
dGVudCBzaG91bGQgbm90IGJlIGNoYW5nZWQgaGVyZSBiZWNhdXNlIHRoZSBzYW1lIGJ1ZmZlcgot
ICAgICAgICAvLyBjb3VsZCBiZSBwYXNzZWQgbXVsdGlwbGUgdGltZXMgdG8gdGhpcyBtZXRob2Qg
KGluIHRoZW9yeSkKKyAgICAgICAgLy8gY291bGQgYmUgcGFzc2VkIG11bHRpcGxlIHRpbWVzIHRv
IHRoaXMgbWV0aG9kIChpbiB0aGVvcnkpLgorCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAg
ICAgICAgIEdzdEJ1ZmZlciAqbmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxv
YyhHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSk7CisjZWxzZQorICAgICAgICBnc2l6ZSBidWZmZXJT
aXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworICAgICAgICBHc3RCdWZmZXIqIG5l
d0J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyNlbmRpZgog
Ci0gICAgICAgIC8vIENoZWNrIGlmIGFsbG9jYXRpb24gZmFpbGVkCi0gICAgICAgIGlmIChHX1VO
TElLRUxZKCFuZXdCdWZmZXIpKSB7Ci0gICAgICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZl
cik7Ci0gICAgICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAg
ICAgICAvLyBDaGVjayBpZiBhbGxvY2F0aW9uIGZhaWxlZC4KKyAgICAgICAgaWYgKFVOTElLRUxZ
KCFuZXdCdWZmZXIpKSB7CisgICAgICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJN
dXRleCk7CiAgICAgICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CiAgICAgICAgIH0KIAot
ICAgICAgICBnc3RfYnVmZmVyX2NvcHlfbWV0YWRhdGEobmV3QnVmZmVyLCBidWZmZXIsIChHc3RC
dWZmZXJDb3B5RmxhZ3MpIEdTVF9CVUZGRVJfQ09QWV9BTEwpOworI2lmbmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQorICAgICAgICBnc3RfYnVmZmVyX2NvcHlfbWV0YWRhdGEobmV3QnVmZmVyLCBidWZm
ZXIsIHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX0FMTCkp
OworI2Vsc2UKKyAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZmZXIs
IHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRB
KSwgMCwgYnVmZmVyU2l6ZSk7CisjZW5kaWYKIAogICAgICAgICAvLyBXZSBkb24ndCB1c2UgQ29s
b3I6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKCkgaGVyZSBiZWNhdXNlCiAgICAgICAgIC8v
IG9uZSBmdW5jdGlvbiBjYWxsIHBlciB2aWRlbyBwaXhlbCBpcyBqdXN0IHRvbyBleHBlbnNpdmU6
CiAgICAgICAgIC8vIEZvciA3MjBwL1BBTCBmb3IgZXhhbXBsZSB0aGlzIG1lYW5zIDEyODAqNzIw
KjI1PTIzMDQwMDAwCiAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxzIHBlciBzZWNvbmQhCi0gICAg
ICAgIHVuc2lnbmVkIHNob3J0IGFscGhhOworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAg
ICAgICBjb25zdCBndWludDggKnNvdXJjZSA9IEdTVF9CVUZGRVJfREFUQShidWZmZXIpOwogICAg
ICAgICBndWludDggKmRlc3RpbmF0aW9uID0gR1NUX0JVRkZFUl9EQVRBKG5ld0J1ZmZlcik7Cisj
ZWxzZQorICAgICAgICBHc3RNYXBJbmZvIHNvdXJjZUluZm87CisgICAgICAgIEdzdE1hcEluZm8g
ZGVzdGluYXRpb25JbmZvOworICAgICAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZzb3VyY2VJ
bmZvLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBjb25zdCBndWludDgqIHNvdXJjZSA9IGNvbnN0
X2Nhc3Q8Z3VpbnQ4Kj4oc291cmNlSW5mby5kYXRhKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAo
bmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAgZ3Vp
bnQ4KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGd1aW50OCo+KGRlc3RpbmF0aW9uSW5mby5k
YXRhKTsKKyNlbmRpZgogCiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgaGVpZ2h0OyB4Kysp
IHsKICAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgd2lkdGg7IHkrKykgewogI2lmIEdf
QllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSAgICAgICAgICAgICAgICBhbHBoYSA9IHNv
dXJjZVszXTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhbHBoYSA9IHNvdXJjZVsz
XTsKICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IChzb3VyY2VbMF0gKiBhbHBoYSAr
IDEyOCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMV0gPSAoc291cmNlWzFd
ICogYWxwaGEgKyAxMjgpIC8gMjU1OwogICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzJdID0g
KHNvdXJjZVsyXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKICAgICAgICAgICAgICAgICBkZXN0aW5h
dGlvblszXSA9IGFscGhhOwogI2Vsc2UKLSAgICAgICAgICAgICAgICBhbHBoYSA9IHNvdXJjZVsw
XTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhbHBoYSA9IHNvdXJjZVswXTsKICAg
ICAgICAgICAgICAgICBkZXN0aW5hdGlvblswXSA9IGFscGhhOwogICAgICAgICAgICAgICAgIGRl
c3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKICAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSArIDEyOCkgLyAyNTU7
CkBAIC0yMjYsMTEzICsyNTksMTMwIEBAIHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcihHc3RCYXNl
U2luayogYnNpbmssIEdzdEJ1ZmZlciogYnVmZmVyKQogICAgICAgICAgICAgICAgIGRlc3RpbmF0
aW9uICs9IDQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmc291cmNlSW5mbyk7Cisg
ICAgICAgIGdzdF9idWZmZXJfdW5tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvKTsKKyNl
bmRpZgogICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CiAgICAgICAgIGJ1ZmZlciA9
IHByaXYtPmJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgICB9CiAKKwogICAgIC8vIFRoaXMgc2hvdWxk
IGxpa2VseSB1c2UgYSBsb3dlciBwcmlvcml0eSwgYnV0IGdsaWIgY3VycmVudGx5IHN0YXJ2ZXMK
ICAgICAvLyBsb3dlciBwcmlvcml0eSBzb3VyY2VzLgogICAgIC8vIFNlZTogaHR0cHM6Ly9idWd6
aWxsYS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTYxMDgzMC4KLSAgICBwcml2LT50aW1lb3V0
X2lkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwKKyAgICBwcml2
LT50aW1lb3V0SWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR19QUklPUklUWV9ERUZBVUxULCAwLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Via2l0X3ZpZGVvX3Np
bmtfdGltZW91dF9mdW5jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ3N0X29iamVjdF9yZWYoc2luayksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoR0Rlc3Ryb3lOb3RpZnkpZ3N0X29iamVjdF91bnJlZik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdEZXN0cm95
Tm90aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CiAKLSAgICBnX2NvbmRfd2FpdChwcml2LT5kYXRh
X2NvbmQsIHByaXYtPmJ1ZmZlcl9tdXRleCk7Ci0gICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVm
ZmVyX211dGV4KTsKKyAgICBnX2NvbmRfd2FpdChwcml2LT5kYXRhQ29uZGl0aW9uLCBwcml2LT5i
dWZmZXJNdXRleCk7CisgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwogICAg
IHJldHVybiBHU1RfRkxPV19PSzsKIH0KIAotc3RhdGljIHZvaWQKLXdlYmtpdF92aWRlb19zaW5r
X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQorc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3Npbmtf
ZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0g
V0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsKICAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBw
cml2ID0gc2luay0+cHJpdjsKIAotICAgIGlmIChwcml2LT5kYXRhX2NvbmQpIHsKKyAgICBpZiAo
cHJpdi0+ZGF0YUNvbmRpdGlvbikgewogI2lmIEdMSUJfQ0hFQ0tfVkVSU0lPTigyLCAzMSwgMCkK
LSAgICAgICAgZ19jb25kX2NsZWFyKHByaXYtPmRhdGFfY29uZCk7Ci0gICAgICAgIFdURjo6ZmFz
dERlbGV0ZShwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBnX2NvbmRfY2xlYXIocHJpdi0+ZGF0
YUNvbmRpdGlvbik7CisgICAgICAgIFdURjo6ZmFzdERlbGV0ZShwcml2LT5kYXRhQ29uZGl0aW9u
KTsKICNlbHNlCi0gICAgICAgIGdfY29uZF9mcmVlKHByaXYtPmRhdGFfY29uZCk7CisgICAgICAg
IGdfY29uZF9mcmVlKHByaXYtPmRhdGFDb25kaXRpb24pOwogI2VuZGlmCi0gICAgICAgIHByaXYt
PmRhdGFfY29uZCA9IDA7CisgICAgICAgIHByaXYtPmRhdGFDb25kaXRpb24gPSAwOwogICAgIH0K
IAotICAgIGlmIChwcml2LT5idWZmZXJfbXV0ZXgpIHsKKyAgICBpZiAocHJpdi0+YnVmZmVyTXV0
ZXgpIHsKICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwgMzEsIDApCi0gICAgICAgIGdfbXV0ZXhf
Y2xlYXIocHJpdi0+YnVmZmVyX211dGV4KTsKLSAgICAgICAgV1RGOjpmYXN0RGVsZXRlKHByaXYt
PmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIGdfbXV0ZXhfY2xlYXIocHJpdi0+YnVmZmVyTXV0ZXgp
OworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+YnVmZmVyTXV0ZXgpOwogI2Vsc2UKLSAg
ICAgICAgZ19tdXRleF9mcmVlKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgICAgIGdfbXV0ZXhf
ZnJlZShwcml2LT5idWZmZXJNdXRleCk7CiAjZW5kaWYKLSAgICAgICAgcHJpdi0+YnVmZmVyX211
dGV4ID0gMDsKKyAgICAgICAgcHJpdi0+YnVmZmVyTXV0ZXggPSAwOwogICAgIH0KIAogICAgIEdf
T0JKRUNUX0NMQVNTKHBhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKIH0KIAotc3RhdGlj
IHZvaWQKLXVubG9ja19idWZmZXJfbXV0ZXgoV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdikK
K3N0YXRpYyB2b2lkIHVubG9ja0J1ZmZlck11dGV4KFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHBy
aXYpCiB7Ci0gICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19tdXRl
eF9sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKIAogICAgIGlmIChwcml2LT5idWZmZXIpIHsKICAg
ICAgICAgZ3N0X2J1ZmZlcl91bnJlZihwcml2LT5idWZmZXIpOwogICAgICAgICBwcml2LT5idWZm
ZXIgPSAwOwogICAgIH0KIAotICAgIHByaXYtPnVubG9ja2VkID0gVFJVRTsKKyAgICBwcml2LT51
bmxvY2tlZCA9IHRydWU7CiAKLSAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7Ci0g
ICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBnX2NvbmRfc2lnbmFs
KHByaXYtPmRhdGFDb25kaXRpb24pOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlck11
dGV4KTsKIH0KIAotc3RhdGljIGdib29sZWFuCi13ZWJraXRfdmlkZW9fc2lua191bmxvY2soR3N0
QmFzZVNpbmsqIG9iamVjdCkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua191bmxv
Y2soR3N0QmFzZVNpbmsqIGJhc2VTaW5rKQogewotICAgIFdlYktpdFZpZGVvU2luayogc2luayA9
IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7CisgICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0g
V0VCS0lUX1ZJREVPX1NJTksoYmFzZVNpbmspOwogCi0gICAgdW5sb2NrX2J1ZmZlcl9tdXRleChz
aW5rLT5wcml2KTsKKyAgICB1bmxvY2tCdWZmZXJNdXRleChzaW5rLT5wcml2KTsKIAotICAgIHJl
dHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVu
bG9jaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0KSwg
VFJVRSk7CisgICAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0Vf
U0lOS19DTEFTUywgdW5sb2NrLCAoYmFzZVNpbmspLCBUUlVFKTsKIH0KIAotc3RhdGljIGdib29s
ZWFuCi13ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcChHc3RCYXNlU2luayogb2JqZWN0KQor
c3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9wKEdzdEJhc2VTaW5r
KiBiYXNlU2luaykKIHsKLSAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9f
U0lOSyhvYmplY3QpOwotICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBzaW5rLT5w
cml2OworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lO
SyhiYXNlU2luayktPnByaXY7CiAKLSAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4
KTsKLSAgICBwcml2LT51bmxvY2tlZCA9IEZBTFNFOwotICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYt
PmJ1ZmZlcl9tdXRleCk7CisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKKyAg
ICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKIAotICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9C
QVNFX1NJTktfQ0xBU1MsIHVubG9ja19zdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChvYmplY3QpLCBUUlVFKTsKKyAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5U
X1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2tfc3RvcCwgKGJhc2VTaW5r
KSwgVFJVRSk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3Npbmtfc3RvcChH
c3RCYXNlU2luayogYmFzZV9zaW5rKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5r
X3N0b3AoR3N0QmFzZVNpbmsqIGJhc2VTaW5rKQogewotICAgIFdlYktpdFZpZGVvU2lua1ByaXZh
dGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3NpbmspLT5wcml2OworICAgIHVubG9j
a0J1ZmZlck11dGV4KFdFQktJVF9WSURFT19TSU5LKGJhc2VTaW5rKS0+cHJpdik7CisgICAgcmV0
dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19zdGFydChH
c3RCYXNlU2luayogYmFzZVNpbmspCit7CisgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJp
diA9IFdFQktJVF9WSURFT19TSU5LKGJhc2VTaW5rKS0+cHJpdjsKIAotICAgIHVubG9ja19idWZm
ZXJfbXV0ZXgocHJpdik7CisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKKyAg
ICBwcml2LT51bmxvY2tlZCA9IGZhbHNlOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZl
ck11dGV4KTsKICAgICByZXR1cm4gVFJVRTsKIH0KIAotc3RhdGljIGdib29sZWFuCi13ZWJraXRf
dmlkZW9fc2lua19zdGFydChHc3RCYXNlU2luayogYmFzZV9zaW5rKQorI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfcHJvcG9zZV9hbGxv
Y2F0aW9uKEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0UXVlcnkqIHF1ZXJ5KQogewotICAgIFdl
YktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlX3Npbmsp
LT5wcml2OworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJh
c2VTaW5rKTsKKyAgICBHc3RDYXBzKiBjYXBzOworICAgIGdib29sZWFuIG5lZWRfcG9vbDsKIAot
ICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwotICAgIHByaXYtPnVubG9ja2Vk
ID0gRkFMU0U7Ci0gICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBn
c3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbihxdWVyeSwgJmNhcHMsICZuZWVkX3Bvb2wpOworCisg
ICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAoIWdzdF92aWRl
b19pbmZvX2Zyb21fY2Fwcygmc2luay0+cHJpdi0+aW5mbywgY2FwcykpCisgICAgICAgIHJldHVy
biBGQUxTRTsKKworICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhKHF1ZXJ5LCBHU1Rf
VklERU9fTUVUQV9BUElfVFlQRSk7CisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0aW9uX21ldGEo
cXVlcnksIEdTVF9WSURFT19DUk9QX01FVEFfQVBJX1RZUEUpOwogICAgIHJldHVybiBUUlVFOwog
fQorI2VuZGlmCiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIHN0YXRpYyB2b2lkCiBtYXJz
aGFsX1ZPSURfX01JTklPQkpFQ1QoR0Nsb3N1cmUgKiBjbG9zdXJlLCBHVmFsdWUgKiByZXR1cm5f
dmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgbl9wYXJhbV92YWx1ZXMsIGNv
bnN0IEdWYWx1ZSAqIHBhcmFtX3ZhbHVlcywKQEAgLTM1Niw0NiArNDA2LDY3IEBAIG1hcnNoYWxf
Vk9JRF9fTUlOSU9CSkVDVChHQ2xvc3VyZSAqIGNsb3N1cmUsIEdWYWx1ZSAqIHJldHVybl92YWx1
ZSwKIAogICBjYWxsYmFjayhkYXRhMSwgZ3N0X3ZhbHVlX2dldF9taW5pX29iamVjdChwYXJhbV92
YWx1ZXMgKyAxKSwgZGF0YTIpOwogfQorI2VuZGlmCiAKLXN0YXRpYyB2b2lkCi13ZWJraXRfdmlk
ZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZpZGVvU2lua0NsYXNzKiBrbGFzcykKK3N0YXRpYyB2
b2lkIHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGts
YXNzKQogewotICAgIEdPYmplY3RDbGFzcyogZ29iamVjdF9jbGFzcyA9IEdfT0JKRUNUX0NMQVNT
KGtsYXNzKTsKLSAgICBHc3RCYXNlU2lua0NsYXNzKiBnc3RiYXNlX3NpbmtfY2xhc3MgPSBHU1Rf
QkFTRV9TSU5LX0NMQVNTKGtsYXNzKTsKKyAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBHc3RCYXNlU2lua0NsYXNzKiBiYXNlU2lua0Ns
YXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBl
bGVtZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnc3RfZWxlbWVu
dF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVt
cGxhdGVfZ2V0KCZzaW5rVGVtcGxhdGUpKTsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAg
IGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YShlbGVtZW50Q2xhc3MsCisjZWxzZQorICAg
IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZShlbGVtZW50Q2xhc3MsCisjZW5k
aWYKKyAgICAgICAgICAgICJXZWJLaXQgdmlkZW8gc2luayIsCisgICAgICAgICAgICAiU2luay9W
aWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8gYSBD
YWlybyBzdXJmYWNlIiwKKyAgICAgICAgICAgICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPiIp
OwogCiAgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0Vmlk
ZW9TaW5rUHJpdmF0ZSkpOwogCi0gICAgZ29iamVjdF9jbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF92
aWRlb19zaW5rX2Rpc3Bvc2U7CisgICAgZ29iamVjdENsYXNzLT5kaXNwb3NlID0gd2Via2l0X3Zp
ZGVvX3NpbmtfZGlzcG9zZTsKIAotICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+dW5sb2NrID0gd2Vi
a2l0X3ZpZGVvX3NpbmtfdW5sb2NrOwotICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+dW5sb2NrX3N0
b3AgPSB3ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcDsKLSAgICBnc3RiYXNlX3NpbmtfY2xh
c3MtPnJlbmRlciA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKLSAgICBnc3RiYXNlX3Npbmtf
Y2xhc3MtPnByZXJvbGwgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7Ci0gICAgZ3N0YmFzZV9z
aW5rX2NsYXNzLT5zdG9wID0gd2Via2l0X3ZpZGVvX3Npbmtfc3RvcDsKLSAgICBnc3RiYXNlX3Np
bmtfY2xhc3MtPnN0YXJ0ID0gd2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQ7CisgICAgYmFzZVNpbmtD
bGFzcy0+dW5sb2NrID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrOworICAgIGJhc2VTaW5rQ2xh
c3MtPnVubG9ja19zdG9wID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3A7CisgICAgYmFz
ZVNpbmtDbGFzcy0+cmVuZGVyID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGJhc2VT
aW5rQ2xhc3MtPnByZXJvbGwgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7CisgICAgYmFzZVNp
bmtDbGFzcy0+c3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7CisgICAgYmFzZVNpbmtDbGFz
cy0+c3RhcnQgPSB3ZWJraXRfdmlkZW9fc2lua19zdGFydDsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQorICAgIGJhc2VTaW5rQ2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9IHdlYmtpdF92aWRl
b19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbjsKKyNlbmRpZgogCiAgICAgd2Via2l0X3ZpZGVvX3Np
bmtfc2lnbmFsc1tSRVBBSU5UX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9uZXcoInJlcGFpbnQtcmVx
dWVzdGVkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGtsYXNzKSwKLSAgICAgICAg
ICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwK
LSAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdTaWduYWxGbGFncz4oR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05B
TF9BQ1RJT04pLAorICAgICAgICAgICAgMCwgLy8gQ2xhc3Mgb2Zmc2V0LgorICAgICAgICAgICAg
MCwgLy8gQWNjdW11bGF0b3IuCisgICAgICAgICAgICAwLCAvLyBBY2N1bXVsYXRvciBkYXRhLgor
I2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICAgICAgbWFyc2hhbF9WT0lEX19NSU5J
T0JKRUNULAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsIEdTVF9UWVBFX0JVRkZFUik7Cisj
ZWxzZQorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIC8vIEN1c3RvbSBt
YXJzaGFsbGVyLgorI2VuZGlmCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgLy8gUmV0dXJuIHR5
cGUuCisgICAgICAgICAgICAxLCAvLyBPbmx5IG9uZSBwYXJhbWV0ZXIuCisgICAgICAgICAgICBH
U1RfVFlQRV9CVUZGRVIpOwogfQogCi0vKioKLSAqIHdlYmtpdF92aWRlb19zaW5rX25ldzoKLSAq
Ci0gKiBDcmVhdGVzIGEgbmV3IEdTdHJlYW1lciB2aWRlbyBzaW5rLgotICoKLSAqIFJldHVybiB2
YWx1ZTogYSAjR3N0RWxlbWVudCBmb3IgdGhlIG5ld2x5IGNyZWF0ZWQgdmlkZW8gc2luawotICov
CisKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQqIHdlYmtpdF92aWRlb19z
aW5rX25ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3JsZCkKIHsKICAgICBHc3RF
bGVtZW50KiBlbGVtZW50ID0gR1NUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJ
REVPX1NJTkssIDApKTsKICAgICBXRUJLSVRfVklERU9fU0lOSyhlbGVtZW50KS0+cHJpdi0+Z3N0
R1dvcmxkID0gZ3N0R1dvcmxkOwogICAgIHJldHVybiBlbGVtZW50OwogfQorI2Vsc2UKK0dzdEVs
ZW1lbnQqIHdlYmtpdF92aWRlb19zaW5rX25ldygpCit7CisgICAgcmV0dXJuIEdTVF9FTEVNRU5U
KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9CisjZW5kaWYKIAog
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKaW5k
ZXggNTAxODUwZi4uY2E2MWZiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAt
MjUsOCArMjUsNyBAQAogI2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgogI2luY2x1ZGUgPGds
aWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5oPgotCi1HX0JF
R0lOX0RFQ0xTCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CiAKICNkZWZpbmUgV0VCS0lU
X1RZUEVfVklERU9fU0lOSyB3ZWJraXRfdmlkZW9fc2lua19nZXRfdHlwZSgpCiAKQEAgLTczLDEx
ICs3MiwxMyBAQCBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua0NsYXNzIHsKICAgICB2b2lkICgqIF93
ZWJraXRfcmVzZXJ2ZWQ2KSh2b2lkKTsKIH07CiAKK0dUeXBlIHdlYmtpdF92aWRlb19zaW5rX2dl
dF90eXBlKCkgR19HTlVDX0NPTlNUOwogCi1HVHlwZSAgICAgICB3ZWJraXRfdmlkZW9fc2lua19n
ZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7Ci1Hc3RFbGVtZW50ICp3ZWJraXRfdmlkZW9fc2lu
a19uZXcoV2ViQ29yZTo6R1N0cmVhbWVyR1dvcmxkKik7Ci0KLUdfRU5EX0RFQ0xTCisjaWZuZGVm
IEdTVF9BUElfVkVSU0lPTl8xCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoV2Vi
Q29yZTo6R1N0cmVhbWVyR1dvcmxkKik7CisjZWxzZQorR3N0RWxlbWVudCogd2Via2l0X3ZpZGVv
X3NpbmtfbmV3KCk7CisjZW5kaWYKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCiAjZW5kaWYK
LS0gCjEuNy4xMA==
</data>
<flag name="commit-queue"
          id="145753"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140009</attachid>
            <date>2012-05-03 07:32:01 -0700</date>
            <delta_ts>2012-05-13 19:19:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>44936</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBiODZlNzcxZjVlOTYzMWI4ZmFkZWM4ZWI5Nzg4NmYwYjcxYzBlNWJkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDMgTWF5IDIwMTIgMTU6MDY6MzMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBQ
YXRjaAoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgNDQgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25p
bmcuY3BwICAgICB8ICAgMjkgKysKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVy
c2lvbmluZy5oICAgICAgIHwgICAgNiArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyLmggICB8ICAgNDEgKy0tCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyQ0cubW0gICAgICAgICB8ICAgNjEgLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDU1ICstLQogLi4uL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCAgICAgICAgfCAgIDUwICstLQogLi4uL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDYzICsrLS0K
IC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCAgICAgIHwgIDM1
OSArKysrKysrKysrKystLS0tLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuaCAgICAgICAgfCAgIDEzICstCiAxMCBmaWxlcyBjaGFuZ2VkLCA0MTcgaW5zZXJ0
aW9ucygrKSwgMzA0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGE4ODQ1YmUuLmU0MzgyM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAor
MjAxMi0wNS0wMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dTdHJlYW1lcl0gMC4xMSB2aWRlby1zaW5rCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFZpZGVvIGZyYW1lIHJlbmRlcmluZyBjaGFuZ2VzIGZv
ciBHU3RyZWFtZXIgMC4xMS8xLjAuIFRoZQorICAgICAgICBJbWFnZUdTdHJlYW1lckNHIGFic3Ry
YWN0aW9uIGlzIGJlaW5nIHJlbW92ZWQgdW50aWwgSSBtYW5hZ2UgdG8KKyAgICAgICAgcG9ydCBt
eSBnc3QtbWFjIFdlYktpdCBicmFuY2ggb3ZlciB0byBXZWJLaXQyIG1hYyBwb3J0LgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3Bw
OgorICAgICAgICAod2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmg6Cisg
ICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
SW1hZ2VHU3RyZWFtZXIuaDogY3JlYXRlSW1hZ2UgQVBJCisgICAgICAgIHVwZGF0ZSBzbyBpbXBs
ZW1lbnRhdGlvbnMgZG9uJ3QgbmVlZCB0byB1c2UKKyAgICAgICAgZ3N0X3ZpZGVvX2Zvcm1hdF9w
YXJzZV9jYXBzIHdoaWNoIGhhcyBiZWVuIHJlbW92ZWQgaW4gZ3N0LTAuMTEuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VHU3RyZWFtZXI6OnNldENyb3BSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlR1N0
cmVhbWVyOjpyZWN0KToKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbTogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5j
cHA6CisgICAgICAgIChJbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcDoKKyAgICAg
ICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpuYXR1cmFsU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHA6CisgICAgICAgIChfV2ViS2l0VmlkZW9TaW5rUHJp
dmF0ZSk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua190aW1lb3V0X2Z1bmMpOgorICAgICAg
ICAod2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5r
X2Rpc3Bvc2UpOgorICAgICAgICAodW5sb2NrQnVmZmVyTXV0ZXgpOgorICAgICAgICAod2Via2l0
X3ZpZGVvX3NpbmtfdW5sb2NrKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19z
dG9wKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3N0b3ApOgorICAgICAgICAod2Via2l0
X3ZpZGVvX3Npbmtfc3RhcnQpOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfcHJvcG9zZV9h
bGxvY2F0aW9uKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaDoK
KwogMjAxMi0wNC0zMCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW0Nocm9taXVtL1dpbmRvd3NdIEFkZCBMb2NhbGl6ZWREYXRlV2luCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lv
bmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyVmVyc2lvbmluZy5jcHAKaW5kZXggZDQyMzhjMS4uYjIxYjJiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNp
b25pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKIAogdm9pZCB3ZWJraXRHc3RPYmplY3RSZWZTaW5rKEdzdE9iamVjdCogZ3N0T2Jq
ZWN0KQogewpAQCAtNDgsMyArNDksMzEgQEAgR3N0Q2Fwcyogd2Via2l0R3N0RWxlbWVudEdldFBh
ZENhcHMoR3N0RWxlbWVudCogZWxlbWVudCwgY29uc3QgY2hhciogZGlyZWN0aW9uKQogICAgIGdz
dF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChwYWQpKTsKICAgICByZXR1cm4gY2FwczsKIH0KKwor
Ym9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhHc3RDYXBzKiBjYXBzLCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBHc3RWaWRlb0Zvcm1hdCYgZm9ybWF0LCBpbnQmIHBpeGVs
QXNwZWN0UmF0aW9OdW1lcmF0b3IsIGludCYgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBp
bnQmIHN0cmlkZSkKK3sKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5m
byBpbmZvOworICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9S
TUFUKCZpbmZvKTsKKyAgICBzaXplLnNldFdpZHRoKEdTVF9WSURFT19JTkZPX1dJRFRIKCZpbmZv
KSk7CisgICAgc2l6ZS5zZXRIZWlnaHQoR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZpbmZvKSk7Cisg
ICAgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IEdTVF9WSURFT19JTkZPX1BBUl9OKCZpbmZv
KTsKKyAgICBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IgPSBHU1RfVklERU9fSU5GT19QQVJf
RCgmaW5mbyk7CisgICAgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RSSURFKCZpbmZv
LCAwKTsKKyNlbHNlCisgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworICAgIGlmICghR1NUX0lTX0NB
UFMoY2FwcykgfHwgIWdzdF9jYXBzX2lzX2ZpeGVkKGNhcHMpCisgICAgICAgIHx8ICFnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KQorICAg
ICAgICB8fCAhZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvKGNhcHMsICZw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc2l6ZS5zZXRXaWR0aCh3aWR0aCk7CisgICAgc2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICBzdHJpZGUgPSBzaXplLndpZHRoKCkgKiA0OworI2VuZGlm
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oCmlu
ZGV4IGZhYWRjMjYuLmZkNDI3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuaApA
QCAtMjEsOCArMjEsMTQgQEAKICNkZWZpbmUgR1N0cmVhbWVyVmVyc2lvbmluZ19oCiAKICNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEludFNpemU7Cit9OwogCiB2b2lkIHdlYmtpdEdzdE9iamVjdFJl
ZlNpbmsoR3N0T2JqZWN0Kik7CiBHc3RDYXBzKiB3ZWJraXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhH
c3RFbGVtZW50KiwgY29uc3QgY2hhciopOworYm9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3Jt
YXRGcm9tQ2FwcyhHc3RDYXBzKiwgV2ViQ29yZTo6SW50U2l6ZSYsIEdzdFZpZGVvRm9ybWF0Jiwg
aW50JiwgaW50JiwgaW50Jik7CiAKICNlbmRpZiAvLyBHU3RyZWFtZXJWZXJzaW9uaW5nX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyLmgKaW5kZXggYWI3OTliYS4uZjZhYzFhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIzLDIwICsyMywyNCBAQAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSA8Z3N0
L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZlcnNpb25pbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKK3R5
cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdENh
cHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsKIAogY2xh
c3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNy
ZWF0ZUltYWdlKEdzdEJ1ZmZlciopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdT
dHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIo
YnVmZmVyLCBjYXBzKSk7CisgICAgICAgIH0KICAgICAgICAgfkltYWdlR1N0cmVhbWVyKCk7CiAK
ICAgICAgICAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gaW1hZ2UoKQpAQCAtNDUsMjEgKzQ5LDE4
IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3RyZWFt
ZXI+IHsKICAgICAgICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgdm9pZCBzZXRDcm9wUmVjdChGbG9hdFJlY3QgcmVjdCkgeyBtX2Nyb3BSZWN0ID0gcmVj
dDsgfQorICAgICAgICBGbG9hdFJlY3QgcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbV9jcm9wUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dChtX2Nyb3BSZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEJpdG1hcEltYWdl
PiBtX2ltYWdlOwotCi0jaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RC
dWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXplLCBRSW1h
Z2U6OkZvcm1hdCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgSW1hZ2VH
U3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUpOwotI2VuZGlmCi0KKyAgICAgICAgRmxvYXRS
ZWN0IG1fY3JvcFJlY3Q7CisgICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciosIEdzdENh
cHMqKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmZTA5MjhiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QYXNzUmVmUHRyPEltYWdl
R1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIp
Ci17Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0g
Z3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsK
LSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVh
bWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpOwotfQotCi1JbWFnZUdTdHJlYW1l
cjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUpCi0gICAg
OiBtX2ltYWdlKDApCi17Ci0gICAgQVNTRVJUKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKLQot
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikp
LCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxsb2NhdG9yTnVsbCkpOwotICAgIFJldGFp
blB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKLSAgICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2Ug
PSBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUu
d2lkdGgoKSo0LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0JpdG1hcEJ5
dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwg
ZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwotICAgIG1faW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOwotfQotCi1JbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0
cmVhbWVyKCkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS5jbGVhcigpOwot
Ci0gICAgbV9pbWFnZSA9IDA7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4IGEwYmY1ZjQuLjAxODYzMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdT
dHJlYW1lckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKQEAgLTIyLDQwICsyMiw1MyBAQAogCiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNp
ZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEu
aD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZl
cikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0
Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBpbnQgd2lkdGggPSAwLCBoZWln
aHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7
CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9w
YXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0
X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBJbnRTaXpl
IHNpemU7CisgICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0
aW9EZW5vbWluYXRvciwgc3RyaWRlOworICAgIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZy
b21DYXBzKGNhcHMsIHNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4
ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpOwogCi0gICAgZ3N0X2NhcHNfdW5yZWYo
Y2Fwcyk7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RNYXBJbmZvIG1hcEluZm87
CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmbWFwSW5mbywgR1NUX01BUF9SRUFEKTsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwSW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZm
ZXIpKTsKKyNlbmRpZgogCiAgICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9Gb3JtYXQ7Ci0gICAgaWYg
KGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQkdSQSkKLSAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwot
ICAgIGVsc2UKLSAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7Ci0KLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSwgY2Fpcm9Gb3JtYXQpKTsKLX0KKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRU
TEVfRU5ESUFOCisgICAgY2Fpcm9Gb3JtYXQgPSAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRf
QkdSQSkgPyBDQUlST19GT1JNQVRfQVJHQjMyIDogQ0FJUk9fRk9STUFUX1JHQjI0OworI2Vsc2UK
KyAgICBjYWlyb0Zvcm1hdCA9IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSA/IENB
SVJPX0ZPUk1BVF9BUkdCMzIgOiBDQUlST19GT1JNQVRfUkdCMjQ7CisjZW5kaWYKIAotSW1hZ2VH
U3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXpl
LCBjYWlyb19mb3JtYXRfdCYgY2Fpcm9Gb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAg
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y
X2RhdGEoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIGNhaXJvRm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53
aWR0aCgpKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGVfZm9yX2RhdGEoYnVmZmVyRGF0YSwgY2Fpcm9Gb3JtYXQsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICBHc3RWaWRlb0Nyb3BNZXRhKiBjcm9wTWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3Bf
bWV0YShidWZmZXIpOworICAgIGlmIChjcm9wTWV0YSkKKyAgICAgICAgc2V0Q3JvcFJlY3QoRmxv
YXRSZWN0KGNyb3BNZXRhLT54LCBjcm9wTWV0YS0+eSwgY3JvcE1ldGEtPndpZHRoLCBjcm9wTWV0
YS0+aGVpZ2h0KSk7CisKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcEluZm8pOwor
I2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyUXQuY3BwCmluZGV4IDM2YjA4MDYuLmIzNTQ5MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJRdC5jcHAKQEAgLTIxLDM5ICsyMSw0OSBAQAogI2luY2x1ZGUgIkltYWdlR1N0
cmVhbWVyLmgiCiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5k
aWYKKwogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVh
bWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFn
ZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNh
cHMpCisgICAgOiBtX2ltYWdlKDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsK
LSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOworICAgIFFQ
aXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7
Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisgICAgSW50U2l6
ZSBzaXplOworICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IsIHN0cmlkZTsKKyAgICB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRG
cm9tQ2FwcyhjYXBzLCBzaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBp
eGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlKTsKIAorI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgR3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwg
JmluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJl
dF9jYXN0PHVjaGFyKj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgdWNoYXIqIGJ1ZmZlckRhdGEg
PSByZWludGVycHJldF9jYXN0PHVjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworI2Vu
ZGlmCiAgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX1JHQikKLSAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1h
dF9SR0I4ODg7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0
X1JHQjMyOworI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpbWFnZUZv
cm1hdCA9IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSA/IFFJbWFnZTo6Rm9ybWF0
X1JHQjMyIDogUUltYWdlOjpGb3JtYXRfUkdCODg4OworI2Vsc2UKKyAgICBpbWFnZUZvcm1hdCA9
IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
MiA6IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGltYWdl
Rm9ybWF0KSk7Ci19CisgICAgUUltYWdlIGltYWdlKGJ1ZmZlckRhdGEsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3Ry
ZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9ybWF0IGlt
YWdlRm9ybWF0KQotICAgIDogbV9pbWFnZSgwKQotewotICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBu
ZXcgUVBpeG1hcDsKLSAgICBRSW1hZ2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2UtPmNv
bnZlcnRGcm9tSW1hZ2UoaW1hZ2UpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRl
KHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3Vu
bWFwKGJ1ZmZlciwgJmluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VH
U3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCBkMDk5M2MyLi5jNGUxZDUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMjUzLDEwICsyNTMsMTIgQEAgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKICAgICAg
ICAgbV9tZWRpYUxvY2F0aW9ucyA9IDA7CiAgICAgfQogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCiAgICAgaWYgKG1fdmlkZW9TaW5rQmluKSB7CiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
bV92aWRlb1NpbmtCaW4pOwogICAgICAgICBtX3ZpZGVvU2lua0JpbiA9IDA7CiAgICAgfQorI2Vu
ZGlmCiAKICAgICBpZiAobV9wbGF5QmluKSB7CiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9OVUxMKTsKQEAgLTQ5Niw5ICs0OTgsMTAgQEAgSW50U2l6
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICBp
ZiAoIWNhcHMpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CiAKLSAgICBpbnQgcGl4ZWxBc3Bl
Y3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOworICAgIGludCBw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0
cmlkZTsKICAgICBpbnQgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5QXNwZWN0
UmF0aW9HQ0Q7Ci0gICAgaW50IG9yaWdpbmFsV2lkdGggPSAwLCBvcmlnaW5hbEhlaWdodCA9IDA7
CisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemU7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0Owog
CiAgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQog
ICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEK
QEAgLTUwNywzMCArNTEwLDE1IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAKICAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3Jp
Z2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKICAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtl
bHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgotI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
Ci0gICAgR3N0VmlkZW9JbmZvIGluZm87Ci0gICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJmluZm8sIGNhcHMpKQorICAgIGlmICghd2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJv
bUNhcHMoY2Fwcywgb3JpZ2luYWxTaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0
b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlKSkKICAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKIAotICAgIG9yaWdpbmFsV2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgm
aW5mbyk7Ci0gICAgb3JpZ2luYWxIZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQoJmluZm8p
OwotICAgIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IgPSBHU1RfVklERU9fSU5GT19QQVJfTigm
aW5mbyk7Ci0gICAgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yID0gR1NUX1ZJREVPX0lORk9f
UEFSX0QoJmluZm8pOwotI2Vsc2UKLSAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2lu
YWwgc2l6ZS4KLSAgICBpZiAoIUdTVF9JU19DQVBTKGNhcHMpIHx8ICFnc3RfY2Fwc19pc19maXhl
ZChjYXBzKQotICAgICAgICB8fCAhZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsIDAs
ICZvcmlnaW5hbFdpZHRoLCAmb3JpZ2luYWxIZWlnaHQpCi0gICAgICAgIHx8ICFnc3RfdmlkZW9f
cGFyc2VfY2Fwc19waXhlbF9hc3BlY3RfcmF0aW8oY2FwcywgJnBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcikpCi0gICAgICAgIHJldHVybiBJbnRTaXpl
KCk7Ci0jZW5kaWYKLQotICAgIExPR19WRVJCT1NFKE1lZGlhLCAiT3JpZ2luYWwgdmlkZW8gc2l6
ZTogJWR4JWQiLCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCk7CisgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJPcmlnaW5hbCB2aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsU2l6ZS53aWR0
aCgpLCBvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAiUGl4
ZWwgYXNwZWN0IHJhdGlvOiAlZC8lZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVs
QXNwZWN0UmF0aW9EZW5vbWluYXRvcik7CiAKICAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9u
IFBBUiBhbmQgdmlkZW8gc2l6ZS4KLSAgICBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFdpZHRoICog
cGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKLSAgICBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxI
ZWlnaHQgKiBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3I7CisgICAgZGlzcGxheVdpZHRoID0g
b3JpZ2luYWxTaXplLndpZHRoKCkgKiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOworICAgIGRp
c3BsYXlIZWlnaHQgPSBvcmlnaW5hbFNpemUuaGVpZ2h0KCkgKiBwaXhlbEFzcGVjdFJhdGlvRGVu
b21pbmF0b3I7CiAKICAgICAvLyBEaXZpZGUgZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHRo
ZWlyIEdDRCB0byBhdm9pZCBwb3NzaWJsZSBvdmVyZmxvd3MuCiAgICAgZGlzcGxheUFzcGVjdFJh
dGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdo
dCk7CkBAIC01MzksMTggKzUyNywxOCBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogCiAgICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFs
IHZpZGVvIHNpemUuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsn
cyBzZXRjYXBzIGZ1bmN0aW9uLgogICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgIGlmICghKG9yaWdpbmFsSGVpZ2h0ICUgZGlzcGxheUhlaWdodCkpIHsKKyAgICBpZiAoIShv
cmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBkaXNwbGF5SGVpZ2h0KSkgewogICAgICAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7Ci0gICAgICAgIHdp
ZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbEhlaWdodCwgZGlzcGxheVdp
ZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2
ND4ob3JpZ2luYWxIZWlnaHQpOwotICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFdpZHRoICUgZGlz
cGxheVdpZHRoKSkgeworICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQo
b3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOworICAg
ICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkp
OworICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgoKSAlIGRpc3BsYXlXaWR0aCkp
IHsKICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdp
ZHRoIik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2lu
YWxXaWR0aCwgZGlzcGxheUhlaWdodCwgZGlzcGxheVdpZHRoKTsKLSAgICAgICAgd2lkdGggPSBz
dGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFdpZHRoKTsKKyAgICAgICAgaGVpZ2h0ID0gZ3N0
X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUud2lkdGgoKSwgZGlzcGxheUhlaWdo
dCwgZGlzcGxheVdpZHRoKTsKKyAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxndWludDY0Pihv
cmlnaW5hbFNpemUud2lkdGgoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9HX1ZFUkJPU0Uo
TWVkaWEsICJBcHByb3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0
Iik7Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbEhl
aWdodCwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxIZWlnaHQpOworICAgICAgICB3aWR0aCA9IGdzdF91
dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgs
IGRpc3BsYXlIZWlnaHQpOworICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0Pihv
cmlnaW5hbFNpemUuaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIExPR19WRVJCT1NFKE1lZGlhLCAi
TmF0dXJhbCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1BVCwg
d2lkdGgsIGhlaWdodCk7CkBAIC0xNDg0LDE3ICsxNDcyLDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmCiAgICAgaWYgKCFtX2J1ZmZlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRy
PEltYWdlR1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZSht
X2J1ZmZlcik7CisgICAgR3N0Q2FwcyogY2FwcyA9IHdlYmtpdEdzdEVsZW1lbnRHZXRQYWRDYXBz
KG1fd2Via2l0VmlkZW9TaW5rLCAic2luayIpOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVh
bWVyOjpjcmVhdGVJbWFnZShtX2J1ZmZlciwgY2Fwcyk7CiAgICAgaWYgKCFnc3RJbWFnZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8
SW1hZ2UqPihnc3RJbWFnZS0+aW1hZ2UoKS5nZXQoKSksIENvbG9yU3BhY2VTUkdCLAotICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LCBDb21wb3NpdGVDb3B5LCBEb05vdFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIGdzdEltYWdl
LT5yZWN0KCksIENvbXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZh
bHNlKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKIHsKLQog
ICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiAKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgY2FjaGUsICgpKTsKQEAgLTE1
MTIsNyArMTUwMywxMSBAQCBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQog
ICAgICAgICBmb3IgKEdMaXN0KiBpdGVyYXRvciA9IGZhY3RvcmllczsgaXRlcmF0b3I7IGl0ZXJh
dG9yID0gaXRlcmF0b3ItPm5leHQpIHsKICAgICAgICAgICAgIEdzdFR5cGVGaW5kRmFjdG9yeSog
ZmFjdG9yeSA9IEdTVF9UWVBFX0ZJTkRfRkFDVE9SWShpdGVyYXRvci0+ZGF0YSk7CiAgICAgICAg
ICAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzKGZhY3Rv
cnkpOworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgICAgICAgICBjb25zdCBnY2hhciAq
IGNvbnN0ICogZXh0ZW5zaW9uczsKKyNlbHNlCiAgICAgICAgICAgICBnY2hhcioqIGV4dGVuc2lv
bnM7CisjZW5kaWYKIAogICAgICAgICAgICAgaWYgKCFjYXBzKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTcyNSw3ICsxNzIwLDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJp
biwgInZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hh
bmdlZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJh
dWRpby1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRD
YWxsYmFjayksIHRoaXMpOwogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgbV93ZWJr
aXRWaWRlb1NpbmsgPSB3ZWJraXRfdmlkZW9fc2lua19uZXcobV9nc3RHV29ybGQuZ2V0KCkpOwor
I2Vsc2UKKyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdF92aWRlb19zaW5rX25ldygpOwor
I2VuZGlmCiAKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Via2l0VmlkZW9TaW5rLCAicmVwYWlu
dC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFj
ayksIHRoaXMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDQzNjMw
MzYuLmRmNTc2ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0xLDYg
KzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgT3BlbmVkSGFuZAogICogIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAo
QykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgogICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CkBAIC0xNywzMyArMTgsNDIgQEAKICAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0v
KioKLSAqIFNFQ1RJT046d2Via2l0LXZpZGVvLXNpbmsKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjog
R1N0cmVhbWVyIHZpZGVvIHNpbmsKKy8qCiAgKgotICogI1dlYktpdFZpZGVvU2luayBpcyBhIEdT
dHJlYW1lciBzaW5rIGVsZW1lbnQgdGhhdCB0cmlnZ2VycworICogV2ViS2l0VmlkZW9TaW5rIGlz
IGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVudCB0aGF0IHRyaWdnZXJzCiAgKiByZXBhaW50cyBpbiB0
aGUgV2ViS2l0IEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIgZm9yIHRoZQogICogY3VycmVudCB2aWRl
byBidWZmZXIuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVTRShHU1RSRUFNRVIp
CiAjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgiCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBV
U0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4K
KyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21l
dGEuaD4KKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9wb29sLmg+CisjZW5kaWYKICNpbmNs
dWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgog
Ci1zdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19Q
QURfVEVNUExBVEUoInNpbmsiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdB
WVMsCiAvLyBDQUlST19GT1JNQVRfUkdCMjQgdXNlZCB0byByZW5kZXIgdGhlIHZpZGVvIGJ1ZmZl
cnMgaXMgbGl0dGxlL2JpZyBlbmRpYW4gZGVwZW5kYW50LgogI2lmIEdfQllURV9PUkRFUiA9PSBH
X0xJVFRMRV9FTkRJQU4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNf
QkdSeCAiOyIgR1NUX1ZJREVPX0NBUFNfQkdSQSkKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEK
KyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJTktfUEFEX0NBUFMgR1NUX1ZJREVPX0NBUFNfQkdSeCAi
OyIgR1NUX1ZJREVPX0NBUFNfQkdSQQorI2Vsc2UKKyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJTktf
UEFEX0NBUFMgR1NUX1ZJREVPX0NBUFNfTUFLRSgieyBCR1J4LCBCR1JBIH0iKQorI2VuZGlmCisj
ZWxzZQorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2RlZmluZSBXRUJLSVRfVklERU9fU0lO
S19QQURfQ0FQUyBHU1RfVklERU9fQ0FQU194UkdCICI7IiBHU1RfVklERU9fQ0FQU19BUkdCCiAj
ZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdTVF9TVEFUSUNfQ0FQUyhHU1RfVklERU9fQ0FQU194UkdCICI7IiBH
U1RfVklERU9fQ0FQU19BUkdCKQorI2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUyBH
U1RfVklERU9fQ0FQU19NQUtFKCJ7IHhSR0IsIEFSR0IgfSIpCiAjZW5kaWYKLSk7CisjZW5kaWYK
K3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BB
RF9URU1QTEFURSgic2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFU
SUNfQ0FQUyhXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUykpOworCiAKIEdTVF9ERUJVR19DQVRF
R09SWV9TVEFUSUMod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcpOwogI2RlZmluZSBHU1RfQ0FUX0RF
RkFVTFQgd2Via2l0X3ZpZGVvX3NpbmtfZGVidWcKQEAgLTYxLDEwICs3MSwxNyBAQCBzdGF0aWMg
Z3VpbnQgd2Via2l0X3ZpZGVvX3Npbmtfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CiAK
IHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSB7CiAgICAgR3N0QnVmZmVyKiBidWZmZXI7
Ci0gICAgZ3VpbnQgdGltZW91dF9pZDsKLSAgICBHTXV0ZXgqIGJ1ZmZlcl9tdXRleDsKLSAgICBH
Q29uZCogZGF0YV9jb25kOworICAgIGd1aW50IHRpbWVvdXRJZDsKKyAgICBHTXV0ZXgqIGJ1ZmZl
ck11dGV4OworICAgIEdDb25kKiBkYXRhQ29uZGl0aW9uOworCisjaWZkZWYgR1NUX0FQSV9WRVJT
SU9OXzEKKyAgICBHc3RWaWRlb0luZm8gaW5mbzsKKyNlbmRpZgorCisjaWZuZGVmIEdTVF9BUElf
VkVSU0lPTl8xCiAgICAgV2ViQ29yZTo6R1N0cmVhbWVyR1dvcmxkKiBnc3RHV29ybGQ7CisjZW5k
aWYKIAogICAgIC8vIElmIHRoaXMgaXMgVFJVRSBhbGwgcHJvY2Vzc2luZyBzaG91bGQgZmluaXNo
IEFTQVAKICAgICAvLyBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEg
cmFjZSBiZXR3ZWVuCkBAIC03NCwxNDkgKzkxLDE2NSBAQCBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lu
a1ByaXZhdGUgewogICAgIC8vIHRvIGRlYWRsb2NrcyBiZWNhdXNlIHJlbmRlcigpIGhvbGRzIHRo
ZSBzdHJlYW0gbG9jay4KICAgICAvLwogICAgIC8vIFByb3RlY3RlZCBieSB0aGUgYnVmZmVyIG11
dGV4Ci0gICAgZ2Jvb2xlYW4gdW5sb2NrZWQ7CisgICAgYm9vbCB1bmxvY2tlZDsKIH07CiAKLSNk
ZWZpbmUgX2RvX2luaXQoYmxhKSBcCi0gICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0
X3ZpZGVvX3NpbmtfZGVidWcsIFwKKyNkZWZpbmUgd2Via2l0X3ZpZGVvX3NpbmtfcGFyZW50X2Ns
YXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0VmlkZW9TaW5r
LCB3ZWJraXRfdmlkZW9fc2luaywgR1NUX1RZUEVfVklERU9fU0lOSywgR1NUX0RFQlVHX0NBVEVH
T1JZX0lOSVQod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcsIFwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAid2Via2l0c2luayIsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmtpdCB2aWRlbyBzaW5rIikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0IHZpZGVvIHNpbmsiKSk7CiAKLUdTVF9CT0lM
RVJQTEFURV9GVUxMKFdlYktpdFZpZGVvU2luaywKLSAgICAgICAgICAgICAgICAgICAgIHdlYmtp
dF92aWRlb19zaW5rLAotICAgICAgICAgICAgICAgICAgICAgR3N0VmlkZW9TaW5rLAotICAgICAg
ICAgICAgICAgICAgICAgR1NUX1RZUEVfVklERU9fU0lOSywKLSAgICAgICAgICAgICAgICAgICAg
IF9kb19pbml0KTsKIAotc3RhdGljIHZvaWQKLXdlYmtpdF92aWRlb19zaW5rX2Jhc2VfaW5pdChn
cG9pbnRlciBnX2NsYXNzKQotewotICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudF9jbGFzcyA9
IEdTVF9FTEVNRU5UX0NMQVNTKGdfY2xhc3MpOwotCi0gICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRk
X3BhZF90ZW1wbGF0ZShlbGVtZW50X2NsYXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQo
JnNpbmt0ZW1wbGF0ZSkpOwotICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBs
ZShlbGVtZW50X2NsYXNzLCAiV2ViS2l0IHZpZGVvIHNpbmsiLAotICAgICAgICAgICAgIlNpbmsv
VmlkZW8iLCAiU2VuZHMgdmlkZW8gZGF0YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEg
Q2Fpcm8gc3VyZmFjZSIsCi0gICAgICAgICAgICAiQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4i
KTsKLX0KLQotc3RhdGljIHZvaWQKLXdlYmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9T
aW5rKiBzaW5rLCBXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCitzdGF0aWMgdm9pZCB3ZWJr
aXRfdmlkZW9fc2lua19pbml0KFdlYktpdFZpZGVvU2luayogc2luaykKIHsKLSAgICBXZWJLaXRW
aWRlb1NpbmtQcml2YXRlKiBwcml2OwotCi0gICAgc2luay0+cHJpdiA9IHByaXYgPSBHX1RZUEVf
SU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2luaywgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2ViS2l0
VmlkZW9TaW5rUHJpdmF0ZSk7CisgICAgc2luay0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURShzaW5rLCBXRUJLSVRfVFlQRV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1NpbmtQcml2
YXRlKTsKICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwgMzEsIDApCi0gICAgcHJpdi0+ZGF0YV9j
b25kID0gV1RGOjpmYXN0TmV3PEdDb25kPigpOwotICAgIGdfY29uZF9pbml0KHByaXYtPmRhdGFf
Y29uZCk7Ci0gICAgcHJpdi0+YnVmZmVyX211dGV4ID0gV1RGOjpmYXN0TmV3PEdNdXRleD4oKTsK
LSAgICBnX211dGV4X2luaXQocHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBzaW5rLT5wcml2LT5k
YXRhQ29uZGl0aW9uID0gV1RGOjpmYXN0TmV3PEdDb25kPigpOworICAgIGdfY29uZF9pbml0KHNp
bmstPnByaXYtPmRhdGFDb25kaXRpb24pOworICAgIHNpbmstPnByaXYtPmJ1ZmZlck11dGV4ID0g
V1RGOjpmYXN0TmV3PEdNdXRleD4oKTsKKyAgICBnX211dGV4X2luaXQoc2luay0+cHJpdi0+YnVm
ZmVyTXV0ZXgpOwogI2Vsc2UKLSAgICBwcml2LT5kYXRhX2NvbmQgPSBnX2NvbmRfbmV3KCk7Ci0g
ICAgcHJpdi0+YnVmZmVyX211dGV4ID0gZ19tdXRleF9uZXcoKTsKKyAgICBzaW5rLT5wcml2LT5k
YXRhQ29uZGl0aW9uID0gZ19jb25kX25ldygpOworICAgIHNpbmstPnByaXYtPmJ1ZmZlck11dGV4
ID0gZ19tdXRleF9uZXcoKTsKKyNlbmRpZgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICBnc3RfdmlkZW9faW5mb19pbml0KCZzaW5rLT5wcml2LT5pbmZvKTsKICNlbmRpZgogfQogCi1z
dGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyhncG9pbnRlciBk
YXRhKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyhncG9p
bnRlciBkYXRhKQogewogICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IHJlaW50ZXJwcmV0X2Nh
c3Q8V2ViS2l0VmlkZW9TaW5rKj4oZGF0YSk7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSog
cHJpdiA9IHNpbmstPnByaXY7Ci0gICAgR3N0QnVmZmVyKiBidWZmZXI7CiAKLSAgICBnX211dGV4
X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKLSAgICBidWZmZXIgPSBwcml2LT5idWZmZXI7Cisg
ICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZl
ciA9IHByaXYtPmJ1ZmZlcjsKICAgICBwcml2LT5idWZmZXIgPSAwOwotICAgIHByaXYtPnRpbWVv
dXRfaWQgPSAwOworICAgIHByaXYtPnRpbWVvdXRJZCA9IDA7CiAKLSAgICBpZiAoIWJ1ZmZlciB8
fCBwcml2LT51bmxvY2tlZCB8fCBHX1VOTElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7
Ci0gICAgICAgIGdfY29uZF9zaWduYWwocHJpdi0+ZGF0YV9jb25kKTsKLSAgICAgICAgZ19tdXRl
eF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBwcml2LT51
bmxvY2tlZCB8fCBVTkxJS0VMWSghR1NUX0lTX0JVRkZFUihidWZmZXIpKSkgeworICAgICAgICBn
X2NvbmRfc2lnbmFsKHByaXYtPmRhdGFDb25kaXRpb24pOworICAgICAgICBnX211dGV4X3VubG9j
ayhwcml2LT5idWZmZXJNdXRleCk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAg
ICBnX3NpZ25hbF9lbWl0KHNpbmssIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9S
RVFVRVNURURdLCAwLCBidWZmZXIpOwogICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKLSAg
ICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFfY29uZCk7Ci0gICAgZ19tdXRleF91bmxvY2socHJp
di0+YnVmZmVyX211dGV4KTsKKyAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFDb25kaXRpb24p
OworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKIAogICAgIHJldHVybiBG
QUxTRTsKIH0KIAotc3RhdGljIEdzdEZsb3dSZXR1cm4KLXdlYmtpdF92aWRlb19zaW5rX3JlbmRl
cihHc3RCYXNlU2luayogYnNpbmssIEdzdEJ1ZmZlciogYnVmZmVyKQorc3RhdGljIEdzdEZsb3dS
ZXR1cm4gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyKEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0
QnVmZmVyKiBidWZmZXIpCiB7Ci0gICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJ
REVPX1NJTksoYnNpbmspOworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURF
T19TSU5LKGJhc2VTaW5rKTsKICAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2lu
ay0+cHJpdjsKIAotICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdf
bXV0ZXhfbG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAKICAgICBpZiAocHJpdi0+dW5sb2NrZWQp
IHsKLSAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAg
Z19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwogICAgICAgICByZXR1cm4gR1NUX0ZM
T1dfT0s7CiAgICAgfQogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgLy8gSWdub3Jl
IGJ1ZmZlcnMgaWYgdGhlIHZpZGVvIGlzIGFscmVhZHkgaW4gZnVsbHNjcmVlbiB1c2luZwogICAg
IC8vIGFub3RoZXIgc2luay4KICAgICBpZiAocHJpdi0+Z3N0R1dvcmxkLT5pc0Z1bGxzY3JlZW4o
KSkgewotICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAg
ICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAgICAgICAgIHJldHVybiBHU1Rf
RkxPV19PSzsKICAgICB9CisjZW5kaWYKIAogICAgIHByaXYtPmJ1ZmZlciA9IGdzdF9idWZmZXJf
cmVmKGJ1ZmZlcik7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAvLyBGb3IgdGhl
IHVubGlrZWx5IGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBoYXMgbm8gY2FwcywgdGhlIGNhcHMKICAg
ICAvLyBhcmUgaW1wbGljaXRlbHkgdGhlIGNhcHMgb2YgdGhlIHBhZC4gVGhpcyBzaG91bGRuJ3Qg
aGFwcGVuLgotICAgIGlmIChHX1VOTElLRUxZKCFHU1RfQlVGRkVSX0NBUFMoYnVmZmVyKSkpIHsK
KyAgICBpZiAoVU5MSUtFTFkoIUdTVF9CVUZGRVJfQ0FQUyhidWZmZXIpKSkgewogICAgICAgICBi
dWZmZXIgPSBwcml2LT5idWZmZXIgPSBnc3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUo
cHJpdi0+YnVmZmVyKTsKLSAgICAgICAgZ3N0X2J1ZmZlcl9zZXRfY2Fwcyhwcml2LT5idWZmZXIs
IEdTVF9QQURfQ0FQUyhHU1RfQkFTRV9TSU5LX1BBRChic2luaykpKTsKKyAgICAgICAgZ3N0X2J1
ZmZlcl9zZXRfY2Fwcyhwcml2LT5idWZmZXIsIEdTVF9QQURfQ0FQUyhHU1RfQkFTRV9TSU5LX1BB
RChiYXNlU2luaykpKTsKICAgICB9CiAKICAgICBHc3RDYXBzICpjYXBzID0gR1NUX0JVRkZFUl9D
QVBTKGJ1ZmZlcik7CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwogICAgIGludCB3aWR0aCwg
aGVpZ2h0OwotICAgIGlmIChHX1VOTElLRUxZKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMo
Y2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWdz
dF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQp
KSkgeworICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CisgICAgICAgIGdfbXV0ZXhf
dW5sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9S
OworICAgIH0KKyNlbHNlCisgICAgR3N0VmlkZW9GcmFtZSBmcmFtZTsKKyAgICBpZiAoIWdzdF92
aWRlb19mcmFtZV9tYXAoJmZyYW1lLCAmcHJpdi0+aW5mbywgYnVmZmVyLCBHU1RfTUFQX1JFQUQp
KSB7CiAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKLSAgICAgICAgZ19tdXRleF91
bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+
YnVmZmVyTXV0ZXgpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CiAgICAgfQogCisg
ICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0ID0gR1NUX1ZJREVPX0ZSQU1FX0ZPUk1BVCgmZnJhbWUp
OworICAgIGludCB3aWR0aCA9IEdTVF9WSURFT19GUkFNRV9XSURUSCgmZnJhbWUpOworICAgIGlu
dCBoZWlnaHQgPSBHU1RfVklERU9fRlJBTUVfSEVJR0hUKCZmcmFtZSk7CisKKyAgICBnc3Rfdmlk
ZW9fZnJhbWVfdW5tYXAoJmZyYW1lKTsKKyNlbmRpZgorCiAgICAgLy8gQ2Fpcm8ncyBBUkdCIGhh
cyBwcmUtbXVsdGlwbGllZCBhbHBoYSB3aGlsZSBHU3RyZWFtZXIncyBkb2Vzbid0LgogICAgIC8v
IEhlcmUgd2UgY29udmVydCB0byBDYWlybydzIEFSR0IuCiAgICAgaWYgKGZvcm1hdCA9PSBHU1Rf
VklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkgewog
ICAgICAgICAvLyBCZWNhdXNlIEdzdEJhc2VTaW5rOjpyZW5kZXIoKSBvbmx5IG93bnMgdGhlIGJ1
ZmZlciByZWZlcmVuY2UgaW4gdGhlCiAgICAgICAgIC8vIG1ldGhvZCBzY29wZSB3ZSBjYW4ndCB1
c2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRhYmxlKCkgaGVyZS4gQWxzbwogICAgICAgICAvLyBUaGUg
YnVmZmVyIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGhlcmUgYmVjYXVzZSB0aGUgc2Ft
ZSBidWZmZXIKLSAgICAgICAgLy8gY291bGQgYmUgcGFzc2VkIG11bHRpcGxlIHRpbWVzIHRvIHRo
aXMgbWV0aG9kIChpbiB0aGVvcnkpCisgICAgICAgIC8vIGNvdWxkIGJlIHBhc3NlZCBtdWx0aXBs
ZSB0aW1lcyB0byB0aGlzIG1ldGhvZCAoaW4gdGhlb3J5KS4KKworI2lmbmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQogICAgICAgICBHc3RCdWZmZXIgKm5ld0J1ZmZlciA9IGdzdF9idWZmZXJfdHJ5X25l
d19hbmRfYWxsb2MoR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikpOworI2Vsc2UKKyAgICAgICAgZ3Np
emUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKyAgICAgICAgR3N0
QnVmZmVyKiBuZXdCdWZmZXIgPSBnc3RfYnVmZmVyX25ld19hbmRfYWxsb2MoYnVmZmVyU2l6ZSk7
CisjZW5kaWYKIAotICAgICAgICAvLyBDaGVjayBpZiBhbGxvY2F0aW9uIGZhaWxlZAotICAgICAg
ICBpZiAoR19VTkxJS0VMWSghbmV3QnVmZmVyKSkgewotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91
bnJlZihidWZmZXIpOwotICAgICAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211
dGV4KTsKKyAgICAgICAgLy8gQ2hlY2sgaWYgYWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAgIGlm
IChVTkxJS0VMWSghbmV3QnVmZmVyKSkgeworICAgICAgICAgICAgZ19tdXRleF91bmxvY2socHJp
di0+YnVmZmVyTXV0ZXgpOwogICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwogICAg
ICAgICB9CiAKLSAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhKG5ld0J1ZmZlciwgYnVm
ZmVyLCAoR3N0QnVmZmVyQ29weUZsYWdzKSBHU1RfQlVGRkVSX0NPUFlfQUxMKTsKKyNpZm5kZWYg
R1NUX0FQSV9WRVJTSU9OXzEKKyAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhKG5ld0J1
ZmZlciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJf
Q09QWV9BTEwpKTsKKyNlbHNlCisgICAgICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1ZmZl
ciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09Q
WV9NRVRBREFUQSksIDAsIGJ1ZmZlclNpemUpOworI2VuZGlmCiAKICAgICAgICAgLy8gV2UgZG9u
J3QgdXNlIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGhlcmUgYmVjYXVzZQog
ICAgICAgICAvLyBvbmUgZnVuY3Rpb24gY2FsbCBwZXIgdmlkZW8gcGl4ZWwgaXMganVzdCB0b28g
ZXhwZW5zaXZlOgogICAgICAgICAvLyBGb3IgNzIwcC9QQUwgZm9yIGV4YW1wbGUgdGhpcyBtZWFu
cyAxMjgwKjcyMCoyNT0yMzA0MDAwMAogICAgICAgICAvLyBmdW5jdGlvbiBjYWxscyBwZXIgc2Vj
b25kIQotICAgICAgICB1bnNpZ25lZCBzaG9ydCBhbHBoYTsKKyNpZm5kZWYgR1NUX0FQSV9WRVJT
SU9OXzEKICAgICAgICAgY29uc3QgZ3VpbnQ4ICpzb3VyY2UgPSBHU1RfQlVGRkVSX0RBVEEoYnVm
ZmVyKTsKICAgICAgICAgZ3VpbnQ4ICpkZXN0aW5hdGlvbiA9IEdTVF9CVUZGRVJfREFUQShuZXdC
dWZmZXIpOworI2Vsc2UKKyAgICAgICAgR3N0TWFwSW5mbyBzb3VyY2VJbmZvOworICAgICAgICBH
c3RNYXBJbmZvIGRlc3RpbmF0aW9uSW5mbzsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVy
LCAmc291cmNlSW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICAgICAgY29uc3QgZ3VpbnQ4KiBzb3Vy
Y2UgPSBjb25zdF9jYXN0PGd1aW50OCo+KHNvdXJjZUluZm8uZGF0YSk7CisgICAgICAgIGdzdF9i
dWZmZXJfbWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0aW9uSW5mbywgR1NUX01BUF9XUklURSk7Cisg
ICAgICAgIGd1aW50OCogZGVzdGluYXRpb24gPSBzdGF0aWNfY2FzdDxndWludDgqPihkZXN0aW5h
dGlvbkluZm8uZGF0YSk7CisjZW5kaWYKIAogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGhl
aWdodDsgeCsrKSB7CiAgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHdpZHRoOyB5Kysp
IHsKICNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCi0gICAgICAgICAgICAgICAg
YWxwaGEgPSBzb3VyY2VbM107CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYWxwaGEg
PSBzb3VyY2VbM107CiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSAoc291cmNlWzBd
ICogYWxwaGEgKyAxMjgpIC8gMjU1OwogICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzFdID0g
KHNvdXJjZVsxXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKICAgICAgICAgICAgICAgICBkZXN0aW5h
dGlvblsyXSA9IChzb3VyY2VbMl0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CiAgICAgICAgICAgICAg
ICAgZGVzdGluYXRpb25bM10gPSBhbHBoYTsKICNlbHNlCi0gICAgICAgICAgICAgICAgYWxwaGEg
PSBzb3VyY2VbMF07CisgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYWxwaGEgPSBzb3Vy
Y2VbMF07CiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMF0gPSBhbHBoYTsKICAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvblsxXSA9IChzb3VyY2VbMV0gKiBhbHBoYSArIDEyOCkgLyAyNTU7
CiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bMl0gPSAoc291cmNlWzJdICogYWxwaGEgKyAx
MjgpIC8gMjU1OwpAQCAtMjI2LDExMyArMjU5LDEzMCBAQCB3ZWJraXRfdmlkZW9fc2lua19yZW5k
ZXIoR3N0QmFzZVNpbmsqIGJzaW5rLCBHc3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgICAgICAg
ICBkZXN0aW5hdGlvbiArPSA0OwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorICAgICAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJnNvdXJj
ZUluZm8pOworICAgICAgICBnc3RfYnVmZmVyX3VubWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0aW9u
SW5mbyk7CisjZW5kaWYKICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwogICAgICAg
ICBidWZmZXIgPSBwcml2LT5idWZmZXIgPSBuZXdCdWZmZXI7CiAgICAgfQogCisKICAgICAvLyBU
aGlzIHNob3VsZCBsaWtlbHkgdXNlIGEgbG93ZXIgcHJpb3JpdHksIGJ1dCBnbGliIGN1cnJlbnRs
eSBzdGFydmVzCiAgICAgLy8gbG93ZXIgcHJpb3JpdHkgc291cmNlcy4KICAgICAvLyBTZWU6IGh0
dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD02MTA4MzAuCi0gICAgcHJp
di0+dGltZW91dF9pZCA9IGdfdGltZW91dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAs
CisgICAgcHJpdi0+dGltZW91dElkID0gZ190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVG
QVVMVCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtp
dF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdzdF9vYmplY3RfcmVmKHNpbmspLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEdEZXN0cm95Tm90aWZ5KWdzdF9vYmplY3RfdW5yZWYpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2Fz
dDxHRGVzdHJveU5vdGlmeT4oZ3N0X29iamVjdF91bnJlZikpOwogCi0gICAgZ19jb25kX3dhaXQo
cHJpdi0+ZGF0YV9jb25kLCBwcml2LT5idWZmZXJfbXV0ZXgpOwotICAgIGdfbXV0ZXhfdW5sb2Nr
KHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19jb25kX3dhaXQocHJpdi0+ZGF0YUNvbmRpdGlv
biwgcHJpdi0+YnVmZmVyTXV0ZXgpOworICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlck11
dGV4KTsKICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiB9CiAKLXN0YXRpYyB2b2lkCi13ZWJraXRf
dmlkZW9fc2lua19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3N0YXRpYyB2b2lkIHdlYmtpdF92
aWRlb19zaW5rX2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogewogICAgIFdlYktpdFZpZGVvU2lu
ayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKG9iamVjdCk7CiAgICAgV2ViS2l0VmlkZW9TaW5r
UHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7CiAKLSAgICBpZiAocHJpdi0+ZGF0YV9jb25kKSB7
CisgICAgaWYgKHByaXYtPmRhdGFDb25kaXRpb24pIHsKICNpZiBHTElCX0NIRUNLX1ZFUlNJT04o
MiwgMzEsIDApCi0gICAgICAgIGdfY29uZF9jbGVhcihwcml2LT5kYXRhX2NvbmQpOwotICAgICAg
ICBXVEY6OmZhc3REZWxldGUocHJpdi0+ZGF0YV9jb25kKTsKKyAgICAgICAgZ19jb25kX2NsZWFy
KHByaXYtPmRhdGFDb25kaXRpb24pOworICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+ZGF0
YUNvbmRpdGlvbik7CiAjZWxzZQotICAgICAgICBnX2NvbmRfZnJlZShwcml2LT5kYXRhX2NvbmQp
OworICAgICAgICBnX2NvbmRfZnJlZShwcml2LT5kYXRhQ29uZGl0aW9uKTsKICNlbmRpZgotICAg
ICAgICBwcml2LT5kYXRhX2NvbmQgPSAwOworICAgICAgICBwcml2LT5kYXRhQ29uZGl0aW9uID0g
MDsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+YnVmZmVyX211dGV4KSB7CisgICAgaWYgKHByaXYt
PmJ1ZmZlck11dGV4KSB7CiAjaWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsIDMxLCAwKQotICAgICAg
ICBnX211dGV4X2NsZWFyKHByaXYtPmJ1ZmZlcl9tdXRleCk7Ci0gICAgICAgIFdURjo6ZmFzdERl
bGV0ZShwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBnX211dGV4X2NsZWFyKHByaXYtPmJ1
ZmZlck11dGV4KTsKKyAgICAgICAgV1RGOjpmYXN0RGVsZXRlKHByaXYtPmJ1ZmZlck11dGV4KTsK
ICNlbHNlCi0gICAgICAgIGdfbXV0ZXhfZnJlZShwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAg
ICBnX211dGV4X2ZyZWUocHJpdi0+YnVmZmVyTXV0ZXgpOwogI2VuZGlmCi0gICAgICAgIHByaXYt
PmJ1ZmZlcl9tdXRleCA9IDA7CisgICAgICAgIHByaXYtPmJ1ZmZlck11dGV4ID0gMDsKICAgICB9
CiAKICAgICBHX09CSkVDVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7CiB9
CiAKLXN0YXRpYyB2b2lkCi11bmxvY2tfYnVmZmVyX211dGV4KFdlYktpdFZpZGVvU2lua1ByaXZh
dGUqIHByaXYpCitzdGF0aWMgdm9pZCB1bmxvY2tCdWZmZXJNdXRleChXZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKiBwcml2KQogewotICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOwor
ICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAKICAgICBpZiAocHJpdi0+YnVm
ZmVyKSB7CiAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYocHJpdi0+YnVmZmVyKTsKICAgICAgICAg
cHJpdi0+YnVmZmVyID0gMDsKICAgICB9CiAKLSAgICBwcml2LT51bmxvY2tlZCA9IFRSVUU7Cisg
ICAgcHJpdi0+dW5sb2NrZWQgPSB0cnVlOwogCi0gICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRh
X2NvbmQpOwotICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19j
b25kX3NpZ25hbChwcml2LT5kYXRhQ29uZGl0aW9uKTsKKyAgICBnX211dGV4X3VubG9jayhwcml2
LT5idWZmZXJNdXRleCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3Npbmtf
dW5sb2NrKEdzdEJhc2VTaW5rKiBvYmplY3QpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVv
X3NpbmtfdW5sb2NrKEdzdEJhc2VTaW5rKiBiYXNlU2luaykKIHsKLSAgICBXZWJLaXRWaWRlb1Np
bmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhvYmplY3QpOworICAgIFdlYktpdFZpZGVvU2lu
ayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJhc2VTaW5rKTsKIAotICAgIHVubG9ja19idWZm
ZXJfbXV0ZXgoc2luay0+cHJpdik7CisgICAgdW5sb2NrQnVmZmVyTXV0ZXgoc2luay0+cHJpdik7
CiAKLSAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5L
X0NMQVNTLCB1bmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KG9iamVjdCksIFRSVUUpOworICAgIHJldHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxU
KEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVubG9jaywgKGJhc2VTaW5rKSwgVFJVRSk7CiB9CiAKLXN0
YXRpYyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3AoR3N0QmFzZVNpbmsq
IG9iamVjdCkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcChH
c3RCYXNlU2luayogYmFzZVNpbmspCiB7Ci0gICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VC
S0lUX1ZJREVPX1NJTksob2JqZWN0KTsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2
ID0gc2luay0+cHJpdjsKKyAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lU
X1ZJREVPX1NJTksoYmFzZVNpbmspLT5wcml2OwogCi0gICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1
ZmZlcl9tdXRleCk7Ci0gICAgcHJpdi0+dW5sb2NrZWQgPSBGQUxTRTsKLSAgICBnX211dGV4X3Vu
bG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJN
dXRleCk7CisgICAgcHJpdi0+dW5sb2NrZWQgPSBmYWxzZTsKKyAgICBnX211dGV4X3VubG9jayhw
cml2LT5idWZmZXJNdXRleCk7CiAKLSAgICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVG
QVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2tfc3RvcCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAob2JqZWN0KSwgVFJVRSk7CisgICAgcmV0dXJuIEdTVF9D
QUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQoR1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrX3N0b3As
IChiYXNlU2luayksIFRSVUUpOwogfQogCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF92aWRlb19z
aW5rX3N0b3AoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRf
dmlkZW9fc2lua19zdG9wKEdzdEJhc2VTaW5rKiBiYXNlU2luaykKIHsKLSAgICBXZWJLaXRWaWRl
b1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdjsK
KyAgICB1bmxvY2tCdWZmZXJNdXRleChXRUJLSVRfVklERU9fU0lOSyhiYXNlU2luayktPnByaXYp
OworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Np
bmtfc3RhcnQoR3N0QmFzZVNpbmsqIGJhc2VTaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1By
aXZhdGUqIHByaXYgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlU2luayktPnByaXY7CiAKLSAgICB1
bmxvY2tfYnVmZmVyX211dGV4KHByaXYpOworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJN
dXRleCk7CisgICAgcHJpdi0+dW5sb2NrZWQgPSBmYWxzZTsKKyAgICBnX211dGV4X3VubG9jayhw
cml2LT5idWZmZXJNdXRleCk7CiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyBnYm9vbGVh
bgotd2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKKyNpZmRl
ZiBHU1RfQVBJX1ZFUlNJT05fMQorc3RhdGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3By
b3Bvc2VfYWxsb2NhdGlvbihHc3RCYXNlU2luayogYmFzZVNpbmssIEdzdFF1ZXJ5KiBxdWVyeSkK
IHsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTkso
YmFzZV9zaW5rKS0+cHJpdjsKKyAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklE
RU9fU0lOSyhiYXNlU2luayk7CisgICAgR3N0Q2FwcyogY2FwczsKKyAgICBnYm9vbGVhbiBuZWVk
X3Bvb2w7CiAKLSAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4KTsKLSAgICBwcml2
LT51bmxvY2tlZCA9IEZBTFNFOwotICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRl
eCk7CisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24ocXVlcnksICZjYXBzLCAmbmVlZF9w
b29sKTsKKworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYg
KCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnNpbmstPnByaXYtPmluZm8sIGNhcHMpKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShx
dWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUpOworICAgIGdzdF9xdWVyeV9hZGRfYWxsb2Nh
dGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklERU9fQ1JPUF9NRVRBX0FQSV9UWVBFKTsKICAgICByZXR1
cm4gVFJVRTsKIH0KKyNlbmRpZgogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiBzdGF0aWMg
dm9pZAogbWFyc2hhbF9WT0lEX19NSU5JT0JKRUNUKEdDbG9zdXJlICogY2xvc3VyZSwgR1ZhbHVl
ICogcmV0dXJuX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50IG5fcGFyYW1f
dmFsdWVzLCBjb25zdCBHVmFsdWUgKiBwYXJhbV92YWx1ZXMsCkBAIC0zNTYsNDYgKzQwNiw2NyBA
QCBtYXJzaGFsX1ZPSURfX01JTklPQkpFQ1QoR0Nsb3N1cmUgKiBjbG9zdXJlLCBHVmFsdWUgKiBy
ZXR1cm5fdmFsdWUsCiAKICAgY2FsbGJhY2soZGF0YTEsIGdzdF92YWx1ZV9nZXRfbWluaV9vYmpl
Y3QocGFyYW1fdmFsdWVzICsgMSksIGRhdGEyKTsKIH0KKyNlbmRpZgogCi1zdGF0aWMgdm9pZAot
d2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3Mp
CitzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZpZGVvU2lu
a0NsYXNzKiBrbGFzcykKIHsKLSAgICBHT2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhrbGFzcyk7Ci0gICAgR3N0QmFzZVNpbmtDbGFzcyogZ3N0YmFzZV9zaW5rX2Ns
YXNzID0gR1NUX0JBU0VfU0lOS19DTEFTUyhrbGFzcyk7CisgICAgR09iamVjdENsYXNzKiBnb2Jq
ZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0QmFzZVNpbmtDbGFzcyog
YmFzZVNpbmtDbGFzcyA9IEdTVF9CQVNFX1NJTktfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1l
bnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworCisgICAg
Z3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0
aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lua1RlbXBsYXRlKSk7CisjaWZkZWYgR1NUX0FQSV9WRVJT
SU9OXzEKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfbWV0YWRhdGEoZWxlbWVudENsYXNzLAor
I2Vsc2UKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUoZWxlbWVudENs
YXNzLAorI2VuZGlmCisgICAgICAgICAgICAiV2ViS2l0IHZpZGVvIHNpbmsiLAorICAgICAgICAg
ICAgIlNpbmsvVmlkZW8iLCAiU2VuZHMgdmlkZW8gZGF0YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVs
aW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCisgICAgICAgICAgICAiQWxwIFRva2VyIDxhbHBAYXRv
a2VyLmNvbT4iKTsKIAogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9m
KFdlYktpdFZpZGVvU2lua1ByaXZhdGUpKTsKIAotICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2Ug
PSB3ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlOworICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9zZSA9
IHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bvc2U7CiAKLSAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVu
bG9jayA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKLSAgICBnc3RiYXNlX3NpbmtfY2xhc3Mt
PnVubG9ja19zdG9wID0gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrX3N0b3A7Ci0gICAgZ3N0YmFz
ZV9zaW5rX2NsYXNzLT5yZW5kZXIgPSB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7Ci0gICAgZ3N0
YmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xsID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOwotICAg
IGdzdGJhc2Vfc2lua19jbGFzcy0+c3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7Ci0gICAg
Z3N0YmFzZV9zaW5rX2NsYXNzLT5zdGFydCA9IHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0OworICAg
IGJhc2VTaW5rQ2xhc3MtPnVubG9jayA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKKyAgICBi
YXNlU2lua0NsYXNzLT51bmxvY2tfc3RvcCA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9w
OworICAgIGJhc2VTaW5rQ2xhc3MtPnJlbmRlciA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsK
KyAgICBiYXNlU2lua0NsYXNzLT5wcmVyb2xsID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOwor
ICAgIGJhc2VTaW5rQ2xhc3MtPnN0b3AgPSB3ZWJraXRfdmlkZW9fc2lua19zdG9wOworICAgIGJh
c2VTaW5rQ2xhc3MtPnN0YXJ0ID0gd2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQ7CisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBiYXNlU2lua0NsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gPSB3
ZWJraXRfdmlkZW9fc2lua19wcm9wb3NlX2FsbG9jYXRpb247CisjZW5kaWYKIAogICAgIHdlYmtp
dF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJy
ZXBhaW50LXJlcXVlc3RlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyks
Ci0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCi0gICAgICAgICAgICAwLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAs
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFMX1JVTl9MQVNU
IHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsIC8vIENsYXNzIG9mZnNldC4KKyAg
ICAgICAgICAgIDAsIC8vIEFjY3VtdWxhdG9yLgorICAgICAgICAgICAgMCwgLy8gQWNjdW11bGF0
b3IgZGF0YS4KKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAgICAgICAgIG1hcnNoYWxf
Vk9JRF9fTUlOSU9CSkVDVCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9C
VUZGRVIpOworI2Vsc2UKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCAv
LyBDdXN0b20gbWFyc2hhbGxlci4KKyNlbmRpZgorICAgICAgICAgICAgR19UWVBFX05PTkUsIC8v
IFJldHVybiB0eXBlLgorICAgICAgICAgICAgMSwgLy8gT25seSBvbmUgcGFyYW1ldGVyLgorICAg
ICAgICAgICAgR1NUX1RZUEVfQlVGRkVSKTsKIH0KIAotLyoqCi0gKiB3ZWJraXRfdmlkZW9fc2lu
a19uZXc6Ci0gKgotICogQ3JlYXRlcyBhIG5ldyBHU3RyZWFtZXIgdmlkZW8gc2luay4KLSAqCi0g
KiBSZXR1cm4gdmFsdWU6IGEgI0dzdEVsZW1lbnQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIHZpZGVv
IHNpbmsKLSAqLworCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiBHc3RFbGVtZW50KiB3ZWJr
aXRfdmlkZW9fc2lua19uZXcoV2ViQ29yZTo6R1N0cmVhbWVyR1dvcmxkKiBnc3RHV29ybGQpCiB7
CiAgICAgR3N0RWxlbWVudCogZWxlbWVudCA9IEdTVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJL
SVRfVFlQRV9WSURFT19TSU5LLCAwKSk7CiAgICAgV0VCS0lUX1ZJREVPX1NJTksoZWxlbWVudCkt
PnByaXYtPmdzdEdXb3JsZCA9IGdzdEdXb3JsZDsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KKyNl
bHNlCitHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoKQoreworICAgIHJldHVybiBH
U1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklERU9fU0lOSywgMCkpOworfQor
I2VuZGlmCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJl
YW1lci5oCmluZGV4IDUwMTg1MGYuLmNhNjFmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVh
bWVyLmgKQEAgLTI1LDggKzI1LDcgQEAKICNpbmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIKICNp
bmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Npbmsu
aD4KLQotR19CRUdJTl9ERUNMUworI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogCiAjZGVm
aW5lIFdFQktJVF9UWVBFX1ZJREVPX1NJTksgd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3R5cGUoKQog
CkBAIC03MywxMSArNzIsMTMgQEAgc3RydWN0IF9XZWJLaXRWaWRlb1NpbmtDbGFzcyB7CiAgICAg
dm9pZCAoKiBfd2Via2l0X3Jlc2VydmVkNikodm9pZCk7CiB9OwogCitHVHlwZSB3ZWJraXRfdmlk
ZW9fc2lua19nZXRfdHlwZSgpIEdfR05VQ19DT05TVDsKIAotR1R5cGUgICAgICAgd2Via2l0X3Zp
ZGVvX3NpbmtfZ2V0X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOwotR3N0RWxlbWVudCAqd2Via2l0
X3ZpZGVvX3NpbmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1lckdXb3JsZCopOwotCi1HX0VORF9ERUNM
UworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorR3N0RWxlbWVudCogd2Via2l0X3ZpZGVvX3Np
bmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1lckdXb3JsZCopOworI2Vsc2UKK0dzdEVsZW1lbnQqIHdl
YmtpdF92aWRlb19zaW5rX25ldygpOworI2VuZGlmCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
KQogI2VuZGlmCi0tIAoxLjcuMTA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141630</attachid>
            <date>2012-05-13 19:19:55 -0700</date>
            <delta_ts>2012-06-09 11:54:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>45839</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBhYWY1ZWM0MjRmYTQwN2JmNzcxZTY1Mzk5NjM0Y2ExMDg5YTJlNTdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDMgTWF5IDIwMTIgMTU6MDY6MzMgKzAyMDAKU3ViamVjdDogW1BBVENIXSBQ
YXRjaAoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgNDQgKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25p
bmcuY3BwICAgICB8ICAgMjkgKysKIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVy
c2lvbmluZy5oICAgICAgIHwgICAgNiArCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyLmggICB8ICAgNDEgKy0tCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyQ0cubW0gICAgICAgICB8ICAgNjEgLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDU1ICstLQogLi4uL2dyYXBoaWNz
L2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCAgICAgICAgfCAgIDUwICstLQogLi4uL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDY1ICsrLS0K
IC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCAgICAgIHwgIDM1
OSArKysrKysrKysrKystLS0tLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuaCAgICAgICAgfCAgIDEzICstCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDQxOSBp
bnNlcnRpb25zKCspLCAzMDYgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ0cubW0K
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMzQ4N2QyNy4uNDc5OWNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3
IEBACisyMDEyLTA1LTAzICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1N0cmVhbWVyXSAwLjExIHZpZGVvLXNpbmsKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc3MDg3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVmlkZW8gZnJhbWUgcmVuZGVyaW5nIGNoYW5n
ZXMgZm9yIEdTdHJlYW1lciAwLjExLzEuMC4gVGhlCisgICAgICAgIEltYWdlR1N0cmVhbWVyQ0cg
YWJzdHJhY3Rpb24gaXMgYmVpbmcgcmVtb3ZlZCB1bnRpbCBJIG1hbmFnZSB0bworICAgICAgICBw
b3J0IG15IGdzdC1tYWMgV2ViS2l0IGJyYW5jaCBvdmVyIHRvIFdlYktpdDIgbWFjIHBvcnQuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmlu
Zy5jcHA6CisgICAgICAgICh3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2Fwcyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lci5oOiBjcmVhdGVJbWFnZSBBUEkKKyAgICAgICAgdXBkYXRlIHNv
IGltcGxlbWVudGF0aW9ucyBkb24ndCBuZWVkIHRvIHVzZQorICAgICAgICBnc3RfdmlkZW9fZm9y
bWF0X3BhcnNlX2NhcHMgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZCBpbiBnc3QtMC4xMS4KKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUdTdHJlYW1lcjo6c2V0Q3JvcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VHU3RyZWFtZXI6OnJlY3QpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tOiBSZW1vdmVk
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNh
aXJvLmNwcDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwOgor
ICAgICAgICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRWaWRlb1Np
bmtQcml2YXRlKToKKyAgICAgICAgKHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyk6Cisg
ICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19yZW5kZXIpOgorICAgICAgICAod2Via2l0X3ZpZGVv
X3NpbmtfZGlzcG9zZSk6CisgICAgICAgICh1bmxvY2tCdWZmZXJNdXRleCk6CisgICAgICAgICh3
ZWJraXRfdmlkZW9fc2lua191bmxvY2spOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfdW5s
b2NrX3N0b3ApOgorICAgICAgICAod2Via2l0X3ZpZGVvX3Npbmtfc3RvcCk6CisgICAgICAgICh3
ZWJraXRfdmlkZW9fc2lua19zdGFydCk6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19wcm9w
b3NlX2FsbG9jYXRpb24pOgorICAgICAgICAod2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
ci5oOgorCiAyMDEyLTA1LTEyICBNYXggRmVpbCAgPG1mZWlsQHJpbS5jb20+CiAKICAgICAgICAg
W0JsYWNrQmVycnldIEFsbG93IHRoZSBwbGF0Zm9ybSBtZWRpYSBwbGF5ZXIgdG8gZGV0ZXJtaW5l
IHRoZSBtZWRpYSBlbGVtZW50J3MgcGF1c2VkL3BsYXlpbmcgc3RhdHVzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lv
bmluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0
cmVhbWVyVmVyc2lvbmluZy5jcHAKaW5kZXggZDQyMzhjMS4uYjIxYjJiMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNp
b25pbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcApAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogCiAjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKIAogdm9pZCB3ZWJraXRHc3RPYmplY3RSZWZTaW5rKEdzdE9iamVjdCogZ3N0T2Jq
ZWN0KQogewpAQCAtNDgsMyArNDksMzEgQEAgR3N0Q2Fwcyogd2Via2l0R3N0RWxlbWVudEdldFBh
ZENhcHMoR3N0RWxlbWVudCogZWxlbWVudCwgY29uc3QgY2hhciogZGlyZWN0aW9uKQogICAgIGdz
dF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChwYWQpKTsKICAgICByZXR1cm4gY2FwczsKIH0KKwor
Ym9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhHc3RDYXBzKiBjYXBzLCBX
ZWJDb3JlOjpJbnRTaXplJiBzaXplLCBHc3RWaWRlb0Zvcm1hdCYgZm9ybWF0LCBpbnQmIHBpeGVs
QXNwZWN0UmF0aW9OdW1lcmF0b3IsIGludCYgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBp
bnQmIHN0cmlkZSkKK3sKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5m
byBpbmZvOworICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9ybWF0ID0gR1NUX1ZJREVPX0lORk9fRk9S
TUFUKCZpbmZvKTsKKyAgICBzaXplLnNldFdpZHRoKEdTVF9WSURFT19JTkZPX1dJRFRIKCZpbmZv
KSk7CisgICAgc2l6ZS5zZXRIZWlnaHQoR1NUX1ZJREVPX0lORk9fSEVJR0hUKCZpbmZvKSk7Cisg
ICAgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IEdTVF9WSURFT19JTkZPX1BBUl9OKCZpbmZv
KTsKKyAgICBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IgPSBHU1RfVklERU9fSU5GT19QQVJf
RCgmaW5mbyk7CisgICAgc3RyaWRlID0gR1NUX1ZJREVPX0lORk9fUExBTkVfU1RSSURFKCZpbmZv
LCAwKTsKKyNlbHNlCisgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworICAgIGlmICghR1NUX0lTX0NB
UFMoY2FwcykgfHwgIWdzdF9jYXBzX2lzX2ZpeGVkKGNhcHMpCisgICAgICAgIHx8ICFnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KQorICAg
ICAgICB8fCAhZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvKGNhcHMsICZw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc2l6ZS5zZXRXaWR0aCh3aWR0aCk7CisgICAgc2l6ZS5z
ZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICBzdHJpZGUgPSBzaXplLndpZHRoKCkgKiA0OworI2VuZGlm
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oCmlu
ZGV4IGZhYWRjMjYuLmZkNDI3NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuaApA
QCAtMjEsOCArMjEsMTQgQEAKICNkZWZpbmUgR1N0cmVhbWVyVmVyc2lvbmluZ19oCiAKICNpbmNs
dWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK2NsYXNzIEludFNpemU7Cit9OwogCiB2b2lkIHdlYmtpdEdzdE9iamVjdFJl
ZlNpbmsoR3N0T2JqZWN0Kik7CiBHc3RDYXBzKiB3ZWJraXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhH
c3RFbGVtZW50KiwgY29uc3QgY2hhciopOworYm9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3Jt
YXRGcm9tQ2FwcyhHc3RDYXBzKiwgV2ViQ29yZTo6SW50U2l6ZSYsIEdzdFZpZGVvRm9ybWF0Jiwg
aW50JiwgaW50JiwgaW50Jik7CiAKICNlbmRpZiAvLyBHU3RyZWFtZXJWZXJzaW9uaW5nX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFn
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0ltYWdlR1N0cmVhbWVyLmgKaW5kZXggYWI3OTliYS4uZjZhYzFhNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxp
YSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgog
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKQEAgLTIzLDIwICsyMywyNCBAQAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSA8Z3N0
L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZlcnNpb25pbmcuaCIKICNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKK3R5
cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdENh
cHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50U2l6ZTsKIAogY2xh
c3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewog
ICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNy
ZWF0ZUltYWdlKEdzdEJ1ZmZlciopOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdT
dHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIo
YnVmZmVyLCBjYXBzKSk7CisgICAgICAgIH0KICAgICAgICAgfkltYWdlR1N0cmVhbWVyKCk7CiAK
ICAgICAgICAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4gaW1hZ2UoKQpAQCAtNDUsMjEgKzQ5LDE4
IEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50ZWQ8SW1hZ2VHU3RyZWFt
ZXI+IHsKICAgICAgICAgICAgIHJldHVybiBtX2ltYWdlLmdldCgpOwogICAgICAgICB9CiAKKyAg
ICAgICAgdm9pZCBzZXRDcm9wUmVjdChGbG9hdFJlY3QgcmVjdCkgeyBtX2Nyb3BSZWN0ID0gcmVj
dDsgfQorICAgICAgICBGbG9hdFJlY3QgcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICghbV9jcm9wUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVj
dChtX2Nyb3BSZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgLTEsIC0x
KTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEJpdG1hcEltYWdl
PiBtX2ltYWdlOwotCi0jaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RC
dWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRpZgotCi0jaWYgUExBVEZP
Uk0oUVQpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomLCBJbnRTaXplLCBRSW1h
Z2U6OkZvcm1hdCk7Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICAgICAgSW1hZ2VH
U3RyZWFtZXIoR3N0QnVmZmVyKiYsIEludFNpemUpOwotI2VuZGlmCi0KKyAgICAgICAgRmxvYXRS
ZWN0IG1fY3JvcFJlY3Q7CisgICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciosIEdzdENh
cHMqKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDRy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBmZTA5MjhiLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNHLm1tCisrKyAvZGV2
L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEg
Uy5MCi0gKgotICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgi
Ci0jaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKLSNpZiBFTkFCTEUoVklERU8pICYmIFVTRShH
U1RSRUFNRVIpCi0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1QYXNzUmVmUHRyPEltYWdl
R1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIp
Ci17Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBzID0g
Z3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwotICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsK
LSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICBy
ZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVh
bWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpOwotfQotCi1JbWFnZUdTdHJlYW1l
cjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUpCi0gICAg
OiBtX2ltYWdlKDApCi17Ci0gICAgQVNTRVJUKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKLQot
ICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGRhdGEoQWRvcHRDRiwgQ0ZEYXRhQ3JlYXRlV2l0aEJ5
dGVzTm9Db3B5KDAsIHN0YXRpY19jYXN0PFVJbnQ4Kj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikp
LCBHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSwga0NGQWxsb2NhdG9yTnVsbCkpOwotICAgIFJldGFp
blB0cjxDR0RhdGFQcm92aWRlclJlZj4gcHJvdmlkZXIoQWRvcHRDRiwgQ0dEYXRhUHJvdmlkZXJD
cmVhdGVXaXRoQ0ZEYXRhKGRhdGEuZ2V0KCkpKTsKLSAgICBDR0ltYWdlUmVmIGZyYW1lSW1hZ2Ug
PSBDR0ltYWdlQ3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgOCwgMzIsIHNpemUu
d2lkdGgoKSo0LCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0JpdG1hcEJ5
dGVPcmRlcjMyTGl0dGxlIHwga0NHSW1hZ2VBbHBoYUZpcnN0LCBwcm92aWRlci5nZXQoKSwgMCwg
ZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOwotICAgIG1faW1hZ2UgPSBCaXRtYXBJ
bWFnZTo6Y3JlYXRlKGZyYW1lSW1hZ2UpOwotfQotCi1JbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0
cmVhbWVyKCkKLXsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS5jbGVhcigpOwot
Ci0gICAgbV9pbWFnZSA9IDA7Ci19Ci0KLSNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0
cmVhbWVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCmluZGV4IGEwYmY1ZjQuLjAxODYzMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdT
dHJlYW1lckNhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKQEAgLTIyLDQwICsyMiw1MyBAQAogCiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNp
ZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEu
aD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1h
Z2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZl
cikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0
Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkKIHsKLSAgICBpbnQgd2lkdGggPSAwLCBoZWln
aHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7
CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9w
YXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0
X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBJbnRTaXpl
IHNpemU7CisgICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0
aW9EZW5vbWluYXRvciwgc3RyaWRlOworICAgIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZy
b21DYXBzKGNhcHMsIHNpemUsIGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4
ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGUpOwogCi0gICAgZ3N0X2NhcHNfdW5yZWYo
Y2Fwcyk7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RNYXBJbmZvIG1hcEluZm87
CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmbWFwSW5mbywgR1NUX01BUF9SRUFEKTsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obWFwSW5mby5kYXRhKTsKKyNlbHNlCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZm
ZXIpKTsKKyNlbmRpZgogCiAgICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9Gb3JtYXQ7Ci0gICAgaWYg
KGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQkdSQSkKLSAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwot
ICAgIGVsc2UKLSAgICAgICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7Ci0KLSAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSwgY2Fpcm9Gb3JtYXQpKTsKLX0KKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRU
TEVfRU5ESUFOCisgICAgY2Fpcm9Gb3JtYXQgPSAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRf
QkdSQSkgPyBDQUlST19GT1JNQVRfQVJHQjMyIDogQ0FJUk9fRk9STUFUX1JHQjI0OworI2Vsc2UK
KyAgICBjYWlyb0Zvcm1hdCA9IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSA/IENB
SVJPX0ZPUk1BVF9BUkdCMzIgOiBDQUlST19GT1JNQVRfUkdCMjQ7CisjZW5kaWYKIAotSW1hZ2VH
U3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXpl
LCBjYWlyb19mb3JtYXRfdCYgY2Fpcm9Gb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAg
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y
X2RhdGEoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIGNhaXJvRm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53
aWR0aCgpKSk7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9jcmVhdGVfZm9yX2RhdGEoYnVmZmVyRGF0YSwgY2Fpcm9Gb3JtYXQsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgc3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgPT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRt
YXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAg
ICBHc3RWaWRlb0Nyb3BNZXRhKiBjcm9wTWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3Bf
bWV0YShidWZmZXIpOworICAgIGlmIChjcm9wTWV0YSkKKyAgICAgICAgc2V0Q3JvcFJlY3QoRmxv
YXRSZWN0KGNyb3BNZXRhLT54LCBjcm9wTWV0YS0+eSwgY3JvcE1ldGEtPndpZHRoLCBjcm9wTWV0
YS0+aGVpZ2h0KSk7CisKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcEluZm8pOwor
I2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0lt
YWdlR1N0cmVhbWVyUXQuY3BwCmluZGV4IDM2YjA4MDYuLmIzNTQ5MTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1h
Z2VHU3RyZWFtZXJRdC5jcHAKQEAgLTIxLDM5ICsyMSw0OSBAQAogI2luY2x1ZGUgIkltYWdlR1N0
cmVhbWVyLmgiCiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5k
aWYKKwogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVh
bWVyPiBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFn
ZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNh
cHMpCisgICAgOiBtX2ltYWdlKDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsK
LSAgICBHc3RDYXBzKiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOworICAgIFFQ
aXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7
Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotCi0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisgICAgSW50U2l6
ZSBzaXplOworICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IsIHN0cmlkZTsKKyAgICB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRG
cm9tQ2FwcyhjYXBzLCBzaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBp
eGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlKTsKIAorI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgR3N0TWFwSW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwg
JmluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJl
dF9jYXN0PHVjaGFyKj4oaW5mby5kYXRhKTsKKyNlbHNlCisgICAgdWNoYXIqIGJ1ZmZlckRhdGEg
PSByZWludGVycHJldF9jYXN0PHVjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworI2Vu
ZGlmCiAgICAgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9PSBH
U1RfVklERU9fRk9STUFUX1JHQikKLSAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1h
dF9SR0I4ODg7Ci0gICAgZWxzZQotICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0
X1JHQjMyOworI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpbWFnZUZv
cm1hdCA9IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSA/IFFJbWFnZTo6Rm9ybWF0
X1JHQjMyIDogUUltYWdlOjpGb3JtYXRfUkdCODg4OworI2Vsc2UKKyAgICBpbWFnZUZvcm1hdCA9
IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0Iz
MiA6IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGltYWdl
Rm9ybWF0KSk7Ci19CisgICAgUUltYWdlIGltYWdlKGJ1ZmZlckRhdGEsIHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3Ry
ZWFtZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9ybWF0IGlt
YWdlRm9ybWF0KQotICAgIDogbV9pbWFnZSgwKQotewotICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBu
ZXcgUVBpeG1hcDsKLSAgICBRSW1hZ2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2UtPmNv
bnZlcnRGcm9tSW1hZ2UoaW1hZ2UpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRl
KHN1cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3Vu
bWFwKGJ1ZmZlciwgJmluZm8pOworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VH
U3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
LmNwcAppbmRleCA2MmY1MzUzLi4wM2RjMmZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtMjUzLDEwICsyNTMsMTIgQEAgTWVkaWFQbGF5
ZXJQcml2YXRlR1N0cmVhbWVyOjp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKICAgICAg
ICAgbV9tZWRpYUxvY2F0aW9ucyA9IDA7CiAgICAgfQogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lP
Tl8xCiAgICAgaWYgKG1fdmlkZW9TaW5rQmluKSB7CiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
bV92aWRlb1NpbmtCaW4pOwogICAgICAgICBtX3ZpZGVvU2lua0JpbiA9IDA7CiAgICAgfQorI2Vu
ZGlmCiAKICAgICBpZiAobV9wbGF5QmluKSB7CiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX3BsYXlCaW4sIEdTVF9TVEFURV9OVUxMKTsKQEAgLTQ5Niw5ICs0OTgsMTAgQEAgSW50U2l6
ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICBp
ZiAoIWNhcHMpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7CiAKLSAgICBpbnQgcGl4ZWxBc3Bl
Y3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOworICAgIGludCBw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0
cmlkZTsKICAgICBpbnQgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5QXNwZWN0
UmF0aW9HQ0Q7Ci0gICAgaW50IG9yaWdpbmFsV2lkdGggPSAwLCBvcmlnaW5hbEhlaWdodCA9IDA7
CisgICAgSW50U2l6ZSBvcmlnaW5hbFNpemU7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0Owog
CiAgICAgLy8gVE9ETzogaGFuZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQog
ICAgIC8vIGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEK
QEAgLTUwNywzMCArNTEwLDE1IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
OjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAKICAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3Jp
Z2luYWwgc2l6ZSwgaWYgdGhpcyBmYWlscyB0aGUKICAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtl
bHkgbm90IHlldCBuZWdvdGlhdGVkIGl0cyBjYXBzLgotI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
Ci0gICAgR3N0VmlkZW9JbmZvIGluZm87Ci0gICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJmluZm8sIGNhcHMpKQorICAgIGlmICghd2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJv
bUNhcHMoY2Fwcywgb3JpZ2luYWxTaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0
b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlKSkKICAgICAgICAgcmV0dXJu
IEludFNpemUoKTsKIAotICAgIG9yaWdpbmFsV2lkdGggPSBHU1RfVklERU9fSU5GT19XSURUSCgm
aW5mbyk7Ci0gICAgb3JpZ2luYWxIZWlnaHQgPSBHU1RfVklERU9fSU5GT19IRUlHSFQoJmluZm8p
OwotICAgIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IgPSBHU1RfVklERU9fSU5GT19QQVJfTigm
aW5mbyk7Ci0gICAgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yID0gR1NUX1ZJREVPX0lORk9f
UEFSX0QoJmluZm8pOwotI2Vsc2UKLSAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2lu
YWwgc2l6ZS4KLSAgICBpZiAoIUdTVF9JU19DQVBTKGNhcHMpIHx8ICFnc3RfY2Fwc19pc19maXhl
ZChjYXBzKQotICAgICAgICB8fCAhZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsIDAs
ICZvcmlnaW5hbFdpZHRoLCAmb3JpZ2luYWxIZWlnaHQpCi0gICAgICAgIHx8ICFnc3RfdmlkZW9f
cGFyc2VfY2Fwc19waXhlbF9hc3BlY3RfcmF0aW8oY2FwcywgJnBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcikpCi0gICAgICAgIHJldHVybiBJbnRTaXpl
KCk7Ci0jZW5kaWYKLQotICAgIExPR19WRVJCT1NFKE1lZGlhLCAiT3JpZ2luYWwgdmlkZW8gc2l6
ZTogJWR4JWQiLCBvcmlnaW5hbFdpZHRoLCBvcmlnaW5hbEhlaWdodCk7CisgICAgTE9HX1ZFUkJP
U0UoTWVkaWEsICJPcmlnaW5hbCB2aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsU2l6ZS53aWR0
aCgpLCBvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAiUGl4
ZWwgYXNwZWN0IHJhdGlvOiAlZC8lZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVs
QXNwZWN0UmF0aW9EZW5vbWluYXRvcik7CiAKICAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9u
IFBBUiBhbmQgdmlkZW8gc2l6ZS4KLSAgICBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFdpZHRoICog
cGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKLSAgICBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxI
ZWlnaHQgKiBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3I7CisgICAgZGlzcGxheVdpZHRoID0g
b3JpZ2luYWxTaXplLndpZHRoKCkgKiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOworICAgIGRp
c3BsYXlIZWlnaHQgPSBvcmlnaW5hbFNpemUuaGVpZ2h0KCkgKiBwaXhlbEFzcGVjdFJhdGlvRGVu
b21pbmF0b3I7CiAKICAgICAvLyBEaXZpZGUgZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHRo
ZWlyIEdDRCB0byBhdm9pZCBwb3NzaWJsZSBvdmVyZmxvd3MuCiAgICAgZGlzcGxheUFzcGVjdFJh
dGlvR0NEID0gZ3JlYXRlc3RDb21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdo
dCk7CkBAIC01MzksMTggKzUyNywxOCBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJl
YW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogCiAgICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFs
IHZpZGVvIHNpemUuIFRoaXMgaXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsn
cyBzZXRjYXBzIGZ1bmN0aW9uLgogICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwot
ICAgIGlmICghKG9yaWdpbmFsSGVpZ2h0ICUgZGlzcGxheUhlaWdodCkpIHsKKyAgICBpZiAoIShv
cmlnaW5hbFNpemUuaGVpZ2h0KCkgJSBkaXNwbGF5SGVpZ2h0KSkgewogICAgICAgICBMT0dfVkVS
Qk9TRShNZWRpYSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7Ci0gICAgICAgIHdp
ZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbEhlaWdodCwgZGlzcGxheVdp
ZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2
ND4ob3JpZ2luYWxIZWlnaHQpOwotICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFdpZHRoICUgZGlz
cGxheVdpZHRoKSkgeworICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQo
b3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOworICAg
ICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkp
OworICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFNpemUud2lkdGgoKSAlIGRpc3BsYXlXaWR0aCkp
IHsKICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdp
ZHRoIik7Ci0gICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2lu
YWxXaWR0aCwgZGlzcGxheUhlaWdodCwgZGlzcGxheVdpZHRoKTsKLSAgICAgICAgd2lkdGggPSBz
dGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFdpZHRoKTsKKyAgICAgICAgaGVpZ2h0ID0gZ3N0
X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUud2lkdGgoKSwgZGlzcGxheUhlaWdo
dCwgZGlzcGxheVdpZHRoKTsKKyAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxndWludDY0Pihv
cmlnaW5hbFNpemUud2lkdGgoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9HX1ZFUkJPU0Uo
TWVkaWEsICJBcHByb3hpbWF0aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0
Iik7Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbEhl
aWdodCwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3Rh
dGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxIZWlnaHQpOworICAgICAgICB3aWR0aCA9IGdzdF91
dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgs
IGRpc3BsYXlIZWlnaHQpOworICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0Pihv
cmlnaW5hbFNpemUuaGVpZ2h0KCkpOwogICAgIH0KIAogICAgIExPR19WRVJCT1NFKE1lZGlhLCAi
TmF0dXJhbCBzaXplOiAlIiBHX0dVSU5UNjRfRk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1BVCwg
d2lkdGgsIGhlaWdodCk7CkBAIC05NTgsNyArOTQ2LDcgQEAgdW5zaWduZWQgTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyOjp0b3RhbEJ5dGVzKCkgY29uc3QKICAgICBib29sIGRvbmUgPSBmYWxz
ZTsKICAgICB3aGlsZSAoIWRvbmUpIHsKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAg
ICBHVmFsdWUgaXRlbSA9IHswLCB9OworICAgICAgICBHVmFsdWUgaXRlbSA9IEdfVkFMVUVfSU5J
VDsKICAgICAgICAgc3dpdGNoIChnc3RfaXRlcmF0b3JfbmV4dChpdGVyLCAmaXRlbSkpIHsKICAg
ICAgICAgY2FzZSBHU1RfSVRFUkFUT1JfT0s6IHsKICAgICAgICAgICAgIEdzdFBhZCogcGFkID0g
c3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ192YWx1ZV9nZXRfb2JqZWN0KCZpdGVtKSk7CkBAIC0xNDgy
LDE3ICsxNDcwLDIwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmCiAgICAgaWYgKCFtX2J1ZmZl
cikKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBnc3RJbWFn
ZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShtX2J1ZmZlcik7CisgICAgR3N0Q2Fwcyog
Y2FwcyA9IHdlYmtpdEdzdEVsZW1lbnRHZXRQYWRDYXBzKG1fd2Via2l0VmlkZW9TaW5rLCAic2lu
ayIpOworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltYWdl
R1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZShtX2J1ZmZl
ciwgY2Fwcyk7CiAgICAgaWYgKCFnc3RJbWFnZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29u
dGV4dC0+ZHJhd0ltYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8SW1hZ2UqPihnc3RJbWFnZS0+aW1hZ2Uo
KS5nZXQoKSksIENvbG9yU3BhY2VTUkdCLAotICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBD
b21wb3NpdGVDb3B5LCBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QsIGdzdEltYWdlLT5yZWN0KCksIENvbXBvc2l0ZUNvcHks
IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24sIGZhbHNlKTsKIH0KIAogc3RhdGljIEhhc2hT
ZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKIHsKLQogICAgIGluaXRpYWxpemVHU3RyZWFtZXJB
bmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiAKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhh
c2hTZXQ8U3RyaW5nPiwgY2FjaGUsICgpKTsKQEAgLTE1MTAsNyArMTUwMSwxMSBAQCBzdGF0aWMg
SGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2FjaGUoKQogICAgICAgICBmb3IgKEdMaXN0KiBpdGVy
YXRvciA9IGZhY3RvcmllczsgaXRlcmF0b3I7IGl0ZXJhdG9yID0gaXRlcmF0b3ItPm5leHQpIHsK
ICAgICAgICAgICAgIEdzdFR5cGVGaW5kRmFjdG9yeSogZmFjdG9yeSA9IEdTVF9UWVBFX0ZJTkRf
RkFDVE9SWShpdGVyYXRvci0+ZGF0YSk7CiAgICAgICAgICAgICBHc3RDYXBzKiBjYXBzID0gZ3N0
X3R5cGVfZmluZF9mYWN0b3J5X2dldF9jYXBzKGZhY3RvcnkpOworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgICAgICAgICBjb25zdCBnY2hhciAqIGNvbnN0ICogZXh0ZW5zaW9uczsKKyNl
bHNlCiAgICAgICAgICAgICBnY2hhcioqIGV4dGVuc2lvbnM7CisjZW5kaWYKIAogICAgICAgICAg
ICAgaWYgKCFjYXBzKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTcyMyw3ICsxNzE4
LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpjcmVhdGVHU1RQbGF5Qmlu
KCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgInZpZGVvLWNoYW5nZWQiLCBHX0NB
TExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdlZENhbGxiYWNrKSwgdGhpcyk7CiAg
ICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJhdWRpby1jaGFuZ2VkIiwgR19DQUxMQkFD
SyhtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxsYmFjayksIHRoaXMpOwogCisjaWZu
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgbV93ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRfdmlk
ZW9fc2lua19uZXcobV9nc3RHV29ybGQuZ2V0KCkpOworI2Vsc2UKKyAgICBtX3dlYmtpdFZpZGVv
U2luayA9IHdlYmtpdF92aWRlb19zaW5rX25ldygpOworI2VuZGlmCiAKICAgICBnX3NpZ25hbF9j
b25uZWN0KG1fd2Via2l0VmlkZW9TaW5rLCAicmVwYWludC1yZXF1ZXN0ZWQiLCBHX0NBTExCQUNL
KG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayksIHRoaXMpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9W
aWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDQzNjMwMzYuLmRmNTc2ZjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMDcgT3BlbmVkSGFuZAogICogIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIg
PGFscEBhdG9rZXIuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAx
MiBJZ2FsaWEgUy5MCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNywzMyArMTgsNDIgQEAKICAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKICAqLwogCi0vKioKLSAqIFNFQ1RJT046d2Via2l0LXZp
ZGVvLXNpbmsKLSAqIEBzaG9ydF9kZXNjcmlwdGlvbjogR1N0cmVhbWVyIHZpZGVvIHNpbmsKKy8q
CiAgKgotICogI1dlYktpdFZpZGVvU2luayBpcyBhIEdTdHJlYW1lciBzaW5rIGVsZW1lbnQgdGhh
dCB0cmlnZ2VycworICogV2ViS2l0VmlkZW9TaW5rIGlzIGEgR1N0cmVhbWVyIHNpbmsgZWxlbWVu
dCB0aGF0IHRyaWdnZXJzCiAgKiByZXBhaW50cyBpbiB0aGUgV2ViS2l0IEdTdHJlYW1lciBtZWRp
YSBwbGF5ZXIgZm9yIHRoZQogICogY3VycmVudCB2aWRlbyBidWZmZXIuCiAgKi8KIAogI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiVmlkZW9TaW5rR1N0
cmVhbWVyLmgiCi0jaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVk
ZSA8Z2xpYi5oPgogI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05f
MQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNpbmNsdWRlIDxnc3Qvdmlk
ZW8vZ3N0dmlkZW9wb29sLmg+CisjZW5kaWYKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4K
ICNpbmNsdWRlIDx3dGYvRmFzdEFsbG9jQmFzZS5oPgogCi1zdGF0aWMgR3N0U3RhdGljUGFkVGVt
cGxhdGUgc2lua3RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNpbmsiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsCiAvLyBDQUlST19GT1JNQVRfUkdC
MjQgdXNlZCB0byByZW5kZXIgdGhlIHZpZGVvIGJ1ZmZlcnMgaXMgbGl0dGxlL2JpZyBlbmRpYW4g
ZGVwZW5kYW50LgogI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHU1RfU1RBVElDX0NBUFMoR1NUX1ZJREVPX0NBUFNfQkdSeCAiOyIgR1NUX1ZJREVPX0NBUFNf
QkdSQSkKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJ
TktfUEFEX0NBUFMgR1NUX1ZJREVPX0NBUFNfQkdSeCAiOyIgR1NUX1ZJREVPX0NBUFNfQkdSQQor
I2Vsc2UKKyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJTktfUEFEX0NBUFMgR1NUX1ZJREVPX0NBUFNf
TUFLRSgieyBCR1J4LCBCR1JBIH0iKQorI2VuZGlmCisjZWxzZQorI2lmbmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQorI2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUyBHU1RfVklERU9fQ0FQ
U194UkdCICI7IiBHU1RfVklERU9fQ0FQU19BUkdCCiAjZWxzZQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9TVEFU
SUNfQ0FQUyhHU1RfVklERU9fQ0FQU194UkdCICI7IiBHU1RfVklERU9fQ0FQU19BUkdCKQorI2Rl
ZmluZSBXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUyBHU1RfVklERU9fQ0FQU19NQUtFKCJ7IHhS
R0IsIEFSR0IgfSIpCiAjZW5kaWYKLSk7CisjZW5kaWYKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1w
bGF0ZSBzaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsIEdTVF9Q
QURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhXRUJLSVRfVklERU9fU0lO
S19QQURfQ0FQUykpOworCiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3ZpZGVv
X3NpbmtfZGVidWcpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3ZpZGVvX3Npbmtf
ZGVidWcKQEAgLTYxLDEwICs3MSwxNyBAQCBzdGF0aWMgZ3VpbnQgd2Via2l0X3ZpZGVvX3Npbmtf
c2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CiAKIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5r
UHJpdmF0ZSB7CiAgICAgR3N0QnVmZmVyKiBidWZmZXI7Ci0gICAgZ3VpbnQgdGltZW91dF9pZDsK
LSAgICBHTXV0ZXgqIGJ1ZmZlcl9tdXRleDsKLSAgICBHQ29uZCogZGF0YV9jb25kOworICAgIGd1
aW50IHRpbWVvdXRJZDsKKyAgICBHTXV0ZXgqIGJ1ZmZlck11dGV4OworICAgIEdDb25kKiBkYXRh
Q29uZGl0aW9uOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0luZm8g
aW5mbzsKKyNlbmRpZgorCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgV2ViQ29yZTo6
R1N0cmVhbWVyR1dvcmxkKiBnc3RHV29ybGQ7CisjZW5kaWYKIAogICAgIC8vIElmIHRoaXMgaXMg
VFJVRSBhbGwgcHJvY2Vzc2luZyBzaG91bGQgZmluaXNoIEFTQVAKICAgICAvLyBUaGlzIGlzIG5l
Y2Vzc2FyeSBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIGEgcmFjZSBiZXR3ZWVuCkBAIC03NCwxNDkg
KzkxLDE2NSBAQCBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZhdGUgewogICAgIC8vIHRvIGRl
YWRsb2NrcyBiZWNhdXNlIHJlbmRlcigpIGhvbGRzIHRoZSBzdHJlYW0gbG9jay4KICAgICAvLwog
ICAgIC8vIFByb3RlY3RlZCBieSB0aGUgYnVmZmVyIG11dGV4Ci0gICAgZ2Jvb2xlYW4gdW5sb2Nr
ZWQ7CisgICAgYm9vbCB1bmxvY2tlZDsKIH07CiAKLSNkZWZpbmUgX2RvX2luaXQoYmxhKSBcCi0g
ICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3ZpZGVvX3NpbmtfZGVidWcsIFwKKyNk
ZWZpbmUgd2Via2l0X3ZpZGVvX3NpbmtfcGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJ
TkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0VmlkZW9TaW5rLCB3ZWJraXRfdmlkZW9fc2luaywgR1NU
X1RZUEVfVklERU9fU0lOSywgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3ZpZGVvX3Np
bmtfZGVidWcsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0c2luayIsIFwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIndlYmtpdCB2aWRlbyBzaW5rIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
d2Via2l0IHZpZGVvIHNpbmsiKSk7CiAKLUdTVF9CT0lMRVJQTEFURV9GVUxMKFdlYktpdFZpZGVv
U2luaywKLSAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF92aWRlb19zaW5rLAotICAgICAgICAg
ICAgICAgICAgICAgR3N0VmlkZW9TaW5rLAotICAgICAgICAgICAgICAgICAgICAgR1NUX1RZUEVf
VklERU9fU0lOSywKLSAgICAgICAgICAgICAgICAgICAgIF9kb19pbml0KTsKIAotc3RhdGljIHZv
aWQKLXdlYmtpdF92aWRlb19zaW5rX2Jhc2VfaW5pdChncG9pbnRlciBnX2NsYXNzKQotewotICAg
IEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudF9jbGFzcyA9IEdTVF9FTEVNRU5UX0NMQVNTKGdfY2xh
c3MpOwotCi0gICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50X2Ns
YXNzLCBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNpbmt0ZW1wbGF0ZSkpOwotICAgIGdz
dF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZShlbGVtZW50X2NsYXNzLCAiV2ViS2l0
IHZpZGVvIHNpbmsiLAotICAgICAgICAgICAgIlNpbmsvVmlkZW8iLCAiU2VuZHMgdmlkZW8gZGF0
YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIsCi0gICAgICAg
ICAgICAiQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKLX0KLQotc3RhdGljIHZvaWQKLXdl
YmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9TaW5rKiBzaW5rLCBXZWJLaXRWaWRlb1Np
bmtDbGFzcyoga2xhc3MpCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19pbml0KFdlYktp
dFZpZGVvU2luayogc2luaykKIHsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2Owot
Ci0gICAgc2luay0+cHJpdiA9IHByaXYgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoc2lu
aywgV0VCS0lUX1RZUEVfVklERU9fU0lOSywgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSk7CisgICAg
c2luay0+cHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzaW5rLCBXRUJLSVRfVFlQ
RV9WSURFT19TSU5LLCBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKTsKICNpZiBHTElCX0NIRUNLX1ZF
UlNJT04oMiwgMzEsIDApCi0gICAgcHJpdi0+ZGF0YV9jb25kID0gV1RGOjpmYXN0TmV3PEdDb25k
PigpOwotICAgIGdfY29uZF9pbml0KHByaXYtPmRhdGFfY29uZCk7Ci0gICAgcHJpdi0+YnVmZmVy
X211dGV4ID0gV1RGOjpmYXN0TmV3PEdNdXRleD4oKTsKLSAgICBnX211dGV4X2luaXQocHJpdi0+
YnVmZmVyX211dGV4KTsKKyAgICBzaW5rLT5wcml2LT5kYXRhQ29uZGl0aW9uID0gV1RGOjpmYXN0
TmV3PEdDb25kPigpOworICAgIGdfY29uZF9pbml0KHNpbmstPnByaXYtPmRhdGFDb25kaXRpb24p
OworICAgIHNpbmstPnByaXYtPmJ1ZmZlck11dGV4ID0gV1RGOjpmYXN0TmV3PEdNdXRleD4oKTsK
KyAgICBnX211dGV4X2luaXQoc2luay0+cHJpdi0+YnVmZmVyTXV0ZXgpOwogI2Vsc2UKLSAgICBw
cml2LT5kYXRhX2NvbmQgPSBnX2NvbmRfbmV3KCk7Ci0gICAgcHJpdi0+YnVmZmVyX211dGV4ID0g
Z19tdXRleF9uZXcoKTsKKyAgICBzaW5rLT5wcml2LT5kYXRhQ29uZGl0aW9uID0gZ19jb25kX25l
dygpOworICAgIHNpbmstPnByaXYtPmJ1ZmZlck11dGV4ID0gZ19tdXRleF9uZXcoKTsKKyNlbmRp
ZgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfdmlkZW9faW5mb19pbml0KCZz
aW5rLT5wcml2LT5pbmZvKTsKICNlbmRpZgogfQogCi1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF92
aWRlb19zaW5rX3RpbWVvdXRfZnVuYyhncG9pbnRlciBkYXRhKQorc3RhdGljIGdib29sZWFuIHdl
YmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVuYyhncG9pbnRlciBkYXRhKQogewogICAgIFdlYktp
dFZpZGVvU2luayogc2luayA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0VmlkZW9TaW5rKj4oZGF0
YSk7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnByaXY7Ci0gICAg
R3N0QnVmZmVyKiBidWZmZXI7CiAKLSAgICBnX211dGV4X2xvY2socHJpdi0+YnVmZmVyX211dGV4
KTsKLSAgICBidWZmZXIgPSBwcml2LT5idWZmZXI7CisgICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1
ZmZlck11dGV4KTsKKyAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlcjsKICAgICBw
cml2LT5idWZmZXIgPSAwOwotICAgIHByaXYtPnRpbWVvdXRfaWQgPSAwOworICAgIHByaXYtPnRp
bWVvdXRJZCA9IDA7CiAKLSAgICBpZiAoIWJ1ZmZlciB8fCBwcml2LT51bmxvY2tlZCB8fCBHX1VO
TElLRUxZKCFHU1RfSVNfQlVGRkVSKGJ1ZmZlcikpKSB7Ci0gICAgICAgIGdfY29uZF9zaWduYWwo
cHJpdi0+ZGF0YV9jb25kKTsKLSAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211
dGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBwcml2LT51bmxvY2tlZCB8fCBVTkxJS0VMWSghR1NU
X0lTX0JVRkZFUihidWZmZXIpKSkgeworICAgICAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRhdGFD
b25kaXRpb24pOworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAg
ICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKICAgICBnX3NpZ25hbF9lbWl0KHNpbmssIHdl
YmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQQUlOVF9SRVFVRVNURURdLCAwLCBidWZmZXIpOwog
ICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsKLSAgICBnX2NvbmRfc2lnbmFsKHByaXYtPmRh
dGFfY29uZCk7Ci0gICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICBn
X2NvbmRfc2lnbmFsKHByaXYtPmRhdGFDb25kaXRpb24pOworICAgIGdfbXV0ZXhfdW5sb2NrKHBy
aXYtPmJ1ZmZlck11dGV4KTsKIAogICAgIHJldHVybiBGQUxTRTsKIH0KIAotc3RhdGljIEdzdEZs
b3dSZXR1cm4KLXdlYmtpdF92aWRlb19zaW5rX3JlbmRlcihHc3RCYXNlU2luayogYnNpbmssIEdz
dEJ1ZmZlciogYnVmZmVyKQorc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0X3ZpZGVvX3Npbmtf
cmVuZGVyKEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0QnVmZmVyKiBidWZmZXIpCiB7Ci0gICAg
V2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYnNpbmspOworICAgIFdl
YktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJhc2VTaW5rKTsKICAgICBX
ZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKIAotICAgIGdfbXV0ZXhf
bG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJN
dXRleCk7CiAKICAgICBpZiAocHJpdi0+dW5sb2NrZWQpIHsKLSAgICAgICAgZ19tdXRleF91bmxv
Y2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVm
ZmVyTXV0ZXgpOwogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiAgICAgfQogCisjaWZuZGVm
IEdTVF9BUElfVkVSU0lPTl8xCiAgICAgLy8gSWdub3JlIGJ1ZmZlcnMgaWYgdGhlIHZpZGVvIGlz
IGFscmVhZHkgaW4gZnVsbHNjcmVlbiB1c2luZwogICAgIC8vIGFub3RoZXIgc2luay4KICAgICBp
ZiAocHJpdi0+Z3N0R1dvcmxkLT5pc0Z1bGxzY3JlZW4oKSkgewotICAgICAgICBnX211dGV4X3Vu
bG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5i
dWZmZXJNdXRleCk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKICAgICB9CisjZW5kaWYK
IAogICAgIHByaXYtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmKGJ1ZmZlcik7CiAKKyNpZm5kZWYg
R1NUX0FQSV9WRVJTSU9OXzEKICAgICAvLyBGb3IgdGhlIHVubGlrZWx5IGNhc2Ugd2hlcmUgdGhl
IGJ1ZmZlciBoYXMgbm8gY2FwcywgdGhlIGNhcHMKICAgICAvLyBhcmUgaW1wbGljaXRlbHkgdGhl
IGNhcHMgb2YgdGhlIHBhZC4gVGhpcyBzaG91bGRuJ3QgaGFwcGVuLgotICAgIGlmIChHX1VOTElL
RUxZKCFHU1RfQlVGRkVSX0NBUFMoYnVmZmVyKSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIUdTVF9C
VUZGRVJfQ0FQUyhidWZmZXIpKSkgewogICAgICAgICBidWZmZXIgPSBwcml2LT5idWZmZXIgPSBn
c3RfYnVmZmVyX21ha2VfbWV0YWRhdGFfd3JpdGFibGUocHJpdi0+YnVmZmVyKTsKLSAgICAgICAg
Z3N0X2J1ZmZlcl9zZXRfY2Fwcyhwcml2LT5idWZmZXIsIEdTVF9QQURfQ0FQUyhHU1RfQkFTRV9T
SU5LX1BBRChic2luaykpKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9zZXRfY2Fwcyhwcml2LT5idWZm
ZXIsIEdTVF9QQURfQ0FQUyhHU1RfQkFTRV9TSU5LX1BBRChiYXNlU2luaykpKTsKICAgICB9CiAK
ICAgICBHc3RDYXBzICpjYXBzID0gR1NUX0JVRkZFUl9DQVBTKGJ1ZmZlcik7CiAgICAgR3N0Vmlk
ZW9Gb3JtYXQgZm9ybWF0OwogICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgIGlmIChHX1VOTElL
RUxZKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAm
aGVpZ2h0KSkpIHsKKyAgICBpZiAoVU5MSUtFTFkoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2Fw
cyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSkgeworICAgICAgICBnc3RfYnVmZmVy
X3VucmVmKGJ1ZmZlcik7CisgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlck11dGV4
KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOworICAgIH0KKyNlbHNlCisgICAgR3N0
VmlkZW9GcmFtZSBmcmFtZTsKKyAgICBpZiAoIWdzdF92aWRlb19mcmFtZV9tYXAoJmZyYW1lLCAm
cHJpdi0+aW5mbywgYnVmZmVyLCBHU1RfTUFQX1JFQUQpKSB7CiAgICAgICAgIGdzdF9idWZmZXJf
dW5yZWYoYnVmZmVyKTsKLSAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4
KTsKKyAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwogICAgICAgICBy
ZXR1cm4gR1NUX0ZMT1dfRVJST1I7CiAgICAgfQogCisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0
ID0gR1NUX1ZJREVPX0ZSQU1FX0ZPUk1BVCgmZnJhbWUpOworICAgIGludCB3aWR0aCA9IEdTVF9W
SURFT19GUkFNRV9XSURUSCgmZnJhbWUpOworICAgIGludCBoZWlnaHQgPSBHU1RfVklERU9fRlJB
TUVfSEVJR0hUKCZmcmFtZSk7CisKKyAgICBnc3RfdmlkZW9fZnJhbWVfdW5tYXAoJmZyYW1lKTsK
KyNlbmRpZgorCiAgICAgLy8gQ2Fpcm8ncyBBUkdCIGhhcyBwcmUtbXVsdGlwbGllZCBhbHBoYSB3
aGlsZSBHU3RyZWFtZXIncyBkb2Vzbid0LgogICAgIC8vIEhlcmUgd2UgY29udmVydCB0byBDYWly
bydzIEFSR0IuCiAgICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9y
bWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkgewogICAgICAgICAvLyBCZWNhdXNlIEdzdEJh
c2VTaW5rOjpyZW5kZXIoKSBvbmx5IG93bnMgdGhlIGJ1ZmZlciByZWZlcmVuY2UgaW4gdGhlCiAg
ICAgICAgIC8vIG1ldGhvZCBzY29wZSB3ZSBjYW4ndCB1c2UgZ3N0X2J1ZmZlcl9tYWtlX3dyaXRh
YmxlKCkgaGVyZS4gQWxzbwogICAgICAgICAvLyBUaGUgYnVmZmVyIGNvbnRlbnQgc2hvdWxkIG5v
dCBiZSBjaGFuZ2VkIGhlcmUgYmVjYXVzZSB0aGUgc2FtZSBidWZmZXIKLSAgICAgICAgLy8gY291
bGQgYmUgcGFzc2VkIG11bHRpcGxlIHRpbWVzIHRvIHRoaXMgbWV0aG9kIChpbiB0aGVvcnkpCisg
ICAgICAgIC8vIGNvdWxkIGJlIHBhc3NlZCBtdWx0aXBsZSB0aW1lcyB0byB0aGlzIG1ldGhvZCAo
aW4gdGhlb3J5KS4KKworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBHc3RCdWZm
ZXIgKm5ld0J1ZmZlciA9IGdzdF9idWZmZXJfdHJ5X25ld19hbmRfYWxsb2MoR1NUX0JVRkZFUl9T
SVpFKGJ1ZmZlcikpOworI2Vsc2UKKyAgICAgICAgZ3NpemUgYnVmZmVyU2l6ZSA9IGdzdF9idWZm
ZXJfZ2V0X3NpemUoYnVmZmVyKTsKKyAgICAgICAgR3N0QnVmZmVyKiBuZXdCdWZmZXIgPSBnc3Rf
YnVmZmVyX25ld19hbmRfYWxsb2MoYnVmZmVyU2l6ZSk7CisjZW5kaWYKIAotICAgICAgICAvLyBD
aGVjayBpZiBhbGxvY2F0aW9uIGZhaWxlZAotICAgICAgICBpZiAoR19VTkxJS0VMWSghbmV3QnVm
ZmVyKSkgewotICAgICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwotICAgICAgICAg
ICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyX211dGV4KTsKKyAgICAgICAgLy8gQ2hlY2sg
aWYgYWxsb2NhdGlvbiBmYWlsZWQuCisgICAgICAgIGlmIChVTkxJS0VMWSghbmV3QnVmZmVyKSkg
eworICAgICAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwogICAgICAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgZ3N0X2J1
ZmZlcl9jb3B5X21ldGFkYXRhKG5ld0J1ZmZlciwgYnVmZmVyLCAoR3N0QnVmZmVyQ29weUZsYWdz
KSBHU1RfQlVGRkVSX0NPUFlfQUxMKTsKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICAg
ICAgZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhKG5ld0J1ZmZlciwgYnVmZmVyLCBzdGF0aWNfY2Fz
dDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9BTEwpKTsKKyNlbHNlCisgICAg
ICAgIGdzdF9idWZmZXJfY29weV9pbnRvKG5ld0J1ZmZlciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxH
c3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9NRVRBREFUQSksIDAsIGJ1ZmZlclNp
emUpOworI2VuZGlmCiAKICAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIENvbG9yOjpwcmVtdWx0aXBs
aWVkQVJHQkZyb21Db2xvcigpIGhlcmUgYmVjYXVzZQogICAgICAgICAvLyBvbmUgZnVuY3Rpb24g
Y2FsbCBwZXIgdmlkZW8gcGl4ZWwgaXMganVzdCB0b28gZXhwZW5zaXZlOgogICAgICAgICAvLyBG
b3IgNzIwcC9QQUwgZm9yIGV4YW1wbGUgdGhpcyBtZWFucyAxMjgwKjcyMCoyNT0yMzA0MDAwMAog
ICAgICAgICAvLyBmdW5jdGlvbiBjYWxscyBwZXIgc2Vjb25kIQotICAgICAgICB1bnNpZ25lZCBz
aG9ydCBhbHBoYTsKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAgICAgY29uc3QgZ3Vp
bnQ4ICpzb3VyY2UgPSBHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKTsKICAgICAgICAgZ3VpbnQ4ICpk
ZXN0aW5hdGlvbiA9IEdTVF9CVUZGRVJfREFUQShuZXdCdWZmZXIpOworI2Vsc2UKKyAgICAgICAg
R3N0TWFwSW5mbyBzb3VyY2VJbmZvOworICAgICAgICBHc3RNYXBJbmZvIGRlc3RpbmF0aW9uSW5m
bzsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmc291cmNlSW5mbywgR1NUX01BUF9S
RUFEKTsKKyAgICAgICAgY29uc3QgZ3VpbnQ4KiBzb3VyY2UgPSBjb25zdF9jYXN0PGd1aW50OCo+
KHNvdXJjZUluZm8uZGF0YSk7CisgICAgICAgIGdzdF9idWZmZXJfbWFwKG5ld0J1ZmZlciwgJmRl
c3RpbmF0aW9uSW5mbywgR1NUX01BUF9XUklURSk7CisgICAgICAgIGd1aW50OCogZGVzdGluYXRp
b24gPSBzdGF0aWNfY2FzdDxndWludDgqPihkZXN0aW5hdGlvbkluZm8uZGF0YSk7CisjZW5kaWYK
IAogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGhlaWdodDsgeCsrKSB7CiAgICAgICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHdpZHRoOyB5KyspIHsKICNpZiBHX0JZVEVfT1JERVIgPT0g
R19MSVRUTEVfRU5ESUFOCi0gICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2VbM107CisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYWxwaGEgPSBzb3VyY2VbM107CiAgICAgICAgICAg
ICAgICAgZGVzdGluYXRpb25bMF0gPSAoc291cmNlWzBdICogYWxwaGEgKyAxMjgpIC8gMjU1Owog
ICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uWzFdID0gKHNvdXJjZVsxXSAqIGFscGhhICsgMTI4
KSAvIDI1NTsKICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsyXSA9IChzb3VyY2VbMl0gKiBh
bHBoYSArIDEyOCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25bM10gPSBhbHBo
YTsKICNlbHNlCi0gICAgICAgICAgICAgICAgYWxwaGEgPSBzb3VyY2VbMF07CisgICAgICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgYWxwaGEgPSBzb3VyY2VbMF07CiAgICAgICAgICAgICAgICAg
ZGVzdGluYXRpb25bMF0gPSBhbHBoYTsKICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsxXSA9
IChzb3VyY2VbMV0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CiAgICAgICAgICAgICAgICAgZGVzdGlu
YXRpb25bMl0gPSAoc291cmNlWzJdICogYWxwaGEgKyAxMjgpIC8gMjU1OwpAQCAtMjI2LDExMyAr
MjU5LDEzMCBAQCB3ZWJraXRfdmlkZW9fc2lua19yZW5kZXIoR3N0QmFzZVNpbmsqIGJzaW5rLCBH
c3RCdWZmZXIqIGJ1ZmZlcikKICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbiArPSA0OwogICAg
ICAgICAgICAgfQogICAgICAgICB9CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgICAg
ICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJnNvdXJjZUluZm8pOworICAgICAgICBnc3RfYnVm
ZmVyX3VubWFwKG5ld0J1ZmZlciwgJmRlc3RpbmF0aW9uSW5mbyk7CisjZW5kaWYKICAgICAgICAg
Z3N0X2J1ZmZlcl91bnJlZihidWZmZXIpOwogICAgICAgICBidWZmZXIgPSBwcml2LT5idWZmZXIg
PSBuZXdCdWZmZXI7CiAgICAgfQogCisKICAgICAvLyBUaGlzIHNob3VsZCBsaWtlbHkgdXNlIGEg
bG93ZXIgcHJpb3JpdHksIGJ1dCBnbGliIGN1cnJlbnRseSBzdGFydmVzCiAgICAgLy8gbG93ZXIg
cHJpb3JpdHkgc291cmNlcy4KICAgICAvLyBTZWU6IGh0dHBzOi8vYnVnemlsbGEuZ25vbWUub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MTA4MzAuCi0gICAgcHJpdi0+dGltZW91dF9pZCA9IGdfdGltZW91
dF9hZGRfZnVsbChHX1BSSU9SSVRZX0RFRkFVTFQsIDAsCisgICAgcHJpdi0+dGltZW91dElkID0g
Z190aW1lb3V0X2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVMVCwgMCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF92aWRlb19zaW5rX3RpbWVvdXRfZnVu
YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9vYmplY3Rf
cmVmKHNpbmspLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdE
ZXN0cm95Tm90aWZ5KWdzdF9vYmplY3RfdW5yZWYpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ3N0X29i
amVjdF91bnJlZikpOwogCi0gICAgZ19jb25kX3dhaXQocHJpdi0+ZGF0YV9jb25kLCBwcml2LT5i
dWZmZXJfbXV0ZXgpOwotICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Cisg
ICAgZ19jb25kX3dhaXQocHJpdi0+ZGF0YUNvbmRpdGlvbiwgcHJpdi0+YnVmZmVyTXV0ZXgpOwor
ICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKICAgICByZXR1cm4gR1NUX0ZM
T1dfT0s7CiB9CiAKLXN0YXRpYyB2b2lkCi13ZWJraXRfdmlkZW9fc2lua19kaXNwb3NlKEdPYmpl
Y3QqIG9iamVjdCkKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bvc2UoR09iamVj
dCogb2JqZWN0KQogewogICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19T
SU5LKG9iamVjdCk7CiAgICAgV2ViS2l0VmlkZW9TaW5rUHJpdmF0ZSogcHJpdiA9IHNpbmstPnBy
aXY7CiAKLSAgICBpZiAocHJpdi0+ZGF0YV9jb25kKSB7CisgICAgaWYgKHByaXYtPmRhdGFDb25k
aXRpb24pIHsKICNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwgMzEsIDApCi0gICAgICAgIGdfY29u
ZF9jbGVhcihwcml2LT5kYXRhX2NvbmQpOwotICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+
ZGF0YV9jb25kKTsKKyAgICAgICAgZ19jb25kX2NsZWFyKHByaXYtPmRhdGFDb25kaXRpb24pOwor
ICAgICAgICBXVEY6OmZhc3REZWxldGUocHJpdi0+ZGF0YUNvbmRpdGlvbik7CiAjZWxzZQotICAg
ICAgICBnX2NvbmRfZnJlZShwcml2LT5kYXRhX2NvbmQpOworICAgICAgICBnX2NvbmRfZnJlZShw
cml2LT5kYXRhQ29uZGl0aW9uKTsKICNlbmRpZgotICAgICAgICBwcml2LT5kYXRhX2NvbmQgPSAw
OworICAgICAgICBwcml2LT5kYXRhQ29uZGl0aW9uID0gMDsKICAgICB9CiAKLSAgICBpZiAocHJp
di0+YnVmZmVyX211dGV4KSB7CisgICAgaWYgKHByaXYtPmJ1ZmZlck11dGV4KSB7CiAjaWYgR0xJ
Ql9DSEVDS19WRVJTSU9OKDIsIDMxLCAwKQotICAgICAgICBnX211dGV4X2NsZWFyKHByaXYtPmJ1
ZmZlcl9tdXRleCk7Ci0gICAgICAgIFdURjo6ZmFzdERlbGV0ZShwcml2LT5idWZmZXJfbXV0ZXgp
OworICAgICAgICBnX211dGV4X2NsZWFyKHByaXYtPmJ1ZmZlck11dGV4KTsKKyAgICAgICAgV1RG
OjpmYXN0RGVsZXRlKHByaXYtPmJ1ZmZlck11dGV4KTsKICNlbHNlCi0gICAgICAgIGdfbXV0ZXhf
ZnJlZShwcml2LT5idWZmZXJfbXV0ZXgpOworICAgICAgICBnX211dGV4X2ZyZWUocHJpdi0+YnVm
ZmVyTXV0ZXgpOwogI2VuZGlmCi0gICAgICAgIHByaXYtPmJ1ZmZlcl9tdXRleCA9IDA7CisgICAg
ICAgIHByaXYtPmJ1ZmZlck11dGV4ID0gMDsKICAgICB9CiAKICAgICBHX09CSkVDVF9DTEFTUyhw
YXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkCi11bmxvY2tf
YnVmZmVyX211dGV4KFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYpCitzdGF0aWMgdm9pZCB1
bmxvY2tCdWZmZXJNdXRleChXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2KQogewotICAgIGdf
bXV0ZXhfbG9jayhwcml2LT5idWZmZXJfbXV0ZXgpOworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5i
dWZmZXJNdXRleCk7CiAKICAgICBpZiAocHJpdi0+YnVmZmVyKSB7CiAgICAgICAgIGdzdF9idWZm
ZXJfdW5yZWYocHJpdi0+YnVmZmVyKTsKICAgICAgICAgcHJpdi0+YnVmZmVyID0gMDsKICAgICB9
CiAKLSAgICBwcml2LT51bmxvY2tlZCA9IFRSVUU7CisgICAgcHJpdi0+dW5sb2NrZWQgPSB0cnVl
OwogCi0gICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhX2NvbmQpOwotICAgIGdfbXV0ZXhfdW5s
b2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ19jb25kX3NpZ25hbChwcml2LT5kYXRhQ29u
ZGl0aW9uKTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRleCk7CiB9CiAKLXN0
YXRpYyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKEdzdEJhc2VTaW5rKiBvYmpl
Y3QpCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3NpbmtfdW5sb2NrKEdzdEJhc2VTaW5r
KiBiYXNlU2luaykKIHsKLSAgICBXZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9f
U0lOSyhvYmplY3QpOworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19T
SU5LKGJhc2VTaW5rKTsKIAotICAgIHVubG9ja19idWZmZXJfbXV0ZXgoc2luay0+cHJpdik7Cisg
ICAgdW5sb2NrQnVmZmVyTXV0ZXgoc2luay0+cHJpdik7CiAKLSAgICByZXR1cm4gR1NUX0NBTExf
UEFSRU5UX1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNTLCB1bmxvY2ssCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9iamVjdCksIFRSVUUpOworICAgIHJl
dHVybiBHU1RfQ0FMTF9QQVJFTlRfV0lUSF9ERUZBVUxUKEdTVF9CQVNFX1NJTktfQ0xBU1MsIHVu
bG9jaywgKGJhc2VTaW5rKSwgVFJVRSk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3Zp
ZGVvX3NpbmtfdW5sb2NrX3N0b3AoR3N0QmFzZVNpbmsqIG9iamVjdCkKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfdmlkZW9fc2lua191bmxvY2tfc3RvcChHc3RCYXNlU2luayogYmFzZVNpbmspCiB7
Ci0gICAgV2ViS2l0VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksob2JqZWN0KTsK
LSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gc2luay0+cHJpdjsKKyAgICBXZWJL
aXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZVNpbmspLT5w
cml2OwogCi0gICAgZ19tdXRleF9sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7Ci0gICAgcHJpdi0+
dW5sb2NrZWQgPSBGQUxTRTsKLSAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJfbXV0ZXgp
OworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJNdXRleCk7CisgICAgcHJpdi0+dW5sb2Nr
ZWQgPSBmYWxzZTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAKLSAg
ICByZXR1cm4gR1NUX0NBTExfUEFSRU5UX1dJVEhfREVGQVVMVChHU1RfQkFTRV9TSU5LX0NMQVNT
LCB1bmxvY2tfc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
b2JqZWN0KSwgVFJVRSk7CisgICAgcmV0dXJuIEdTVF9DQUxMX1BBUkVOVF9XSVRIX0RFRkFVTFQo
R1NUX0JBU0VfU0lOS19DTEFTUywgdW5sb2NrX3N0b3AsIChiYXNlU2luayksIFRSVUUpOwogfQog
Ci1zdGF0aWMgZ2Jvb2xlYW4KLXdlYmtpdF92aWRlb19zaW5rX3N0b3AoR3N0QmFzZVNpbmsqIGJh
c2Vfc2luaykKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfdmlkZW9fc2lua19zdG9wKEdzdEJhc2VT
aW5rKiBiYXNlU2luaykKIHsKLSAgICBXZWJLaXRWaWRlb1NpbmtQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdjsKKyAgICB1bmxvY2tCdWZmZXJNdXRleChX
RUJLSVRfVklERU9fU0lOSyhiYXNlU2luayktPnByaXYpOworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X3ZpZGVvX3Npbmtfc3RhcnQoR3N0QmFzZVNpbmsqIGJh
c2VTaW5rKQoreworICAgIFdlYktpdFZpZGVvU2lua1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklE
RU9fU0lOSyhiYXNlU2luayktPnByaXY7CiAKLSAgICB1bmxvY2tfYnVmZmVyX211dGV4KHByaXYp
OworICAgIGdfbXV0ZXhfbG9jayhwcml2LT5idWZmZXJNdXRleCk7CisgICAgcHJpdi0+dW5sb2Nr
ZWQgPSBmYWxzZTsKKyAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAgICAg
cmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbgotd2Via2l0X3ZpZGVvX3Npbmtfc3Rh
cnQoR3N0QmFzZVNpbmsqIGJhc2Vfc2luaykKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorc3Rh
dGljIGdib29sZWFuIHdlYmtpdF92aWRlb19zaW5rX3Byb3Bvc2VfYWxsb2NhdGlvbihHc3RCYXNl
U2luayogYmFzZVNpbmssIEdzdFF1ZXJ5KiBxdWVyeSkKIHsKLSAgICBXZWJLaXRWaWRlb1NpbmtQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZV9zaW5rKS0+cHJpdjsKKyAgICBX
ZWJLaXRWaWRlb1NpbmsqIHNpbmsgPSBXRUJLSVRfVklERU9fU0lOSyhiYXNlU2luayk7CisgICAg
R3N0Q2FwcyogY2FwczsKKyAgICBnYm9vbGVhbiBuZWVkX3Bvb2w7CiAKLSAgICBnX211dGV4X2xv
Y2socHJpdi0+YnVmZmVyX211dGV4KTsKLSAgICBwcml2LT51bmxvY2tlZCA9IEZBTFNFOwotICAg
IGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlcl9tdXRleCk7CisgICAgZ3N0X3F1ZXJ5X3BhcnNl
X2FsbG9jYXRpb24ocXVlcnksICZjYXBzLCAmbmVlZF9wb29sKTsKKworICAgIGlmICghY2FwcykK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJnNpbmstPnByaXYtPmluZm8sIGNhcHMpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJ
X1RZUEUpOworICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklE
RU9fQ1JPUF9NRVRBX0FQSV9UWVBFKTsKICAgICByZXR1cm4gVFJVRTsKIH0KKyNlbmRpZgogCisj
aWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiBzdGF0aWMgdm9pZAogbWFyc2hhbF9WT0lEX19NSU5J
T0JKRUNUKEdDbG9zdXJlICogY2xvc3VyZSwgR1ZhbHVlICogcmV0dXJuX3ZhbHVlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIGd1aW50IG5fcGFyYW1fdmFsdWVzLCBjb25zdCBHVmFsdWUgKiBw
YXJhbV92YWx1ZXMsCkBAIC0zNTYsNDYgKzQwNiw2NyBAQCBtYXJzaGFsX1ZPSURfX01JTklPQkpF
Q1QoR0Nsb3N1cmUgKiBjbG9zdXJlLCBHVmFsdWUgKiByZXR1cm5fdmFsdWUsCiAKICAgY2FsbGJh
Y2soZGF0YTEsIGdzdF92YWx1ZV9nZXRfbWluaV9vYmplY3QocGFyYW1fdmFsdWVzICsgMSksIGRh
dGEyKTsKIH0KKyNlbmRpZgogCi1zdGF0aWMgdm9pZAotd2Via2l0X3ZpZGVvX3NpbmtfY2xhc3Nf
aW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlk
ZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZpZGVvU2lua0NsYXNzKiBrbGFzcykKIHsKLSAgICBH
T2JqZWN0Q2xhc3MqIGdvYmplY3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7Ci0gICAg
R3N0QmFzZVNpbmtDbGFzcyogZ3N0YmFzZV9zaW5rX2NsYXNzID0gR1NUX0JBU0VfU0lOS19DTEFT
UyhrbGFzcyk7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFT
UyhrbGFzcyk7CisgICAgR3N0QmFzZVNpbmtDbGFzcyogYmFzZVNpbmtDbGFzcyA9IEdTVF9CQVNF
X1NJTktfQ0xBU1Moa2xhc3MpOworICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0g
R1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3MpOworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3Bh
ZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc2lu
a1RlbXBsYXRlKSk7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfZWxlbWVudF9j
bGFzc19zZXRfbWV0YWRhdGEoZWxlbWVudENsYXNzLAorI2Vsc2UKKyAgICBnc3RfZWxlbWVudF9j
bGFzc19zZXRfZGV0YWlsc19zaW1wbGUoZWxlbWVudENsYXNzLAorI2VuZGlmCisgICAgICAgICAg
ICAiV2ViS2l0IHZpZGVvIHNpbmsiLAorICAgICAgICAgICAgIlNpbmsvVmlkZW8iLCAiU2VuZHMg
dmlkZW8gZGF0YSBmcm9tIGEgR1N0cmVhbWVyIHBpcGVsaW5lIHRvIGEgQ2Fpcm8gc3VyZmFjZSIs
CisgICAgICAgICAgICAiQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4iKTsKIAogICAgIGdfdHlw
ZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKFdlYktpdFZpZGVvU2lua1ByaXZhdGUp
KTsKIAotICAgIGdvYmplY3RfY2xhc3MtPmRpc3Bvc2UgPSB3ZWJraXRfdmlkZW9fc2lua19kaXNw
b3NlOworICAgIGdvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IHdlYmtpdF92aWRlb19zaW5rX2Rpc3Bv
c2U7CiAKLSAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVubG9jayA9IHdlYmtpdF92aWRlb19zaW5r
X3VubG9jazsKLSAgICBnc3RiYXNlX3NpbmtfY2xhc3MtPnVubG9ja19zdG9wID0gd2Via2l0X3Zp
ZGVvX3NpbmtfdW5sb2NrX3N0b3A7Ci0gICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5yZW5kZXIgPSB3
ZWJraXRfdmlkZW9fc2lua19yZW5kZXI7Ci0gICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5wcmVyb2xs
ID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOwotICAgIGdzdGJhc2Vfc2lua19jbGFzcy0+c3Rv
cCA9IHdlYmtpdF92aWRlb19zaW5rX3N0b3A7Ci0gICAgZ3N0YmFzZV9zaW5rX2NsYXNzLT5zdGFy
dCA9IHdlYmtpdF92aWRlb19zaW5rX3N0YXJ0OworICAgIGJhc2VTaW5rQ2xhc3MtPnVubG9jayA9
IHdlYmtpdF92aWRlb19zaW5rX3VubG9jazsKKyAgICBiYXNlU2lua0NsYXNzLT51bmxvY2tfc3Rv
cCA9IHdlYmtpdF92aWRlb19zaW5rX3VubG9ja19zdG9wOworICAgIGJhc2VTaW5rQ2xhc3MtPnJl
bmRlciA9IHdlYmtpdF92aWRlb19zaW5rX3JlbmRlcjsKKyAgICBiYXNlU2lua0NsYXNzLT5wcmVy
b2xsID0gd2Via2l0X3ZpZGVvX3NpbmtfcmVuZGVyOworICAgIGJhc2VTaW5rQ2xhc3MtPnN0b3Ag
PSB3ZWJraXRfdmlkZW9fc2lua19zdG9wOworICAgIGJhc2VTaW5rQ2xhc3MtPnN0YXJ0ID0gd2Vi
a2l0X3ZpZGVvX3Npbmtfc3RhcnQ7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBiYXNl
U2lua0NsYXNzLT5wcm9wb3NlX2FsbG9jYXRpb24gPSB3ZWJraXRfdmlkZW9fc2lua19wcm9wb3Nl
X2FsbG9jYXRpb247CisjZW5kaWYKIAogICAgIHdlYmtpdF92aWRlb19zaW5rX3NpZ25hbHNbUkVQ
QUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJyZXBhaW50LXJlcXVlc3RlZCIsCiAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICAw
LAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIDAsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHU2lnbmFsRmxhZ3M+KEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAg
ICAgICAgICAgIDAsIC8vIENsYXNzIG9mZnNldC4KKyAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxh
dG9yLgorICAgICAgICAgICAgMCwgLy8gQWNjdW11bGF0b3IgZGF0YS4KKyNpZm5kZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKICAgICAgICAgICAgIG1hcnNoYWxfVk9JRF9fTUlOSU9CSkVDVCwKLSAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAxLCBHU1RfVFlQRV9CVUZGRVIpOworI2Vsc2UKKyAgICAgICAg
ICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9nZW5lcmljLCAvLyBDdXN0b20gbWFyc2hhbGxlci4KKyNl
bmRpZgorICAgICAgICAgICAgR19UWVBFX05PTkUsIC8vIFJldHVybiB0eXBlLgorICAgICAgICAg
ICAgMSwgLy8gT25seSBvbmUgcGFyYW1ldGVyLgorICAgICAgICAgICAgR1NUX1RZUEVfQlVGRkVS
KTsKIH0KIAotLyoqCi0gKiB3ZWJraXRfdmlkZW9fc2lua19uZXc6Ci0gKgotICogQ3JlYXRlcyBh
IG5ldyBHU3RyZWFtZXIgdmlkZW8gc2luay4KLSAqCi0gKiBSZXR1cm4gdmFsdWU6IGEgI0dzdEVs
ZW1lbnQgZm9yIHRoZSBuZXdseSBjcmVhdGVkIHZpZGVvIHNpbmsKLSAqLworCisjaWZuZGVmIEdT
VF9BUElfVkVSU0lPTl8xCiBHc3RFbGVtZW50KiB3ZWJraXRfdmlkZW9fc2lua19uZXcoV2ViQ29y
ZTo6R1N0cmVhbWVyR1dvcmxkKiBnc3RHV29ybGQpCiB7CiAgICAgR3N0RWxlbWVudCogZWxlbWVu
dCA9IEdTVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7
CiAgICAgV0VCS0lUX1ZJREVPX1NJTksoZWxlbWVudCktPnByaXYtPmdzdEdXb3JsZCA9IGdzdEdX
b3JsZDsKICAgICByZXR1cm4gZWxlbWVudDsKIH0KKyNlbHNlCitHc3RFbGVtZW50KiB3ZWJraXRf
dmlkZW9fc2lua19uZXcoKQoreworICAgIHJldHVybiBHU1RfRUxFTUVOVChnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfVklERU9fU0lOSywgMCkpOworfQorI2VuZGlmCiAKICNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCmluZGV4IDUwMTg1MGYuLmNh
NjFmYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKQEAgLTI1LDggKzI1LDcgQEAK
ICNpbmNsdWRlICJHU3RyZWFtZXJHV29ybGQuaCIKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgog
I2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3NpbmsuaD4KLQotR19CRUdJTl9ERUNMUworI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogCiAjZGVmaW5lIFdFQktJVF9UWVBFX1ZJREVPX1NJ
Tksgd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3R5cGUoKQogCkBAIC03MywxMSArNzIsMTMgQEAgc3Ry
dWN0IF9XZWJLaXRWaWRlb1NpbmtDbGFzcyB7CiAgICAgdm9pZCAoKiBfd2Via2l0X3Jlc2VydmVk
Nikodm9pZCk7CiB9OwogCitHVHlwZSB3ZWJraXRfdmlkZW9fc2lua19nZXRfdHlwZSgpIEdfR05V
Q19DT05TVDsKIAotR1R5cGUgICAgICAgd2Via2l0X3ZpZGVvX3NpbmtfZ2V0X3R5cGUodm9pZCkg
R19HTlVDX0NPTlNUOwotR3N0RWxlbWVudCAqd2Via2l0X3ZpZGVvX3NpbmtfbmV3KFdlYkNvcmU6
OkdTdHJlYW1lckdXb3JsZCopOwotCi1HX0VORF9ERUNMUworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQorR3N0RWxlbWVudCogd2Via2l0X3ZpZGVvX3NpbmtfbmV3KFdlYkNvcmU6OkdTdHJlYW1l
ckdXb3JsZCopOworI2Vsc2UKK0dzdEVsZW1lbnQqIHdlYmtpdF92aWRlb19zaW5rX25ldygpOwor
I2VuZGlmCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQogI2VuZGlmCmRpZmYgLS1naXQgYS9j
b25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggMzIwMjRiZC4uYjJhOWVmMSAxMDA2NDQK
LS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMzQ0LDcgKzM0NCw3IEBA
IEFDX01TR19SRVNVTFQoWyR3aXRoX2dzdHJlYW1lcl0pCiAKIEdTVFJFQU1FUl8wXzEwX1JFUVVJ
UkVEX1ZFUlNJT049MC4xMAogR1NUUkVBTUVSXzBfMTBfUExVR0lOU19CQVNFX1JFUVVJUkVEX1ZF
UlNJT049MC4xMC4zMAotR1NUUkVBTUVSXzFfMF9SRVFVSVJFRF9WRVJTSU9OPTEuMAorR1NUUkVB
TUVSXzFfMF9SRVFVSVJFRF9WRVJTSU9OPTAuMTEuOTAKIEdTVFJFQU1FUl8xXzBfUExVR0lOU19C
QVNFX1JFUVVJUkVEX1ZFUlNJT049MC4xMS45MAogCiBjYXNlICIkd2l0aF9nc3RyZWFtZXIiIGlu
Ci0tIAoxLjcuMTA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146714</attachid>
            <date>2012-06-09 11:54:50 -0700</date>
            <delta_ts>2012-06-09 11:58:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>29816</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkYzYxNmQzYTY3MGM0YzY4MTg4ZWM5ZTc0NjYyYzE0YjVjN2M2YjVkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDkgSnVuIDIwMTIgMTE6NTQ6MzkgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQ
YXRjaAoKLS0tCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3Bw
ICAgICB8ICAgNDkgKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZl
cnNpb25pbmcuaCAgICAgICB8ICAgIDggKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXIuaCAgIHwgICAzOSArKysrKy0tLQogLi4uL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDU1ICsrKysrKystLS0tCiAuLi4v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwICAgICAgICB8ICAgNTAgKysr
KysrLS0tLQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAg
ICAgfCAgIDYxICsrKysrKy0tLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuY3BwICAgICAgfCAgMTA0ICsrKysrKysrKysrKysrKysrKy0tCiAuLi4vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oICAgICAgICB8ICAgIDcgKysKIC4uLi9n
c3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCAgICAgICAgIHwgICAgMiArLQog
Y29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAy
ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCAyNzcgaW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcAppbmRleCBkNDIzOGMxLi5lMjYy
MzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3BwCkBAIC0yMCw2ICsyMCw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJHU3RyZWFtZXJWZXJzaW9uaW5n
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiB2b2lkIHdlYmtpdEdzdE9iamVjdFJlZlNpbmso
R3N0T2JqZWN0KiBnc3RPYmplY3QpCiB7CkBAIC00OCwzICs0OSw1MSBAQCBHc3RDYXBzKiB3ZWJr
aXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhHc3RFbGVtZW50KiBlbGVtZW50LCBjb25zdCBjaGFyKiBk
aXJlY3Rpb24pCiAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHBhZCkpOwogICAgIHJl
dHVybiBjYXBzOwogfQorCitib29sIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZyb21DYXBz
KEdzdENhcHMqIGNhcHMsIFdlYkNvcmU6OkludFNpemUmIHNpemUsIEdzdFZpZGVvRm9ybWF0JiBm
b3JtYXQsIGludCYgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgaW50JiBwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IsIGludCYgc3RyaWRlKQoreworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJmluZm8sIGNhcHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3JtYXQgPSBH
U1RfVklERU9fSU5GT19GT1JNQVQoJmluZm8pOworICAgIHNpemUuc2V0V2lkdGgoR1NUX1ZJREVP
X0lORk9fV0lEVEgoJmluZm8pKTsKKyAgICBzaXplLnNldEhlaWdodChHU1RfVklERU9fSU5GT19I
RUlHSFQoJmluZm8pKTsKKyAgICBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yID0gR1NUX1ZJREVP
X0lORk9fUEFSX04oJmluZm8pOworICAgIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciA9IEdT
VF9WSURFT19JTkZPX1BBUl9EKCZpbmZvKTsKKyAgICBzdHJpZGUgPSBHU1RfVklERU9fSU5GT19Q
TEFORV9TVFJJREUoJmluZm8sIDApOworI2Vsc2UKKyAgICBnaW50IHdpZHRoLCBoZWlnaHQ7Cisg
ICAgaWYgKCFHU1RfSVNfQ0FQUyhjYXBzKSB8fCAhZ3N0X2NhcHNfaXNfZml4ZWQoY2FwcykKKyAg
ICAgICAgfHwgIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQpCisgICAgICAgIHx8ICFnc3RfdmlkZW9fcGFyc2VfY2Fwc19waXhlbF9hc3Bl
Y3RfcmF0aW8oY2FwcywgJnBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpeGVsQXNwZWN0UmF0aW9E
ZW5vbWluYXRvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzaXplLnNldFdpZHRoKHdp
ZHRoKTsKKyAgICBzaXplLnNldEhlaWdodChoZWlnaHQpOworICAgIHN0cmlkZSA9IHNpemUud2lk
dGgoKSAqIDQ7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQorCitHc3RCdWZmZXIqIHdl
YmtpdEdzdENyZWF0ZUJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyNpZm5kZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKyAgICBHc3RCdWZmZXIqIG5ld0J1ZmZlciBnc3RfYnVmZmVyX3RyeV9uZXdf
YW5kX2FsbG9jKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKKyNlbHNlCisgICAgZ3NpemUgYnVm
ZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKyAgICBHc3RCdWZmZXIqIG5l
d0J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyNlbmRpZgor
CisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiAwOworCisjaWZuZGVmIEdTVF9B
UElfVkVSU0lPTl8xCisgICAgZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhKG5ld0J1ZmZlciwgYnVm
ZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09QWV9BTEwp
KTsKKyNlbHNlCisgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZmZXIsIHN0
YXRpY19jYXN0PEdzdEJ1ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFEQVRBKSwg
MCwgYnVmZmVyU2l6ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbmV3QnVmZmVyOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
clZlcnNpb25pbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJWZXJzaW9uaW5nLmgKaW5kZXggZmFhZGMyNi4uNzIxM2UwOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZl
cnNpb25pbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oCkBAIC0yMSw4ICsyMSwxNCBAQAogI2RlZmluZSBHU3Ry
ZWFtZXJWZXJzaW9uaW5nX2gKIAogI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3Qv
dmlkZW8vdmlkZW8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgSW50U2l6ZTsKK307
CiAKIHZvaWQgd2Via2l0R3N0T2JqZWN0UmVmU2luayhHc3RPYmplY3QqKTsKIEdzdENhcHMqIHdl
YmtpdEdzdEVsZW1lbnRHZXRQYWRDYXBzKEdzdEVsZW1lbnQqLCBjb25zdCBjaGFyKik7Ci0KK2Jv
b2wgd2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoR3N0Q2FwcyosIFdlYkNvcmU6
OkludFNpemUmLCBHc3RWaWRlb0Zvcm1hdCYsIGludCYgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRv
ciwgaW50JiBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIGludCYgc3RyaWRlKTsKK0dzdEJ1
ZmZlciogd2Via2l0R3N0Q3JlYXRlQnVmZmVyKEdzdEJ1ZmZlciopOwogI2VuZGlmIC8vIEdTdHJl
YW1lclZlcnNpb25pbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaAppbmRleCAzOGUwODNmLi41MmM1
NGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTAorICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDExLCAy
MDEyIElnYWxpYSBTLkwKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMjAgKzIzLDI0IEBACiAj
aWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCiAjaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKLSNpbmNsdWRlIDxnc3QvZ3N0Lmg+Ci0jaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+
CisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLSNpZiBVU0UoQ0FJUk8pCi0jaW5jbHVkZSA8
Y2Fpcm8uaD4KLSNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgX0dzdEJ1ZmZlciBHc3RCdWZmZXI7Cit0
eXBlZGVmIHN0cnVjdCBfR3N0Q2FwcyBHc3RDYXBzOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBj
bGFzcyBJbnRTaXplOwogCiBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBSZWZDb3VudGVk
PEltYWdlR1N0cmVhbWVyPiB7CiAgICAgcHVibGljOgotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKik7CisgICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZl
ciwgR3N0Q2FwcyogY2FwcykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIGNhcHMpKTsKKyAgICAgICAgfQogICAgICAgICB+
SW1hZ2VHU3RyZWFtZXIoKTsKIAogICAgICAgICBQYXNzUmVmUHRyPEJpdG1hcEltYWdlPiBpbWFn
ZSgpCkBAIC00NSwxNyArNDksMjAgQEAgY2xhc3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxJbWFnZUdTdHJlYW1lcj4gewogICAgICAgICAgICAgcmV0dXJuIG1faW1hZ2UuZ2V0
KCk7CiAgICAgICAgIH0KIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxCaXRtYXBJbWFn
ZT4gbV9pbWFnZTsKLQotI2lmIFVTRShDQUlSTykKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0
QnVmZmVyKiYsIEludFNpemUsIGNhaXJvX2Zvcm1hdF90Jik7Ci0jZW5kaWYKKyAgICAgICAgdm9p
ZCBzZXRDcm9wUmVjdChGbG9hdFJlY3QgcmVjdCkgeyBtX2Nyb3BSZWN0ID0gcmVjdDsgfQorICAg
ICAgICBGbG9hdFJlY3QgcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghbV9jcm9w
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChtX2Nyb3BS
ZWN0KTsKIAotI2lmIFBMQVRGT1JNKFFUKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RCdWZm
ZXIqJiwgSW50U2l6ZSwgUUltYWdlOjpGb3JtYXQpOwotI2VuZGlmCisgICAgICAgICAgICAvLyBE
ZWZhdWx0IHJlY3RhbmdsZSB1c2VkIGJ5IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKCkuCisg
ICAgICAgICAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAsIC0xLCAtMSk7CisgICAgICAgIH0KIAor
ICAgIHByaXZhdGU6CisgICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciosIEdzdENhcHMq
KTsKKyAgICAgICAgUmVmUHRyPEJpdG1hcEltYWdlPiBtX2ltYWdlOworICAgICAgICBGbG9hdFJl
Y3QgbV9jcm9wUmVjdDsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWly
by5jcHAKaW5kZXggYTBiZjVmNC4uMDE4NjMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1l
ckNhaXJvLmNwcApAQCAtMjIsNDAgKzIyLDUzIEBACiAKICNpZiBFTkFCTEUoVklERU8pICYmIFVT
RShHU1RSRUFNRVIpCiAKKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGdzdC9nc3QuaD4K
KyNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCisKICNpbmNsdWRl
IDx3dGYvZ29iamVjdC9HT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3Ry
ZWFtZXI6OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6Oklt
YWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgIDogbV9p
bWFnZSgwKQogewotICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgR3N0Q2Fwcyog
Y2FwcyA9IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKICAgICBHc3RWaWRlb0Zvcm1hdCBm
b3JtYXQ7Ci0gICAgaWYgKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1h
dCwgJndpZHRoLCAmaGVpZ2h0KSkgewotICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEludFNpemUgc2l6ZTsKKyAgICBpbnQgcGl4ZWxB
c3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGU7
CisgICAgd2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcywgc2l6ZSwgZm9y
bWF0LCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0
b3IsIHN0cmlkZSk7CiAKLSAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKyNpZmRlZiBHU1RfQVBJ
X1ZFUlNJT05fMQorICAgIEdzdE1hcEluZm8gbWFwSW5mbzsKKyAgICBnc3RfYnVmZmVyX21hcChi
dWZmZXIsICZtYXBJbmZvLCBHU1RfTUFQX1JFQUQpOworICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZl
ckRhdGEgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihtYXBJbmZvLmRhdGEpOwor
I2Vsc2UKKyAgICB1bnNpZ25lZCBjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
bnNpZ25lZCBjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworI2VuZGlmCiAKICAgICBj
YWlyb19mb3JtYXRfdCBjYWlyb0Zvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19G
T1JNQVRfQVJHQiB8fCBmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKQotICAgICAgICBj
YWlyb0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0gICAgZWxzZQotICAgICAgICBjYWly
b0Zvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IyNDsKLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBjYWlyb0Zvcm1h
dCkpOwotfQorI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBjYWlyb0Zv
cm1hdCA9IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSA/IENBSVJPX0ZPUk1BVF9B
UkdCMzIgOiBDQUlST19GT1JNQVRfUkdCMjQ7CisjZWxzZQorICAgIGNhaXJvRm9ybWF0ID0gKGZv
cm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IpID8gQ0FJUk9fRk9STUFUX0FSR0IzMiA6IENB
SVJPX0ZPUk1BVF9SR0IyNDsKKyNlbmRpZgogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFt
ZXIoR3N0QnVmZmVyKiYgYnVmZmVyLCBJbnRTaXplIHNpemUsIGNhaXJvX2Zvcm1hdF90JiBjYWly
b0Zvcm1hdCkKLSAgICA6IG1faW1hZ2UoMCkKLXsKLSAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShHU1RfQlVGRkVSX0RBVEEo
YnVmZmVyKSwgY2Fpcm9Gb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2Zvcm1hdF9z
dHJpZGVfZm9yX3dpZHRoKGNhaXJvRm9ybWF0LCBzaXplLndpZHRoKCkpKTsKKyAgICBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShi
dWZmZXJEYXRhLCBjYWlyb0Zvcm1hdCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBzdHJp
ZGUpOwogICAgIEFTU0VSVChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSA9PSBDQUlST19T
VEFUVVNfU1VDQ0VTUyk7CiAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoc3VyZmFj
ZSk7CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvQ3JvcE1ldGEqIGNy
b3BNZXRhID0gZ3N0X2J1ZmZlcl9nZXRfdmlkZW9fY3JvcF9tZXRhKGJ1ZmZlcik7CisgICAgaWYg
KGNyb3BNZXRhKQorICAgICAgICBzZXRDcm9wUmVjdChGbG9hdFJlY3QoY3JvcE1ldGEtPngsIGNy
b3BNZXRhLT55LCBjcm9wTWV0YS0+d2lkdGgsIGNyb3BNZXRhLT5oZWlnaHQpKTsKKworICAgIGdz
dF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmbWFwSW5mbyk7CisjZW5kaWYKIH0KIAogSW1hZ2VHU3Ry
ZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKaW5k
ZXggMzZiMDgwNi4uYjM1NDkxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcApAQCAt
MjEsMzkgKzIxLDQ5IEBACiAjaW5jbHVkZSAiSW1hZ2VHU3RyZWFtZXIuaCIKIAogI2lmIEVOQUJM
RShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVk
ZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorI2luY2x1
ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8d3RmL2dv
YmplY3QvR093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdlR1N0cmVhbWVyOjpj
cmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJl
YW1lcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6IG1faW1hZ2UoMCkK
IHsKLSAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENhcHMqIGNhcHMgPSBn
c3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CisgICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBR
UGl4bWFwOwogICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19m
b3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAg
ICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKyAgICBJbnRTaXplIHNpemU7CisgICAgaW50IHBpeGVs
QXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRl
OworICAgIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZyb21DYXBzKGNhcHMsIHNpemUsIGZv
cm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5h
dG9yLCBzdHJpZGUpOwogCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RNYXBJbmZv
IGluZm87CisgICAgZ3N0X2J1ZmZlcl9tYXAoYnVmZmVyLCAmaW5mbywgR1NUX01BUF9SRUFEKTsK
KyAgICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWNoYXIqPihpbmZvLmRh
dGEpOworI2Vsc2UKKyAgICB1Y2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWNo
YXIqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7CisjZW5kaWYKICAgICBRSW1hZ2U6OkZvcm1h
dCBpbWFnZUZvcm1hdDsKLSAgICBpZiAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfUkdCKQot
ICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjg4ODsKLSAgICBlbHNlCi0g
ICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCMzI7CisjaWYgR19CWVRFX09S
REVSID09IEdfTElUVExFX0VORElBTgorICAgIGltYWdlRm9ybWF0ID0gKGZvcm1hdCA9PSBHU1Rf
VklERU9fRk9STUFUX0JHUkEpID8gUUltYWdlOjpGb3JtYXRfUkdCMzIgOiBRSW1hZ2U6OkZvcm1h
dF9SR0I4ODg7CisjZWxzZQorICAgIGltYWdlRm9ybWF0ID0gKGZvcm1hdCA9PSBHU1RfVklERU9f
Rk9STUFUX0FSR0IpID8gUUltYWdlOjpGb3JtYXRfQVJHQjMyIDogUUltYWdlOjpGb3JtYXRfUkdC
ODg4OworI2VuZGlmCiAKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1
ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgaW1hZ2VGb3JtYXQpKTsKLX0KKyAgICBRSW1h
Z2UgaW1hZ2UoYnVmZmVyRGF0YSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBpbWFnZUZv
cm1hdCk7CiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqJiBidWZm
ZXIsIEludFNpemUgc2l6ZSwgUUltYWdlOjpGb3JtYXQgaW1hZ2VGb3JtYXQpCi0gICAgOiBtX2lt
YWdlKDApCi17Ci0gICAgUVBpeG1hcCogc3VyZmFjZSA9IG5ldyBRUGl4bWFwOwotICAgIFFJbWFn
ZSBpbWFnZShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCBpbWFnZUZvcm1hdCk7CiAgICAgc3VyZmFjZS0+Y29udmVydEZyb21JbWFnZShpbWFnZSk7
CiAgICAgbV9pbWFnZSA9IEJpdG1hcEltYWdlOjpjcmVhdGUoc3VyZmFjZSk7CisKKyNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAmaW5mbyk7Cisj
ZW5kaWYKIH0KIAogSW1hZ2VHU3RyZWFtZXI6On5JbWFnZUdTdHJlYW1lcigpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDgzOTcwOGUuLjkx
OTlhZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIu
Y3BwCkBAIC0yNTQsMTAgKzI1NCwxMiBAQCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6On5N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIoKQogICAgICAgICBtX21lZGlhTG9jYXRpb25zID0g
MDsKICAgICB9CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBpZiAobV92aWRlb1Np
bmtCaW4pIHsKICAgICAgICAgZ3N0X29iamVjdF91bnJlZihtX3ZpZGVvU2lua0Jpbik7CiAgICAg
ICAgIG1fdmlkZW9TaW5rQmluID0gMDsKICAgICB9CisjZW5kaWYKIAogICAgIGlmIChtX3BsYXlC
aW4pIHsKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGxheUJpbiwgR1NUX1NUQVRF
X05VTEwpOwpAQCAtNDk3LDkgKzQ5OSwxMCBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25zdAogICAgIGlmICghY2FwcykKICAgICAgICAgcmV0
dXJuIEludFNpemUoKTsKIAotICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhl
bEFzcGVjdFJhdGlvRGVub21pbmF0b3I7CisgICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0
b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlOwogICAgIGludCBkaXNwbGF5
V2lkdGgsIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlBc3BlY3RSYXRpb0dDRDsKLSAgICBpbnQgb3Jp
Z2luYWxXaWR0aCA9IDAsIG9yaWdpbmFsSGVpZ2h0ID0gMDsKKyAgICBJbnRTaXplIG9yaWdpbmFs
U2l6ZTsKKyAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7CiAKICAgICAvLyBUT0RPOiBoYW5kbGUg
cG9zc2libGUgY2xlYW4gYXBlcnR1cmUgZGF0YS4gU2VlCiAgICAgLy8gaHR0cHM6Ly9idWd6aWxs
YS5nbm9tZS5vcmcvc2hvd19idWcuY2dpP2lkPTU5NjU3MQpAQCAtNTA4LDMwICs1MTEsMTUgQEAg
SW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QK
IAogICAgIC8vIEdldCB0aGUgdmlkZW8gUEFSIGFuZCBvcmlnaW5hbCBzaXplLCBpZiB0aGlzIGZh
aWxzIHRoZQogICAgIC8vIHZpZGVvLXNpbmsgaGFzIGxpa2VseSBub3QgeWV0IG5lZ290aWF0ZWQg
aXRzIGNhcHMuCi0jaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICBHc3RWaWRlb0luZm8gaW5m
bzsKLSAgICBpZiAoIWdzdF92aWRlb19pbmZvX2Zyb21fY2FwcygmaW5mbywgY2FwcykpCi0gICAg
ICAgIHJldHVybiBJbnRTaXplKCk7Ci0KLSAgICBvcmlnaW5hbFdpZHRoID0gR1NUX1ZJREVPX0lO
Rk9fV0lEVEgoJmluZm8pOwotICAgIG9yaWdpbmFsSGVpZ2h0ID0gR1NUX1ZJREVPX0lORk9fSEVJ
R0hUKCZpbmZvKTsKLSAgICBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yID0gR1NUX1ZJREVPX0lO
Rk9fUEFSX04oJmluZm8pOwotICAgIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciA9IEdTVF9W
SURFT19JTkZPX1BBUl9EKCZpbmZvKTsKLSNlbHNlCi0gICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIg
YW5kIG9yaWdpbmFsIHNpemUuCi0gICAgaWYgKCFHU1RfSVNfQ0FQUyhjYXBzKSB8fCAhZ3N0X2Nh
cHNfaXNfZml4ZWQoY2FwcykKLSAgICAgICAgfHwgIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2Fw
cyhjYXBzLCAwLCAmb3JpZ2luYWxXaWR0aCwgJm9yaWdpbmFsSGVpZ2h0KQotICAgICAgICB8fCAh
Z3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxfYXNwZWN0X3JhdGlvKGNhcHMsICZwaXhlbEFzcGVj
dFJhdGlvTnVtZXJhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IpKQorICAgIGlmICghd2Vi
a2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcywgb3JpZ2luYWxTaXplLCBmb3Jt
YXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRv
ciwgc3RyaWRlKSkKICAgICAgICAgcmV0dXJuIEludFNpemUoKTsKLSNlbmRpZgogCi0gICAgTE9H
X1ZFUkJPU0UoTWVkaWEsICJPcmlnaW5hbCB2aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsV2lk
dGgsIG9yaWdpbmFsSGVpZ2h0KTsKKyAgICBMT0dfVkVSQk9TRShNZWRpYSwgIk9yaWdpbmFsIHZp
ZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxTaXplLndpZHRoKCksIG9yaWdpbmFsU2l6ZS5oZWln
aHQoKSk7CiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJQaXhlbCBhc3BlY3QgcmF0aW86ICVkLyVk
IiwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KTsKIAogICAgIC8vIENhbGN1bGF0ZSBEQVIgYmFzZWQgb24gUEFSIGFuZCB2aWRlbyBzaXplLgot
ICAgIGRpc3BsYXlXaWR0aCA9IG9yaWdpbmFsV2lkdGggKiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJh
dG9yOwotICAgIGRpc3BsYXlIZWlnaHQgPSBvcmlnaW5hbEhlaWdodCAqIHBpeGVsQXNwZWN0UmF0
aW9EZW5vbWluYXRvcjsKKyAgICBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFNpemUud2lkdGgoKSAq
IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3I7CisgICAgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFs
U2l6ZS5oZWlnaHQoKSAqIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKIAogICAgIC8vIERp
dmlkZSBkaXNwbGF5IHdpZHRoIGFuZCBoZWlnaHQgYnkgdGhlaXIgR0NEIHRvIGF2b2lkIHBvc3Np
YmxlIG92ZXJmbG93cy4KICAgICBkaXNwbGF5QXNwZWN0UmF0aW9HQ0QgPSBncmVhdGVzdENvbW1v
bkRpdmlzb3IoZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKQEAgLTU0MCwxOCArNTI4LDE4
IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNv
bnN0CiAKICAgICAvLyBBcHBseSBEQVIgdG8gb3JpZ2luYWwgdmlkZW8gc2l6ZS4gVGhpcyBpcyB0
aGUgc2FtZSBiZWhhdmlvciBhcyBpbiB4dmltYWdlc2luaydzIHNldGNhcHMgZnVuY3Rpb24uCiAg
ICAgZ3VpbnQ2NCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgaWYgKCEob3JpZ2luYWxIZWln
aHQgJSBkaXNwbGF5SGVpZ2h0KSkgeworICAgIGlmICghKG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSAl
IGRpc3BsYXlIZWlnaHQpKSB7CiAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiS2VlcGluZyB2
aWRlbyBvcmlnaW5hbCBoZWlnaHQiKTsKLSAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRf
c2NhbGVfaW50KG9yaWdpbmFsSGVpZ2h0LCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwot
ICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbEhlaWdodCk7Ci0g
ICAgfSBlbHNlIGlmICghKG9yaWdpbmFsV2lkdGggJSBkaXNwbGF5V2lkdGgpKSB7CisgICAgICAg
IHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFNpemUuaGVpZ2h0KCks
IGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CisgICAgICAgIGhlaWdodCA9IHN0YXRpY19j
YXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7CisgICAgfSBlbHNlIGlmICghKG9y
aWdpbmFsU2l6ZS53aWR0aCgpICUgZGlzcGxheVdpZHRoKSkgewogICAgICAgICBMT0dfVkVSQk9T
RShNZWRpYSwgIktlZXBpbmcgdmlkZW8gb3JpZ2luYWwgd2lkdGgiKTsKLSAgICAgICAgaGVpZ2h0
ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbFdpZHRoLCBkaXNwbGF5SGVpZ2h0
LCBkaXNwbGF5V2lkdGgpOwotICAgICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9y
aWdpbmFsV2lkdGgpOworICAgICAgICBoZWlnaHQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50
KG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5V2lkdGgpOworICAg
ICAgICB3aWR0aCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS53aWR0aCgpKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIkFwcHJveGltYXRpbmcg
d2hpbGUga2VlcGluZyBvcmlnaW5hbCB2aWRlbyBoZWlnaHQiKTsKLSAgICAgICAgd2lkdGggPSBn
c3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsSGVpZ2h0LCBkaXNwbGF5V2lkdGgsIGRp
c3BsYXlIZWlnaHQpOwotICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0Pihvcmln
aW5hbEhlaWdodCk7CisgICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChv
cmlnaW5hbFNpemUuaGVpZ2h0KCksIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CisgICAg
ICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSk7
CiAgICAgfQogCiAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJOYXR1cmFsIHNpemU6ICUiIEdfR1VJ
TlQ2NF9GT1JNQVQgInglIiBHX0dVSU5UNjRfRk9STUFULCB3aWR0aCwgaGVpZ2h0KTsKQEAgLTk1
Nyw3ICs5NDUsNyBAQCB1bnNpZ25lZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnRvdGFs
Qnl0ZXMoKSBjb25zdAogICAgIGJvb2wgZG9uZSA9IGZhbHNlOwogICAgIHdoaWxlICghZG9uZSkg
ewogI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0gICAgICAgIEdWYWx1ZSBpdGVtID0gezAsIH07
CisgICAgICAgIEdWYWx1ZSBpdGVtID0gR19WQUxVRV9JTklUOwogICAgICAgICBzd2l0Y2ggKGdz
dF9pdGVyYXRvcl9uZXh0KGl0ZXIsICZpdGVtKSkgewogICAgICAgICBjYXNlIEdTVF9JVEVSQVRP
Ul9PSzogewogICAgICAgICAgICAgR3N0UGFkKiBwYWQgPSBzdGF0aWNfY2FzdDxHc3RQYWQqPihn
X3ZhbHVlX2dldF9vYmplY3QoJml0ZW0pKTsKQEAgLTE0ODEsMTcgKzE0NjksMjAgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgSW50UmVjdCYKICAgICBpZiAoIW1fYnVmZmVyKQogICAgICAgICByZXR1cm47CiAK
LSAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0gSW1hZ2VHU3RyZWFtZXI6OmNy
ZWF0ZUltYWdlKG1fYnVmZmVyKTsKKyAgICBHc3RDYXBzKiBjYXBzID0gd2Via2l0R3N0RWxlbWVu
dEdldFBhZENhcHMobV93ZWJraXRWaWRlb1NpbmssICJzaW5rIik7CisgICAgaWYgKCFjYXBzKQor
ICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGdzdEltYWdlID0g
SW1hZ2VHU3RyZWFtZXI6OmNyZWF0ZUltYWdlKG1fYnVmZmVyLCBjYXBzKTsKICAgICBpZiAoIWdz
dEltYWdlKQogICAgICAgICByZXR1cm47CiAKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UocmVpbnRl
cnByZXRfY2FzdDxJbWFnZSo+KGdzdEltYWdlLT5pbWFnZSgpLmdldCgpKSwgQ29sb3JTcGFjZVNS
R0IsCi0gICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIENvbXBvc2l0ZUNvcHksIERvTm90UmVz
cGVjdEltYWdlT3JpZW50YXRpb24sIGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcmVj
dCwgZ3N0SW1hZ2UtPnJlY3QoKSwgQ29tcG9zaXRlQ29weSwgRG9Ob3RSZXNwZWN0SW1hZ2VPcmll
bnRhdGlvbiwgZmFsc2UpOwogfQogCiBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IG1pbWVUeXBlQ2Fj
aGUoKQogewotCiAgICAgaW5pdGlhbGl6ZUdTdHJlYW1lckFuZFJlZ2lzdGVyV2ViS2l0RWxlbWVu
dHMoKTsKIAogICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTdHJpbmc+LCBjYWNoZSwg
KCkpOwpAQCAtMTY3Myw3ICsxNjY0LDExIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyOjpjcmVhdGVHU1RQbGF5QmluKCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwg
InZpZGVvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVZpZGVvQ2hhbmdl
ZENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJhdWRp
by1jaGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVBdWRpb0NoYW5nZWRDYWxs
YmFjayksIHRoaXMpOwogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgbV93ZWJraXRW
aWRlb1NpbmsgPSB3ZWJraXRWaWRlb1NpbmtOZXcobV9nc3RHV29ybGQuZ2V0KCkpOworI2Vsc2UK
KyAgICBtX3dlYmtpdFZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05ldygpOworI2VuZGlmCiAK
ICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2Via2l0VmlkZW9TaW5rLCAicmVwYWludC1yZXF1ZXN0
ZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZVJlcGFpbnRDYWxsYmFjayksIHRoaXMp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCmluZGV4IDEzODliNjkuLjIwMTMx
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCkBAIC0yOSwxNSArMjksMjkg
QEAKICNpZiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIlZpZGVvU2lua0dTdHJlYW1lci5oIgog
CisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgorI2luY2x1ZGUgIkludFNpemUuaCIK
ICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2luY2x1ZGUg
PGdzdC92aWRlby9nc3R2aWRlb3Bvb2wuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9GYXN0QWxs
b2NCYXNlLmg+CiAKIC8vIENBSVJPX0ZPUk1BVF9SR0IyNCB1c2VkIHRvIHJlbmRlciB0aGUgdmlk
ZW8gYnVmZmVycyBpcyBsaXR0bGUvYmlnIGVuZGlhbiBkZXBlbmRhbnQuCiAjaWYgR19CWVRFX09S
REVSID09IEdfTElUVExFX0VORElBTgorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogI2RlZmlu
ZSBXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUyBHU1RfVklERU9fQ0FQU19CR1J4ICI7IiBHU1Rf
VklERU9fQ0FQU19CR1JBCiAjZWxzZQorI2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQ
UyBHU1RfVklERU9fQ0FQU19NQUtFKCJ7IEJHUngsIEJHUkEgfSIpCisjZW5kaWYKKyNlbHNlCisj
aWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAjZGVmaW5lIFdFQktJVF9WSURFT19TSU5LX1BBRF9D
QVBTIEdTVF9WSURFT19DQVBTX3hSR0IgIjsiIEdTVF9WSURFT19DQVBTX0FSR0IKKyNlbHNlCisj
ZGVmaW5lIFdFQktJVF9WSURFT19TSU5LX1BBRF9DQVBTIEdTVF9WSURFT19DQVBTX01BS0UoInsg
eFJHQiwgQVJHQiB9IikKKyNlbmRpZgogI2VuZGlmCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxh
dGUgc19zaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic2luayIsIEdTVF9Q
QURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNfQ0FQUyhXRUJLSVRfVklERU9fU0lO
S19QQURfQ0FQUykpOwogCkBAIC02Miw3ICs3NiwxMyBAQCBzdHJ1Y3QgX1dlYktpdFZpZGVvU2lu
a1ByaXZhdGUgewogICAgIEdNdXRleCogYnVmZmVyTXV0ZXg7CiAgICAgR0NvbmQqIGRhdGFDb25k
aXRpb247CiAKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdFZpZGVvSW5mbyBpbmZv
OworI2VuZGlmCisKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBXZWJDb3JlOjpHU3Ry
ZWFtZXJHV29ybGQqIGdzdEdXb3JsZDsKKyNlbmRpZgogCiAgICAgLy8gSWYgdGhpcyBpcyBUUlVF
IGFsbCBwcm9jZXNzaW5nIHNob3VsZCBmaW5pc2ggQVNBUAogICAgIC8vIFRoaXMgaXMgbmVjZXNz
YXJ5IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgYSByYWNlIGJldHdlZW4KQEAgLTkxLDYgKzExMSwx
MCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19pbml0KFdlYktpdFZpZGVvU2luayog
c2luaykKICAgICBzaW5rLT5wcml2LT5kYXRhQ29uZGl0aW9uID0gZ19jb25kX25ldygpOwogICAg
IHNpbmstPnByaXYtPmJ1ZmZlck11dGV4ID0gZ19tdXRleF9uZXcoKTsKICNlbmRpZgorCisjaWZk
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfdmlkZW9faW5mb19pbml0KCZzaW5rLT5wcml2
LT5pbmZvKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0VmlkZW9TaW5rVGlt
ZW91dENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCkBAIC0xMjksMTUgKzE1MywxOCBAQCBzdGF0aWMg
R3N0Rmxvd1JldHVybiB3ZWJraXRWaWRlb1NpbmtSZW5kZXIoR3N0QmFzZVNpbmsqIGJhc2VTaW5r
LCBHc3RCdWZmZXIqIGJ1ZgogICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CiAgICAgfQogCisj
aWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgLy8gSWdub3JlIGJ1ZmZlcnMgaWYgdGhlIHZp
ZGVvIGlzIGFscmVhZHkgaW4gZnVsbHNjcmVlbiB1c2luZwogICAgIC8vIGFub3RoZXIgc2luay4K
ICAgICBpZiAocHJpdi0+Z3N0R1dvcmxkLT5pc0Z1bGxzY3JlZW4oKSkgewogICAgICAgICBnX211
dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAgICAgICAgIHJldHVybiBHU1RfRkxPV19P
SzsKICAgICB9CisjZW5kaWYKIAogICAgIHByaXYtPmJ1ZmZlciA9IGdzdF9idWZmZXJfcmVmKGJ1
ZmZlcik7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAvLyBGb3IgdGhlIHVubGlr
ZWx5IGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBoYXMgbm8gY2FwcywgdGhlIGNhcHMKICAgICAvLyBh
cmUgaW1wbGljaXRlbHkgdGhlIGNhcHMgb2YgdGhlIHBhZC4gVGhpcyBzaG91bGRuJ3QgaGFwcGVu
LgogICAgIGlmIChVTkxJS0VMWSghR1NUX0JVRkZFUl9DQVBTKGJ1ZmZlcikpKSB7CkBAIC0xNDYs
MTQgKzE3MywyNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRWaWRlb1NpbmtSZW5kZXIo
R3N0QmFzZVNpbmsqIGJhc2VTaW5rLCBHc3RCdWZmZXIqIGJ1ZgogICAgIH0KIAogICAgIEdzdENh
cHMqIGNhcHMgPSBHU1RfQlVGRkVSX0NBUFMoYnVmZmVyKTsKKyNlbHNlCisgICAgR3N0Q2Fwcyog
Y2FwcyA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMoJnByaXYtPmluZm8pOworI2VuZGlmCisKICAg
ICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7Ci0gICAgaWYg
KFVOTElLRUxZKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndp
ZHRoLCAmaGVpZ2h0KSkpIHsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemU7CisgICAgaW50IHBp
eGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3Ry
aWRlOworICAgIGlmICghd2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcywg
c2l6ZSwgZm9ybWF0LCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlv
RGVub21pbmF0b3IsIHN0cmlkZSkpIHsKICAgICAgICAgZ3N0X2J1ZmZlcl91bnJlZihidWZmZXIp
OworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMp
OworI2VuZGlmCiAgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKICAg
ICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwogICAgIH0KIAorI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisjZW5kaWYKKwogICAgIC8vIENhaXJv
J3MgQVJHQiBoYXMgcHJlLW11bHRpcGxpZWQgYWxwaGEgd2hpbGUgR1N0cmVhbWVyJ3MgZG9lc24n
dC4KICAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdG8gQ2Fpcm8ncyBBUkdCLgogICAgIGlmIChmb3Jt
YXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFU
X0JHUkEpIHsKQEAgLTE2Miw3ICsyMDEsNyBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRW
aWRlb1NpbmtSZW5kZXIoR3N0QmFzZVNpbmsqIGJhc2VTaW5rLCBHc3RCdWZmZXIqIGJ1ZgogICAg
ICAgICAvLyBUaGUgYnVmZmVyIGNvbnRlbnQgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGhlcmUgYmVj
YXVzZSB0aGUgc2FtZSBidWZmZXIKICAgICAgICAgLy8gY291bGQgYmUgcGFzc2VkIG11bHRpcGxl
IHRpbWVzIHRvIHRoaXMgbWV0aG9kIChpbiB0aGVvcnkpLgogCi0gICAgICAgIEdzdEJ1ZmZlciog
bmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyhHU1RfQlVGRkVSX1NJWkUo
YnVmZmVyKSk7CisgICAgICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gd2Via2l0R3N0Q3JlYXRl
QnVmZmVyKGJ1ZmZlcik7CiAKICAgICAgICAgLy8gQ2hlY2sgaWYgYWxsb2NhdGlvbiBmYWlsZWQu
CiAgICAgICAgIGlmIChVTkxJS0VMWSghbmV3QnVmZmVyKSkgewpAQCAtMTcwLDE3ICsyMDksMjQg
QEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0VmlkZW9TaW5rUmVuZGVyKEdzdEJhc2VTaW5r
KiBiYXNlU2luaywgR3N0QnVmZmVyKiBidWYKICAgICAgICAgICAgIHJldHVybiBHU1RfRkxPV19F
UlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIGdzdF9idWZmZXJfY29weV9tZXRhZGF0YShuZXdC
dWZmZXIsIGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0QnVmZmVyQ29weUZsYWdzPihHU1RfQlVGRkVS
X0NPUFlfQUxMKSk7Ci0KICAgICAgICAgLy8gV2UgZG9uJ3QgdXNlIENvbG9yOjpwcmVtdWx0aXBs
aWVkQVJHQkZyb21Db2xvcigpIGhlcmUgYmVjYXVzZQogICAgICAgICAvLyBvbmUgZnVuY3Rpb24g
Y2FsbCBwZXIgdmlkZW8gcGl4ZWwgaXMganVzdCB0b28gZXhwZW5zaXZlOgogICAgICAgICAvLyBG
b3IgNzIwcC9QQUwgZm9yIGV4YW1wbGUgdGhpcyBtZWFucyAxMjgwKjcyMCoyNT0yMzA0MDAwMAog
ICAgICAgICAvLyBmdW5jdGlvbiBjYWxscyBwZXIgc2Vjb25kIQorI2lmbmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQogICAgICAgICBjb25zdCBndWludDgqIHNvdXJjZSA9IEdTVF9CVUZGRVJfREFUQShi
dWZmZXIpOwogICAgICAgICBndWludDgqIGRlc3RpbmF0aW9uID0gR1NUX0JVRkZFUl9EQVRBKG5l
d0J1ZmZlcik7CisjZWxzZQorICAgICAgICBHc3RNYXBJbmZvIHNvdXJjZUluZm87CisgICAgICAg
IEdzdE1hcEluZm8gZGVzdGluYXRpb25JbmZvOworICAgICAgICBnc3RfYnVmZmVyX21hcChidWZm
ZXIsICZzb3VyY2VJbmZvLCBHU1RfTUFQX1JFQUQpOworICAgICAgICBjb25zdCBndWludDgqIHNv
dXJjZSA9IGNvbnN0X2Nhc3Q8Z3VpbnQ4Kj4oc291cmNlSW5mby5kYXRhKTsKKyAgICAgICAgZ3N0
X2J1ZmZlcl9tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvLCBHU1RfTUFQX1dSSVRFKTsK
KyAgICAgICAgZ3VpbnQ4KiBkZXN0aW5hdGlvbiA9IHN0YXRpY19jYXN0PGd1aW50OCo+KGRlc3Rp
bmF0aW9uSW5mby5kYXRhKTsKKyNlbmRpZgogCi0gICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
aGVpZ2h0OyB4KyspIHsKLSAgICAgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgd2lkdGg7IHkr
KykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHNpemUuaGVpZ2h0KCk7IHgrKykgewor
ICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXplLndpZHRoKCk7IHkrKykgewogI2lm
IEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBhbHBoYSA9IHNvdXJjZVszXTsKICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvblsw
XSA9IChzb3VyY2VbMF0gKiBhbHBoYSArIDEyOCkgLyAyNTU7CkBAIC0xOTksNiArMjQ1LDEwIEBA
IHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdFZpZGVvU2lua1JlbmRlcihHc3RCYXNlU2luayog
YmFzZVNpbmssIEdzdEJ1ZmZlciogYnVmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorI2lm
ZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAoYnVmZmVyLCAm
c291cmNlSW5mbyk7CisgICAgICAgIGdzdF9idWZmZXJfdW5tYXAobmV3QnVmZmVyLCAmZGVzdGlu
YXRpb25JbmZvKTsKKyNlbmRpZgogICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZlcik7CiAg
ICAgICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgICB9CkBAIC0yOTMs
NiArMzQzLDI3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRWaWRlb1NpbmtTdGFydChHc3RCYXNl
U2luayogYmFzZVNpbmspCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKKyNpZmRlZiBHU1RfQVBJX1ZF
UlNJT05fMQorc3RhdGljIGdib29sZWFuIHdlYmtpdFZpZGVvU2lua1Byb3Bvc2VBbGxvY2F0aW9u
KEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0UXVlcnkqIHF1ZXJ5KQoreworICAgIFdlYktpdFZp
ZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJhc2VTaW5rKTsKKyAgICBHc3RDYXBz
KiBjYXBzOworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9jYXRpb24ocXVlcnksICZjYXBzLCAw
KTsKKworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgaWYgKCFn
c3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnNpbmstPnByaXYtPmluZm8sIGNhcHMpKQorICAgICAg
ICByZXR1cm4gRkFMU0U7CisKKyAgICBnc3RfcXVlcnlfYWRkX2FsbG9jYXRpb25fbWV0YShxdWVy
eSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUpOworICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlv
bl9tZXRhKHF1ZXJ5LCBHU1RfVklERU9fQ1JPUF9NRVRBX0FQSV9UWVBFKTsKKyAgICByZXR1cm4g
VFJVRTsKK30KKyNlbmRpZgorCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiBzdGF0aWMgdm9p
ZCB3ZWJraXRWaWRlb1NpbmtNYXJzaGFsVm9pZEFuZE1pbmlPYmplY3QoR0Nsb3N1cmUqIGNsb3N1
cmUsIEdWYWx1ZSogcmV0dXJuVmFsdWUsIGd1aW50IHBhcmFtZXRlcnNOdW1iZXIsIGNvbnN0IEdW
YWx1ZSogcGFyYW1ldGVyVmFsdWVzLCBncG9pbnRlciBpbnZvY2F0aW9uSGludCwgZ3BvaW50ZXIg
bWFyc2hhbERhdGEpCiB7CiAgICAgdHlwZWRlZiB2b2lkICgqbWFyc2hhbGZ1bmNfVk9JRF9fTUlO
SU9CSkVDVCkgKGdwb2ludGVyIG9iaiwgZ3BvaW50ZXIgYXJnMSwgZ3BvaW50ZXIgZGF0YTIpOwpA
QCAtMzEzLDYgKzM4NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdFZpZGVvU2lua01hcnNoYWxWb2lk
QW5kTWluaU9iamVjdChHQ2xvc3VyZSogY2xvc3VyZSwgR1ZhbHVlKiByCiAgICAgY2FsbGJhY2sg
PSAobWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkgKG1hcnNoYWxEYXRhID8gbWFyc2hhbERh
dGEgOiBjY2xvc3VyZS0+Y2FsbGJhY2spOwogICAgIGNhbGxiYWNrKGRhdGExLCBnc3RfdmFsdWVf
Z2V0X21pbmlfb2JqZWN0KHBhcmFtZXRlclZhbHVlcyArIDEpLCBkYXRhMik7CiB9CisjZW5kaWYK
IAogc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1Np
bmtDbGFzcyoga2xhc3MpCiB7CkBAIC0zMjEsNyArMzkzLDExIEBAIHN0YXRpYyB2b2lkIHdlYmtp
dF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGtsYXNzKQogICAg
IEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
OwogCiAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3Ms
IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc19zaW5rVGVtcGxhdGUpKTsKKyNpZmRlZiBH
U1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9tZXRhZGF0YShlbGVt
ZW50Q2xhc3MsCisjZWxzZQogICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBs
ZShlbGVtZW50Q2xhc3MsCisjZW5kaWYKICAgICAgICAgICAgICJXZWJLaXQgdmlkZW8gc2luayIs
CiAgICAgICAgICAgICAiU2luay9WaWRlbyIsICJTZW5kcyB2aWRlbyBkYXRhIGZyb20gYSBHU3Ry
ZWFtZXIgcGlwZWxpbmUgdG8gYSBDYWlybyBzdXJmYWNlIiwKICAgICAgICAgICAgICJBbHAgVG9r
ZXIgPGFscEBhdG9rZXIuY29tPiIpOwpAQCAtMzM2LDYgKzQxMiw5IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0VmlkZW9TaW5rQ2xhc3MqIGtsYXNzKQog
ICAgIGJhc2VTaW5rQ2xhc3MtPnByZXJvbGwgPSB3ZWJraXRWaWRlb1NpbmtSZW5kZXI7CiAgICAg
YmFzZVNpbmtDbGFzcy0+c3RvcCA9IHdlYmtpdFZpZGVvU2lua1N0b3A7CiAgICAgYmFzZVNpbmtD
bGFzcy0+c3RhcnQgPSB3ZWJraXRWaWRlb1NpbmtTdGFydDsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQorICAgIGJhc2VTaW5rQ2xhc3MtPnByb3Bvc2VfYWxsb2NhdGlvbiA9IHdlYmtpdFZpZGVv
U2lua1Byb3Bvc2VBbGxvY2F0aW9uOworI2VuZGlmCiAKICAgICB3ZWJraXRWaWRlb1NpbmtTaWdu
YWxzW1JFUEFJTlRfUkVRVUVTVEVEXSA9IGdfc2lnbmFsX25ldygicmVwYWludC1yZXF1ZXN0ZWQi
LAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xhc3MpLApAQCAtMzQzLDE4ICs0MjIs
MjkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRl
b1NpbmtDbGFzcyoga2xhc3MpCiAgICAgICAgICAgICAwLCAvLyBDbGFzcyBvZmZzZXQKICAgICAg
ICAgICAgIDAsIC8vIEFjY3VtdWxhdG9yCiAgICAgICAgICAgICAwLCAvLyBBY2N1bXVsYXRvciBk
YXRhCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgICAgICAgICB3ZWJraXRWaWRlb1Np
bmtNYXJzaGFsVm9pZEFuZE1pbmlPYmplY3QsCisjZWxzZQorICAgICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX2dlbmVyaWMsIC8vIEN1c3RvbSBtYXJzaGFsbGVyCisjZW5kaWYKICAgICAgICAg
ICAgIEdfVFlQRV9OT05FLCAvLyBSZXR1cm4gdHlwZQogICAgICAgICAgICAgMSwgLy8gT25seSBv
bmUgcGFyYW1ldGVyCiAgICAgICAgICAgICBHU1RfVFlQRV9CVUZGRVIpOwogfQogCiAKKyNpZm5k
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQqIHdlYmtpdFZpZGVvU2lua05ldyhXZWJD
b3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3JsZCkKIHsKICAgICBHc3RFbGVtZW50KiBlbGVt
ZW50ID0gR1NUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIDAp
KTsKICAgICBXRUJLSVRfVklERU9fU0lOSyhlbGVtZW50KS0+cHJpdi0+Z3N0R1dvcmxkID0gZ3N0
R1dvcmxkOwogICAgIHJldHVybiBlbGVtZW50OwogfQorI2Vsc2UKK0dzdEVsZW1lbnQqIHdlYmtp
dFZpZGVvU2lua05ldygpCit7CisgICAgcmV0dXJuIEdTVF9FTEVNRU5UKGdfb2JqZWN0X25ldyhX
RUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9CisjZW5kaWYKIAogI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKaW5kZXggMzQwNTdhYS4uMDYx
YjY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaApAQCAtMjIsNyArMjIsMTAgQEAK
IAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAorI2lmbmRlZiBHU1RfQVBJ
X1ZFUlNJT05fMQogI2luY2x1ZGUgIkdTdHJlYW1lckdXb3JsZC5oIgorI2VuZGlmCisKICNpbmNs
dWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3NpbmsuaD4K
ICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KQEAgLTU4LDcgKzYxLDExIEBAIHN0cnVjdCBf
V2ViS2l0VmlkZW9TaW5rQ2xhc3MgewogCiBHVHlwZSB3ZWJraXRfdmlkZW9fc2lua19nZXRfdHlw
ZSgpIEdfR05VQ19DT05TVDsKIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogR3N0RWxlbWVu
dCogd2Via2l0VmlkZW9TaW5rTmV3KFdlYkNvcmU6OkdTdHJlYW1lckdXb3JsZCopOworI2Vsc2UK
K0dzdEVsZW1lbnQqIHdlYmtpdFZpZGVvU2lua05ldygpOworI2VuZGlmCiAKICNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSKQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3Ry
ZWFtZXIuY3BwCmluZGV4IGQxZDkxNDcuLmYwNGM2MDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC04NTYsNyArODU2LDcgQEAgdm9pZCBTdHJlYW1p
bmdDbGllbnQ6OmRpZFJlY2VpdmVSZXNwb25zZShSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UKICAgICAgICAgZ3N0X3RhZ19saXN0X2ZyZWUodGFncyk7CiAgICAgZWxzZQog
I2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0gICAgICAgIGdzdF9wYWRfcHVzaF9ldmVudChHU1Rf
UEFEX0NBU1QobV9zcmMtPnByaXYtPnNyY3BhZCksIGdzdF9ldmVudF9uZXdfdGFnKHRhZ3MpKTsK
KyAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9QQURfQ0FTVChtX3NyYy0+cHJpdi0+c3Jj
cGFkKSwgZ3N0X2V2ZW50X25ld190YWcoIldlYktpdFdlYlNyYyIsIHRhZ3MpKTsKICNlbHNlCiAg
ICAgICAgIGdzdF9lbGVtZW50X2ZvdW5kX3RhZ3NfZm9yX3BhZChHU1RfRUxFTUVOVChtX3NyYyks
IG1fc3JjLT5wcml2LT5zcmNwYWQsIHRhZ3MpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9jb25maWd1
cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggYzgzMDYwOS4uYjA3MTAxZSAxMDA2NDQKLS0tIGEv
Y29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMzQ4LDcgKzM0OCw3IEBAIEFDX01T
R19SRVNVTFQoWyR3aXRoX2dzdHJlYW1lcl0pCiAKIEdTVFJFQU1FUl8wXzEwX1JFUVVJUkVEX1ZF
UlNJT049MC4xMAogR1NUUkVBTUVSXzBfMTBfUExVR0lOU19CQVNFX1JFUVVJUkVEX1ZFUlNJT049
MC4xMC4zMAotR1NUUkVBTUVSXzFfMF9SRVFVSVJFRF9WRVJTSU9OPTEuMAorR1NUUkVBTUVSXzFf
MF9SRVFVSVJFRF9WRVJTSU9OPTAuMTEuOTAKIEdTVFJFQU1FUl8xXzBfUExVR0lOU19CQVNFX1JF
UVVJUkVEX1ZFUlNJT049MC4xMS45MAogCiBjYXNlICIkd2l0aF9nc3RyZWFtZXIiIGluCi0tIAox
LjcuMTA=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146715</attachid>
            <date>2012-06-09 11:58:11 -0700</date>
            <delta_ts>2012-06-18 22:05:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>29818</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAzNzczOTRjZjQ1MTdlODBlZjZmMjI4ZjFiNDMwYjk4ZTk4MTk0ZjNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDkgSnVuIDIwMTIgMTE6NTQ6MzkgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQ
YXRjaAoKLS0tCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3Bw
ICAgICB8ICAgNDkgKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZl
cnNpb25pbmcuaCAgICAgICB8ICAgIDggKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvSW1hZ2VHU3RyZWFtZXIuaCAgIHwgICAzOSArKysrKy0tLQogLi4uL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCAgICAgfCAgIDU1ICsrKysrKystLS0tCiAuLi4v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwICAgICAgICB8ICAgNTAgKysr
KysrLS0tLQogLi4uL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAg
ICAgfCAgIDYxICsrKysrKy0tLS0tLQogLi4uL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtH
U3RyZWFtZXIuY3BwICAgICAgfCAgMTA0ICsrKysrKysrKysrKysrKysrKy0tCiAuLi4vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oICAgICAgICB8ICAgIDcgKysKIC4uLi9n
c3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVhbWVyLmNwcCAgICAgICAgIHwgICAgMiArLQog
Y29uZmlndXJlLmFjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAy
ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCAyNzcgaW5zZXJ0aW9ucygrKSwgMTAwIGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcAppbmRleCBkNDIzOGMxLi4yMTE1
OTBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3BwCkBAIC0yMCw2ICsyMCw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlICJHU3RyZWFtZXJWZXJzaW9uaW5n
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogCiB2b2lkIHdlYmtpdEdzdE9iamVjdFJlZlNpbmso
R3N0T2JqZWN0KiBnc3RPYmplY3QpCiB7CkBAIC00OCwzICs0OSw1MSBAQCBHc3RDYXBzKiB3ZWJr
aXRHc3RFbGVtZW50R2V0UGFkQ2FwcyhHc3RFbGVtZW50KiBlbGVtZW50LCBjb25zdCBjaGFyKiBk
aXJlY3Rpb24pCiAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHBhZCkpOwogICAgIHJl
dHVybiBjYXBzOwogfQorCitib29sIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZyb21DYXBz
KEdzdENhcHMqIGNhcHMsIFdlYkNvcmU6OkludFNpemUmIHNpemUsIEdzdFZpZGVvRm9ybWF0JiBm
b3JtYXQsIGludCYgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgaW50JiBwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IsIGludCYgc3RyaWRlKQoreworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8x
CisgICAgR3N0VmlkZW9JbmZvIGluZm87CisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2Nh
cHMoJmluZm8sIGNhcHMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3JtYXQgPSBH
U1RfVklERU9fSU5GT19GT1JNQVQoJmluZm8pOworICAgIHNpemUuc2V0V2lkdGgoR1NUX1ZJREVP
X0lORk9fV0lEVEgoJmluZm8pKTsKKyAgICBzaXplLnNldEhlaWdodChHU1RfVklERU9fSU5GT19I
RUlHSFQoJmluZm8pKTsKKyAgICBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yID0gR1NUX1ZJREVP
X0lORk9fUEFSX04oJmluZm8pOworICAgIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciA9IEdT
VF9WSURFT19JTkZPX1BBUl9EKCZpbmZvKTsKKyAgICBzdHJpZGUgPSBHU1RfVklERU9fSU5GT19Q
TEFORV9TVFJJREUoJmluZm8sIDApOworI2Vsc2UKKyAgICBnaW50IHdpZHRoLCBoZWlnaHQ7Cisg
ICAgaWYgKCFHU1RfSVNfQ0FQUyhjYXBzKSB8fCAhZ3N0X2NhcHNfaXNfZml4ZWQoY2FwcykKKyAg
ICAgICAgfHwgIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAmd2lk
dGgsICZoZWlnaHQpCisgICAgICAgIHx8ICFnc3RfdmlkZW9fcGFyc2VfY2Fwc19waXhlbF9hc3Bl
Y3RfcmF0aW8oY2FwcywgJnBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpeGVsQXNwZWN0UmF0aW9E
ZW5vbWluYXRvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzaXplLnNldFdpZHRoKHdp
ZHRoKTsKKyAgICBzaXplLnNldEhlaWdodChoZWlnaHQpOworICAgIHN0cmlkZSA9IHNpemUud2lk
dGgoKSAqIDQ7CisjZW5kaWYKKworICAgIHJldHVybiB0cnVlOworfQorCitHc3RCdWZmZXIqIHdl
YmtpdEdzdENyZWF0ZUJ1ZmZlcihHc3RCdWZmZXIqIGJ1ZmZlcikKK3sKKyNpZm5kZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKyAgICBHc3RCdWZmZXIqIG5ld0J1ZmZlciA9IGdzdF9idWZmZXJfdHJ5X25l
d19hbmRfYWxsb2MoR1NUX0JVRkZFUl9TSVpFKGJ1ZmZlcikpOworI2Vsc2UKKyAgICBnc2l6ZSBi
dWZmZXJTaXplID0gZ3N0X2J1ZmZlcl9nZXRfc2l6ZShidWZmZXIpOworICAgIEdzdEJ1ZmZlciog
bmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXdfYW5kX2FsbG9jKGJ1ZmZlclNpemUpOworI2VuZGlm
CisKKyAgICBpZiAoIW5ld0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyNpZm5kZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX2NvcHlfbWV0YWRhdGEobmV3QnVmZmVyLCBi
dWZmZXIsIHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX0FM
TCkpOworI2Vsc2UKKyAgICBnc3RfYnVmZmVyX2NvcHlfaW50byhuZXdCdWZmZXIsIGJ1ZmZlciwg
c3RhdGljX2Nhc3Q8R3N0QnVmZmVyQ29weUZsYWdzPihHU1RfQlVGRkVSX0NPUFlfTUVUQURBVEEp
LCAwLCBidWZmZXJTaXplKTsKKyNlbmRpZgorICAgIHJldHVybiBuZXdCdWZmZXI7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVh
bWVyVmVyc2lvbmluZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lclZlcnNpb25pbmcuaAppbmRleCBmYWFkYzI2Li43MjEzZTA5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
VmVyc2lvbmluZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmgKQEAgLTIxLDggKzIxLDE0IEBACiAjZGVmaW5lIEdT
dHJlYW1lclZlcnNpb25pbmdfaAogCiAjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdz
dC92aWRlby92aWRlby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBJbnRTaXplOwor
fTsKIAogdm9pZCB3ZWJraXRHc3RPYmplY3RSZWZTaW5rKEdzdE9iamVjdCopOwogR3N0Q2Fwcyog
d2Via2l0R3N0RWxlbWVudEdldFBhZENhcHMoR3N0RWxlbWVudCosIGNvbnN0IGNoYXIqKTsKLQor
Ym9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhHc3RDYXBzKiwgV2ViQ29y
ZTo6SW50U2l6ZSYsIEdzdFZpZGVvRm9ybWF0JiwgaW50JiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJh
dG9yLCBpbnQmIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgaW50JiBzdHJpZGUpOworR3N0
QnVmZmVyKiB3ZWJraXRHc3RDcmVhdGVCdWZmZXIoR3N0QnVmZmVyKik7CiAjZW5kaWYgLy8gR1N0
cmVhbWVyVmVyc2lvbmluZ19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCmluZGV4IDM4ZTA4M2YuLjUy
YzU0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9JbWFnZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIDIwMTEs
IDIwMTIgSWdhbGlhIFMuTAogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yMywyMCArMjMsMjQgQEAK
ICNpZiBFTkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCiAKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotI2luY2x1ZGUgPGdzdC9nc3QuaD4KLSNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8u
aD4KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJWZXJzaW9uaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAotI2lmIFVTRShDQUlSTykKLSNpbmNsdWRl
IDxjYWlyby5oPgotI2VuZGlmCit0eXBlZGVmIHN0cnVjdCBfR3N0QnVmZmVyIEdzdEJ1ZmZlcjsK
K3R5cGVkZWYgc3RydWN0IF9Hc3RDYXBzIEdzdENhcHM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEludFNpemU7CiAKIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGljIFJlZkNvdW50
ZWQ8SW1hZ2VHU3RyZWFtZXI+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEltYWdlR1N0cmVhbWVyPiBjcmVhdGVJbWFnZShHc3RCdWZmZXIqKTsKKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVm
ZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgY2FwcykpOworICAgICAgICB9CiAgICAgICAg
IH5JbWFnZUdTdHJlYW1lcigpOwogCiAgICAgICAgIFBhc3NSZWZQdHI8Qml0bWFwSW1hZ2U+IGlt
YWdlKCkKQEAgLTQ1LDE3ICs0OSwyMCBAQCBjbGFzcyBJbWFnZUdTdHJlYW1lciA6IHB1YmxpYyBS
ZWZDb3VudGVkPEltYWdlR1N0cmVhbWVyPiB7CiAgICAgICAgICAgICByZXR1cm4gbV9pbWFnZS5n
ZXQoKTsKICAgICAgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPEJpdG1hcElt
YWdlPiBtX2ltYWdlOwotCi0jaWYgVVNFKENBSVJPKQotICAgICAgICBJbWFnZUdTdHJlYW1lcihH
c3RCdWZmZXIqJiwgSW50U2l6ZSwgY2Fpcm9fZm9ybWF0X3QmKTsKLSNlbmRpZgorICAgICAgICB2
b2lkIHNldENyb3BSZWN0KEZsb2F0UmVjdCByZWN0KSB7IG1fY3JvcFJlY3QgPSByZWN0OyB9Cisg
ICAgICAgIEZsb2F0UmVjdCByZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFtX2Ny
b3BSZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRmxvYXRSZWN0KG1fY3Jv
cFJlY3QpOwogCi0jaWYgUExBVEZPUk0oUVQpCi0gICAgICAgIEltYWdlR1N0cmVhbWVyKEdzdEJ1
ZmZlciomLCBJbnRTaXplLCBRSW1hZ2U6OkZvcm1hdCk7Ci0jZW5kaWYKKyAgICAgICAgICAgIC8v
IERlZmF1bHQgcmVjdGFuZ2xlIHVzZWQgYnkgR3JhcGhpY3NDb250ZXh0OjpkcmF3SW1hZ2UoKS4K
KyAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgLTEsIC0xKTsKKyAgICAgICAgfQog
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiwgR3N0Q2Fw
cyopOworICAgICAgICBSZWZQdHI8Qml0bWFwSW1hZ2U+IG1faW1hZ2U7CisgICAgICAgIEZsb2F0
UmVjdCBtX2Nyb3BSZWN0OwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNh
aXJvLmNwcAppbmRleCBhMGJmNWY0Li4wMTg2MzBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJDYWlyby5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVh
bWVyQ2Fpcm8uY3BwCkBAIC0yMiw0MCArMjIsNTMgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYg
VVNFKEdTVFJFQU1FUikKIAorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8Z3N0L2dzdC5o
PgorI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9O
XzEKKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5kaWYKKwogI2luY2x1
ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdT
dHJlYW1lcjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6
SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBt
X2ltYWdlKDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBz
KiBjYXBzID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOwogICAgIEdzdFZpZGVvRm9ybWF0
IGZvcm1hdDsKLSAgICBpZiAoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9y
bWF0LCAmd2lkdGgsICZoZWlnaHQpKSB7Ci0gICAgICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgSW50U2l6ZSBzaXplOworICAgIGludCBwaXhl
bEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlk
ZTsKKyAgICB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLCBzaXplLCBm
b3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWlu
YXRvciwgc3RyaWRlKTsKIAotICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOworI2lmZGVmIEdTVF9B
UElfVkVSU0lPTl8xCisgICAgR3N0TWFwSW5mbyBtYXBJbmZvOworICAgIGdzdF9idWZmZXJfbWFw
KGJ1ZmZlciwgJm1hcEluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgdW5zaWduZWQgY2hhciogYnVm
ZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1hcEluZm8uZGF0YSk7
CisjZWxzZQorICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIGNoYXIqPihHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSk7CisjZW5kaWYKIAogICAg
IGNhaXJvX2Zvcm1hdF90IGNhaXJvRm9ybWF0OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVP
X0ZPUk1BVF9BUkdCIHx8IGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpCi0gICAgICAg
IGNhaXJvRm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsKLSAgICBlbHNlCi0gICAgICAgIGNh
aXJvRm9ybWF0ID0gQ0FJUk9fRk9STUFUX1JHQjI0OwotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBJbWFnZUdTdHJlYW1lcihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGNhaXJvRm9y
bWF0KSk7Ci19CisjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorICAgIGNhaXJv
Rm9ybWF0ID0gKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpID8gQ0FJUk9fRk9STUFU
X0FSR0IzMiA6IENBSVJPX0ZPUk1BVF9SR0IyNDsKKyNlbHNlCisgICAgY2Fpcm9Gb3JtYXQgPSAo
Zm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQVJHQikgPyBDQUlST19GT1JNQVRfQVJHQjMyIDog
Q0FJUk9fRk9STUFUX1JHQjI0OworI2VuZGlmCiAKLUltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJl
YW1lcihHc3RCdWZmZXIqJiBidWZmZXIsIEludFNpemUgc2l6ZSwgY2Fpcm9fZm9ybWF0X3QmIGNh
aXJvRm9ybWF0KQotICAgIDogbV9pbWFnZSgwKQotewotICAgIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKEdTVF9CVUZGRVJfREFU
QShidWZmZXIpLCBjYWlyb0Zvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9fZm9ybWF0
X3N0cmlkZV9mb3Jfd2lkdGgoY2Fpcm9Gb3JtYXQsIHNpemUud2lkdGgoKSkpOworICAgIGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KGJ1ZmZlckRhdGEsIGNhaXJvRm9ybWF0LCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIHN0
cmlkZSk7CiAgICAgQVNTRVJUKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpID09IENBSVJP
X1NUQVRVU19TVUNDRVNTKTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJm
YWNlKTsKKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9Dcm9wTWV0YSog
Y3JvcE1ldGEgPSBnc3RfYnVmZmVyX2dldF92aWRlb19jcm9wX21ldGEoYnVmZmVyKTsKKyAgICBp
ZiAoY3JvcE1ldGEpCisgICAgICAgIHNldENyb3BSZWN0KEZsb2F0UmVjdChjcm9wTWV0YS0+eCwg
Y3JvcE1ldGEtPnksIGNyb3BNZXRhLT53aWR0aCwgY3JvcE1ldGEtPmhlaWdodCkpOworCisgICAg
Z3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZtYXBJbmZvKTsKKyNlbmRpZgogfQogCiBJbWFnZUdT
dHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcApp
bmRleCAzNmIwODA2Li5iMzU0OTE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwCkBA
IC0yMSwzOSArMjEsNDkgQEAKICNpbmNsdWRlICJJbWFnZUdTdHJlYW1lci5oIgogCiAjaWYgRU5B
QkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNs
dWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KKworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5j
bHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvbWV0YS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HT3duUHRyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gSW1hZ2VHU3RyZWFtZXI6
OmNyZWF0ZUltYWdlKEdzdEJ1ZmZlciogYnVmZmVyKQorSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0
cmVhbWVyKEdzdEJ1ZmZlciogYnVmZmVyLCBHc3RDYXBzKiBjYXBzKQorICAgIDogbV9pbWFnZSgw
KQogewotICAgIGludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7Ci0gICAgR3N0Q2FwcyogY2FwcyA9
IGdzdF9idWZmZXJfZ2V0X2NhcHMoYnVmZmVyKTsKKyAgICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3
IFFQaXhtYXA7CiAgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVv
X2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZmb3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAg
ICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot
ICAgIGdzdF9jYXBzX3VucmVmKGNhcHMpOworICAgIEludFNpemUgc2l6ZTsKKyAgICBpbnQgcGl4
ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJp
ZGU7CisgICAgd2Via2l0R2V0VmlkZW9TaXplQW5kRm9ybWF0RnJvbUNhcHMoY2Fwcywgc2l6ZSwg
Zm9ybWF0LCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21p
bmF0b3IsIHN0cmlkZSk7CiAKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIEdzdE1hcElu
Zm8gaW5mbzsKKyAgICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZpbmZvLCBHU1RfTUFQX1JFQUQp
OworICAgIHVjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1Y2hhcio+KGluZm8u
ZGF0YSk7CisjZWxzZQorICAgIHVjaGFyKiBidWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
Y2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyNlbmRpZgogICAgIFFJbWFnZTo6Rm9y
bWF0IGltYWdlRm9ybWF0OwotICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9SR0Ip
Ci0gICAgICAgIGltYWdlRm9ybWF0ID0gUUltYWdlOjpGb3JtYXRfUkdCODg4OwotICAgIGVsc2UK
LSAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0IzMjsKKyNpZiBHX0JZVEVf
T1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgaW1hZ2VGb3JtYXQgPSAoZm9ybWF0ID09IEdT
VF9WSURFT19GT1JNQVRfQkdSQSkgPyBRSW1hZ2U6OkZvcm1hdF9SR0IzMiA6IFFJbWFnZTo6Rm9y
bWF0X1JHQjg4ODsKKyNlbHNlCisgICAgaW1hZ2VGb3JtYXQgPSAoZm9ybWF0ID09IEdTVF9WSURF
T19GT1JNQVRfQVJHQikgPyBRSW1hZ2U6OkZvcm1hdF9BUkdCMzIgOiBRSW1hZ2U6OkZvcm1hdF9S
R0I4ODg7CisjZW5kaWYKIAotICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIo
YnVmZmVyLCBJbnRTaXplKHdpZHRoLCBoZWlnaHQpLCBpbWFnZUZvcm1hdCkpOwotfQorICAgIFFJ
bWFnZSBpbWFnZShidWZmZXJEYXRhLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGltYWdl
Rm9ybWF0KTsKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKEdzdEJ1ZmZlciomIGJ1
ZmZlciwgSW50U2l6ZSBzaXplLCBRSW1hZ2U6OkZvcm1hdCBpbWFnZUZvcm1hdCkKLSAgICA6IG1f
aW1hZ2UoMCkKLXsKLSAgICBRUGl4bWFwKiBzdXJmYWNlID0gbmV3IFFQaXhtYXA7Ci0gICAgUUlt
YWdlIGltYWdlKEdTVF9CVUZGRVJfREFUQShidWZmZXIpLCBzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCksIGltYWdlRm9ybWF0KTsKICAgICBzdXJmYWNlLT5jb252ZXJ0RnJvbUltYWdlKGltYWdl
KTsKICAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZShzdXJmYWNlKTsKKworI2lmZGVm
IEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIsICZpbmZvKTsK
KyNlbmRpZgogfQogCiBJbWFnZUdTdHJlYW1lcjo6fkltYWdlR1N0cmVhbWVyKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggODM5NzA4ZS4u
OTE5OWFkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1l
ci5jcHAKQEAgLTI1NCwxMCArMjU0LDEyIEBAIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6
fk1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcigpCiAgICAgICAgIG1fbWVkaWFMb2NhdGlvbnMg
PSAwOwogICAgIH0KIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIGlmIChtX3ZpZGVv
U2lua0JpbikgewogICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKG1fdmlkZW9TaW5rQmluKTsKICAg
ICAgICAgbV92aWRlb1NpbmtCaW4gPSAwOwogICAgIH0KKyNlbmRpZgogCiAgICAgaWYgKG1fcGxh
eUJpbikgewogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9wbGF5QmluLCBHU1RfU1RB
VEVfTlVMTCk7CkBAIC00OTcsOSArNDk5LDEwIEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNvbnN0CiAgICAgaWYgKCFjYXBzKQogICAgICAgICBy
ZXR1cm4gSW50U2l6ZSgpOwogCi0gICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBp
eGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcjsKKyAgICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVy
YXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBzdHJpZGU7CiAgICAgaW50IGRpc3Bs
YXlXaWR0aCwgZGlzcGxheUhlaWdodCwgZGlzcGxheUFzcGVjdFJhdGlvR0NEOwotICAgIGludCBv
cmlnaW5hbFdpZHRoID0gMCwgb3JpZ2luYWxIZWlnaHQgPSAwOworICAgIEludFNpemUgb3JpZ2lu
YWxTaXplOworICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKIAogICAgIC8vIFRPRE86IGhhbmRs
ZSBwb3NzaWJsZSBjbGVhbiBhcGVydHVyZSBkYXRhLiBTZWUKICAgICAvLyBodHRwczovL2J1Z3pp
bGxhLmdub21lLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTk2NTcxCkBAIC01MDgsMzAgKzUxMSwxNSBA
QCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUoKSBjb25z
dAogCiAgICAgLy8gR2V0IHRoZSB2aWRlbyBQQVIgYW5kIG9yaWdpbmFsIHNpemUsIGlmIHRoaXMg
ZmFpbHMgdGhlCiAgICAgLy8gdmlkZW8tc2luayBoYXMgbGlrZWx5IG5vdCB5ZXQgbmVnb3RpYXRl
ZCBpdHMgY2Fwcy4KLSNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgIEdzdFZpZGVvSW5mbyBp
bmZvOwotICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJvbV9jYXBzKCZpbmZvLCBjYXBzKSkKLSAg
ICAgICAgcmV0dXJuIEludFNpemUoKTsKLQotICAgIG9yaWdpbmFsV2lkdGggPSBHU1RfVklERU9f
SU5GT19XSURUSCgmaW5mbyk7Ci0gICAgb3JpZ2luYWxIZWlnaHQgPSBHU1RfVklERU9fSU5GT19I
RUlHSFQoJmluZm8pOwotICAgIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IgPSBHU1RfVklERU9f
SU5GT19QQVJfTigmaW5mbyk7Ci0gICAgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yID0gR1NU
X1ZJREVPX0lORk9fUEFSX0QoJmluZm8pOwotI2Vsc2UKLSAgICAvLyBHZXQgdGhlIHZpZGVvIFBB
UiBhbmQgb3JpZ2luYWwgc2l6ZS4KLSAgICBpZiAoIUdTVF9JU19DQVBTKGNhcHMpIHx8ICFnc3Rf
Y2Fwc19pc19maXhlZChjYXBzKQotICAgICAgICB8fCAhZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9j
YXBzKGNhcHMsIDAsICZvcmlnaW5hbFdpZHRoLCAmb3JpZ2luYWxIZWlnaHQpCi0gICAgICAgIHx8
ICFnc3RfdmlkZW9fcGFyc2VfY2Fwc19waXhlbF9hc3BlY3RfcmF0aW8oY2FwcywgJnBpeGVsQXNw
ZWN0UmF0aW9OdW1lcmF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJnBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvcikpCisgICAgaWYgKCF3
ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLCBvcmlnaW5hbFNpemUsIGZv
cm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5h
dG9yLCBzdHJpZGUpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotI2VuZGlmCiAKLSAgICBM
T0dfVkVSQk9TRShNZWRpYSwgIk9yaWdpbmFsIHZpZGVvIHNpemU6ICVkeCVkIiwgb3JpZ2luYWxX
aWR0aCwgb3JpZ2luYWxIZWlnaHQpOworICAgIExPR19WRVJCT1NFKE1lZGlhLCAiT3JpZ2luYWwg
dmlkZW8gc2l6ZTogJWR4JWQiLCBvcmlnaW5hbFNpemUud2lkdGgoKSwgb3JpZ2luYWxTaXplLmhl
aWdodCgpKTsKICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIlBpeGVsIGFzcGVjdCByYXRpbzogJWQv
JWQiLCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0
b3IpOwogCiAgICAgLy8gQ2FsY3VsYXRlIERBUiBiYXNlZCBvbiBQQVIgYW5kIHZpZGVvIHNpemUu
Ci0gICAgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxXaWR0aCAqIHBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3I7Ci0gICAgZGlzcGxheUhlaWdodCA9IG9yaWdpbmFsSGVpZ2h0ICogcGl4ZWxBc3BlY3RS
YXRpb0Rlbm9taW5hdG9yOworICAgIGRpc3BsYXlXaWR0aCA9IG9yaWdpbmFsU2l6ZS53aWR0aCgp
ICogcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvcjsKKyAgICBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2lu
YWxTaXplLmhlaWdodCgpICogcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOwogCiAgICAgLy8g
RGl2aWRlIGRpc3BsYXkgd2lkdGggYW5kIGhlaWdodCBieSB0aGVpciBHQ0QgdG8gYXZvaWQgcG9z
c2libGUgb3ZlcmZsb3dzLgogICAgIGRpc3BsYXlBc3BlY3RSYXRpb0dDRCA9IGdyZWF0ZXN0Q29t
bW9uRGl2aXNvcihkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwpAQCAtNTQwLDE4ICs1Mjgs
MTggQEAgSW50U2l6ZSBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkg
Y29uc3QKIAogICAgIC8vIEFwcGx5IERBUiB0byBvcmlnaW5hbCB2aWRlbyBzaXplLiBUaGlzIGlz
IHRoZSBzYW1lIGJlaGF2aW9yIGFzIGluIHh2aW1hZ2VzaW5rJ3Mgc2V0Y2FwcyBmdW5jdGlvbi4K
ICAgICBndWludDY0IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBpZiAoIShvcmlnaW5hbEhl
aWdodCAlIGRpc3BsYXlIZWlnaHQpKSB7CisgICAgaWYgKCEob3JpZ2luYWxTaXplLmhlaWdodCgp
ICUgZGlzcGxheUhlaWdodCkpIHsKICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJLZWVwaW5n
IHZpZGVvIG9yaWdpbmFsIGhlaWdodCIpOwotICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2
NF9zY2FsZV9pbnQob3JpZ2luYWxIZWlnaHQsIGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7
Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9yaWdpbmFsSGVpZ2h0KTsK
LSAgICB9IGVsc2UgaWYgKCEob3JpZ2luYWxXaWR0aCAlIGRpc3BsYXlXaWR0aCkpIHsKKyAgICAg
ICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsU2l6ZS5oZWlnaHQo
KSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAgICAgICAgaGVpZ2h0ID0gc3RhdGlj
X2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgpKTsKKyAgICB9IGVsc2UgaWYgKCEo
b3JpZ2luYWxTaXplLndpZHRoKCkgJSBkaXNwbGF5V2lkdGgpKSB7CiAgICAgICAgIExPR19WRVJC
T1NFKE1lZGlhLCAiS2VlcGluZyB2aWRlbyBvcmlnaW5hbCB3aWR0aCIpOwotICAgICAgICBoZWln
aHQgPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50KG9yaWdpbmFsV2lkdGgsIGRpc3BsYXlIZWln
aHQsIGRpc3BsYXlXaWR0aCk7Ci0gICAgICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4o
b3JpZ2luYWxXaWR0aCk7CisgICAgICAgIGhlaWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9p
bnQob3JpZ2luYWxTaXplLndpZHRoKCksIGRpc3BsYXlIZWlnaHQsIGRpc3BsYXlXaWR0aCk7Cisg
ICAgICAgIHdpZHRoID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLndpZHRoKCkp
OwogICAgIH0gZWxzZSB7CiAgICAgICAgIExPR19WRVJCT1NFKE1lZGlhLCAiQXBwcm94aW1hdGlu
ZyB3aGlsZSBrZWVwaW5nIG9yaWdpbmFsIHZpZGVvIGhlaWdodCIpOwotICAgICAgICB3aWR0aCA9
IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxIZWlnaHQsIGRpc3BsYXlXaWR0aCwg
ZGlzcGxheUhlaWdodCk7Ci0gICAgICAgIGhlaWdodCA9IHN0YXRpY19jYXN0PGd1aW50NjQ+KG9y
aWdpbmFsSGVpZ2h0KTsKKyAgICAgICAgd2lkdGggPSBnc3RfdXRpbF91aW50NjRfc2NhbGVfaW50
KG9yaWdpbmFsU2l6ZS5oZWlnaHQoKSwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0KTsKKyAg
ICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxTaXplLmhlaWdodCgp
KTsKICAgICB9CiAKICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIk5hdHVyYWwgc2l6ZTogJSIgR19H
VUlOVDY0X0ZPUk1BVCAieCUiIEdfR1VJTlQ2NF9GT1JNQVQsIHdpZHRoLCBoZWlnaHQpOwpAQCAt
OTU3LDcgKzk0NSw3IEBAIHVuc2lnbmVkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dG90
YWxCeXRlcygpIGNvbnN0CiAgICAgYm9vbCBkb25lID0gZmFsc2U7CiAgICAgd2hpbGUgKCFkb25l
KSB7CiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAgICAgR1ZhbHVlIGl0ZW0gPSB7MCwg
fTsKKyAgICAgICAgR1ZhbHVlIGl0ZW0gPSBHX1ZBTFVFX0lOSVQ7CiAgICAgICAgIHN3aXRjaCAo
Z3N0X2l0ZXJhdG9yX25leHQoaXRlciwgJml0ZW0pKSB7CiAgICAgICAgIGNhc2UgR1NUX0lURVJB
VE9SX09LOiB7CiAgICAgICAgICAgICBHc3RQYWQqIHBhZCA9IHN0YXRpY19jYXN0PEdzdFBhZCo+
KGdfdmFsdWVfZ2V0X29iamVjdCgmaXRlbSkpOwpAQCAtMTQ4MSwxNyArMTQ2OSwyMCBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JgogICAgIGlmICghbV9idWZmZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2UgPSBJbWFnZUdTdHJlYW1lcjo6
Y3JlYXRlSW1hZ2UobV9idWZmZXIpOworICAgIEdzdENhcHMqIGNhcHMgPSB3ZWJraXRHc3RFbGVt
ZW50R2V0UGFkQ2FwcyhtX3dlYmtpdFZpZGVvU2luaywgInNpbmsiKTsKKyAgICBpZiAoIWNhcHMp
CisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbWFnZUdTdHJlYW1lcj4gZ3N0SW1hZ2Ug
PSBJbWFnZUdTdHJlYW1lcjo6Y3JlYXRlSW1hZ2UobV9idWZmZXIsIGNhcHMpOwogICAgIGlmICgh
Z3N0SW1hZ2UpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnRleHQtPmRyYXdJbWFnZShyZWlu
dGVycHJldF9jYXN0PEltYWdlKj4oZ3N0SW1hZ2UtPmltYWdlKCkuZ2V0KCkpLCBDb2xvclNwYWNl
U1JHQiwKLSAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgQ29tcG9zaXRlQ29weSwgRG9Ob3RS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICBy
ZWN0LCBnc3RJbWFnZS0+cmVjdCgpLCBDb21wb3NpdGVDb3B5LCBEb05vdFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyBIYXNoU2V0PFN0cmluZz4gbWltZVR5cGVD
YWNoZSgpCiB7Ci0KICAgICBpbml0aWFsaXplR1N0cmVhbWVyQW5kUmVnaXN0ZXJXZWJLaXRFbGVt
ZW50cygpOwogCiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFN0cmluZz4sIGNhY2hl
LCAoKSk7CkBAIC0xNjczLDcgKzE2NjQsMTEgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6OmNyZWF0ZUdTVFBsYXlCaW4oKQogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5Qmlu
LCAidmlkZW8tY2hhbmdlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlVmlkZW9DaGFu
Z2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fcGxheUJpbiwgImF1
ZGlvLWNoYW5nZWQiLCBHX0NBTExCQUNLKG1lZGlhUGxheWVyUHJpdmF0ZUF1ZGlvQ2hhbmdlZENh
bGxiYWNrKSwgdGhpcyk7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICBtX3dlYmtp
dFZpZGVvU2luayA9IHdlYmtpdFZpZGVvU2lua05ldyhtX2dzdEdXb3JsZC5nZXQoKSk7CisjZWxz
ZQorICAgIG1fd2Via2l0VmlkZW9TaW5rID0gd2Via2l0VmlkZW9TaW5rTmV3KCk7CisjZW5kaWYK
IAogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRlb1NpbmssICJyZXBhaW50LXJlcXVl
c3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlUmVwYWludENhbGxiYWNrKSwgdGhp
cyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKaW5kZXggMTM4OWI2OS4uMjAx
MzFjYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAKQEAgLTI5LDE1ICsyOSwy
OSBAQAogI2lmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiVmlkZW9TaW5rR1N0cmVhbWVyLmgi
CiAKKyNpbmNsdWRlICJHU3RyZWFtZXJWZXJzaW9uaW5nLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5o
IgogI2luY2x1ZGUgPGdsaWIuaD4KICNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaWZkZWYgR1NUX0FQ
SV9WRVJTSU9OXzEKKyNpbmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjaW5jbHVk
ZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvcG9vbC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8d3RmL0Zhc3RB
bGxvY0Jhc2UuaD4KIAogLy8gQ0FJUk9fRk9STUFUX1JHQjI0IHVzZWQgdG8gcmVuZGVyIHRoZSB2
aWRlbyBidWZmZXJzIGlzIGxpdHRsZS9iaWcgZW5kaWFuIGRlcGVuZGFudC4KICNpZiBHX0JZVEVf
T1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAjZGVm
aW5lIFdFQktJVF9WSURFT19TSU5LX1BBRF9DQVBTIEdTVF9WSURFT19DQVBTX0JHUnggIjsiIEdT
VF9WSURFT19DQVBTX0JHUkEKICNlbHNlCisjZGVmaW5lIFdFQktJVF9WSURFT19TSU5LX1BBRF9D
QVBTIEdTVF9WSURFT19DQVBTX01BS0UoInsgQkdSeCwgQkdSQSB9IikKKyNlbmRpZgorI2Vsc2UK
KyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJTktfUEFE
X0NBUFMgR1NUX1ZJREVPX0NBUFNfeFJHQiAiOyIgR1NUX1ZJREVPX0NBUFNfQVJHQgorI2Vsc2UK
KyNkZWZpbmUgV0VCS0lUX1ZJREVPX1NJTktfUEFEX0NBUFMgR1NUX1ZJREVPX0NBUFNfTUFLRSgi
eyB4UkdCLCBBUkdCIH0iKQorI2VuZGlmCiAjZW5kaWYKIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1w
bGF0ZSBzX3NpbmtUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzaW5rIiwgR1NU
X1BBRF9TSU5LLCBHU1RfUEFEX0FMV0FZUywgR1NUX1NUQVRJQ19DQVBTKFdFQktJVF9WSURFT19T
SU5LX1BBRF9DQVBTKSk7CiAKQEAgLTYyLDcgKzc2LDEzIEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9T
aW5rUHJpdmF0ZSB7CiAgICAgR011dGV4KiBidWZmZXJNdXRleDsKICAgICBHQ29uZCogZGF0YUNv
bmRpdGlvbjsKIAorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0VmlkZW9JbmZvIGlu
Zm87CisjZW5kaWYKKworI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIFdlYkNvcmU6OkdT
dHJlYW1lckdXb3JsZCogZ3N0R1dvcmxkOworI2VuZGlmCiAKICAgICAvLyBJZiB0aGlzIGlzIFRS
VUUgYWxsIHByb2Nlc3Npbmcgc2hvdWxkIGZpbmlzaCBBU0FQCiAgICAgLy8gVGhpcyBpcyBuZWNl
c3NhcnkgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBhIHJhY2UgYmV0d2VlbgpAQCAtOTEsNiArMTEx
LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2luaXQoV2ViS2l0VmlkZW9TaW5r
KiBzaW5rKQogICAgIHNpbmstPnByaXYtPmRhdGFDb25kaXRpb24gPSBnX2NvbmRfbmV3KCk7CiAg
ICAgc2luay0+cHJpdi0+YnVmZmVyTXV0ZXggPSBnX211dGV4X25ldygpOwogI2VuZGlmCisKKyNp
ZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF92aWRlb19pbmZvX2luaXQoJnNpbmstPnBy
aXYtPmluZm8pOworI2VuZGlmCiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRWaWRlb1NpbmtU
aW1lb3V0Q2FsbGJhY2soZ3BvaW50ZXIgZGF0YSkKQEAgLTEyOSwxNSArMTUzLDE4IEBAIHN0YXRp
YyBHc3RGbG93UmV0dXJuIHdlYmtpdFZpZGVvU2lua1JlbmRlcihHc3RCYXNlU2luayogYmFzZVNp
bmssIEdzdEJ1ZmZlciogYnVmCiAgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKICAgICB9CiAK
KyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAvLyBJZ25vcmUgYnVmZmVycyBpZiB0aGUg
dmlkZW8gaXMgYWxyZWFkeSBpbiBmdWxsc2NyZWVuIHVzaW5nCiAgICAgLy8gYW5vdGhlciBzaW5r
LgogICAgIGlmIChwcml2LT5nc3RHV29ybGQtPmlzRnVsbHNjcmVlbigpKSB7CiAgICAgICAgIGdf
bXV0ZXhfdW5sb2NrKHByaXYtPmJ1ZmZlck11dGV4KTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X09LOwogICAgIH0KKyNlbmRpZgogCiAgICAgcHJpdi0+YnVmZmVyID0gZ3N0X2J1ZmZlcl9yZWYo
YnVmZmVyKTsKIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIC8vIEZvciB0aGUgdW5s
aWtlbHkgY2FzZSB3aGVyZSB0aGUgYnVmZmVyIGhhcyBubyBjYXBzLCB0aGUgY2FwcwogICAgIC8v
IGFyZSBpbXBsaWNpdGVseSB0aGUgY2FwcyBvZiB0aGUgcGFkLiBUaGlzIHNob3VsZG4ndCBoYXBw
ZW4uCiAgICAgaWYgKFVOTElLRUxZKCFHU1RfQlVGRkVSX0NBUFMoYnVmZmVyKSkpIHsKQEAgLTE0
NiwxNCArMTczLDI2IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdFZpZGVvU2lua1JlbmRl
cihHc3RCYXNlU2luayogYmFzZVNpbmssIEdzdEJ1ZmZlciogYnVmCiAgICAgfQogCiAgICAgR3N0
Q2FwcyogY2FwcyA9IEdTVF9CVUZGRVJfQ0FQUyhidWZmZXIpOworI2Vsc2UKKyAgICBHc3RDYXBz
KiBjYXBzID0gZ3N0X3ZpZGVvX2luZm9fdG9fY2FwcygmcHJpdi0+aW5mbyk7CisjZW5kaWYKKwog
ICAgIEdzdFZpZGVvRm9ybWF0IGZvcm1hdDsKLSAgICBpbnQgd2lkdGgsIGhlaWdodDsKLSAgICBp
ZiAoVU5MSUtFTFkoIWdzdF92aWRlb19mb3JtYXRfcGFyc2VfY2FwcyhjYXBzLCAmZm9ybWF0LCAm
d2lkdGgsICZoZWlnaHQpKSkgeworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZTsKKyAgICBpbnQg
cGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBz
dHJpZGU7CisgICAgaWYgKCF3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBz
LCBzaXplLCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0
aW9EZW5vbWluYXRvciwgc3RyaWRlKSkgewogICAgICAgICBnc3RfYnVmZmVyX3VucmVmKGJ1ZmZl
cik7CisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fw
cyk7CisjZW5kaWYKICAgICAgICAgZ19tdXRleF91bmxvY2socHJpdi0+YnVmZmVyTXV0ZXgpOwog
ICAgICAgICByZXR1cm4gR1NUX0ZMT1dfRVJST1I7CiAgICAgfQogCisjaWZkZWYgR1NUX0FQSV9W
RVJTSU9OXzEKKyAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKKyNlbmRpZgorCiAgICAgLy8gQ2Fp
cm8ncyBBUkdCIGhhcyBwcmUtbXVsdGlwbGllZCBhbHBoYSB3aGlsZSBHU3RyZWFtZXIncyBkb2Vz
bid0LgogICAgIC8vIEhlcmUgd2UgY29udmVydCB0byBDYWlybydzIEFSR0IuCiAgICAgaWYgKGZv
cm1hdCA9PSBHU1RfVklERU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19GT1JN
QVRfQkdSQSkgewpAQCAtMTYyLDcgKzIwMSw3IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtp
dFZpZGVvU2lua1JlbmRlcihHc3RCYXNlU2luayogYmFzZVNpbmssIEdzdEJ1ZmZlciogYnVmCiAg
ICAgICAgIC8vIFRoZSBidWZmZXIgY29udGVudCBzaG91bGQgbm90IGJlIGNoYW5nZWQgaGVyZSBi
ZWNhdXNlIHRoZSBzYW1lIGJ1ZmZlcgogICAgICAgICAvLyBjb3VsZCBiZSBwYXNzZWQgbXVsdGlw
bGUgdGltZXMgdG8gdGhpcyBtZXRob2QgKGluIHRoZW9yeSkuCiAKLSAgICAgICAgR3N0QnVmZmVy
KiBuZXdCdWZmZXIgPSBnc3RfYnVmZmVyX3RyeV9uZXdfYW5kX2FsbG9jKEdTVF9CVUZGRVJfU0la
RShidWZmZXIpKTsKKyAgICAgICAgR3N0QnVmZmVyKiBuZXdCdWZmZXIgPSB3ZWJraXRHc3RDcmVh
dGVCdWZmZXIoYnVmZmVyKTsKIAogICAgICAgICAvLyBDaGVjayBpZiBhbGxvY2F0aW9uIGZhaWxl
ZC4KICAgICAgICAgaWYgKFVOTElLRUxZKCFuZXdCdWZmZXIpKSB7CkBAIC0xNzAsMTcgKzIwOSwy
NCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRWaWRlb1NpbmtSZW5kZXIoR3N0QmFzZVNp
bmsqIGJhc2VTaW5rLCBHc3RCdWZmZXIqIGJ1ZgogICAgICAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhKG5l
d0J1ZmZlciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZG
RVJfQ09QWV9BTEwpKTsKLQogICAgICAgICAvLyBXZSBkb24ndCB1c2UgQ29sb3I6OnByZW11bHRp
cGxpZWRBUkdCRnJvbUNvbG9yKCkgaGVyZSBiZWNhdXNlCiAgICAgICAgIC8vIG9uZSBmdW5jdGlv
biBjYWxsIHBlciB2aWRlbyBwaXhlbCBpcyBqdXN0IHRvbyBleHBlbnNpdmU6CiAgICAgICAgIC8v
IEZvciA3MjBwL1BBTCBmb3IgZXhhbXBsZSB0aGlzIG1lYW5zIDEyODAqNzIwKjI1PTIzMDQwMDAw
CiAgICAgICAgIC8vIGZ1bmN0aW9uIGNhbGxzIHBlciBzZWNvbmQhCisjaWZuZGVmIEdTVF9BUElf
VkVSU0lPTl8xCiAgICAgICAgIGNvbnN0IGd1aW50OCogc291cmNlID0gR1NUX0JVRkZFUl9EQVRB
KGJ1ZmZlcik7CiAgICAgICAgIGd1aW50OCogZGVzdGluYXRpb24gPSBHU1RfQlVGRkVSX0RBVEEo
bmV3QnVmZmVyKTsKKyNlbHNlCisgICAgICAgIEdzdE1hcEluZm8gc291cmNlSW5mbzsKKyAgICAg
ICAgR3N0TWFwSW5mbyBkZXN0aW5hdGlvbkluZm87CisgICAgICAgIGdzdF9idWZmZXJfbWFwKGJ1
ZmZlciwgJnNvdXJjZUluZm8sIEdTVF9NQVBfUkVBRCk7CisgICAgICAgIGNvbnN0IGd1aW50OCog
c291cmNlID0gY29uc3RfY2FzdDxndWludDgqPihzb3VyY2VJbmZvLmRhdGEpOworICAgICAgICBn
c3RfYnVmZmVyX21hcChuZXdCdWZmZXIsICZkZXN0aW5hdGlvbkluZm8sIEdTVF9NQVBfV1JJVEUp
OworICAgICAgICBndWludDgqIGRlc3RpbmF0aW9uID0gc3RhdGljX2Nhc3Q8Z3VpbnQ4Kj4oZGVz
dGluYXRpb25JbmZvLmRhdGEpOworI2VuZGlmCiAKLSAgICAgICAgZm9yIChpbnQgeCA9IDA7IHgg
PCBoZWlnaHQ7IHgrKykgewotICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCB3aWR0aDsg
eSsrKSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgc2l6ZS5oZWlnaHQoKTsgeCsrKSB7
CisgICAgICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHNpemUud2lkdGgoKTsgeSsrKSB7CiAj
aWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgogICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHNob3J0IGFscGhhID0gc291cmNlWzNdOwogICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9u
WzBdID0gKHNvdXJjZVswXSAqIGFscGhhICsgMTI4KSAvIDI1NTsKQEAgLTE5OSw2ICsyNDUsMTAg
QEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0VmlkZW9TaW5rUmVuZGVyKEdzdEJhc2VTaW5r
KiBiYXNlU2luaywgR3N0QnVmZmVyKiBidWYKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisj
aWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChidWZmZXIs
ICZzb3VyY2VJbmZvKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl91bm1hcChuZXdCdWZmZXIsICZkZXN0
aW5hdGlvbkluZm8pOworI2VuZGlmCiAgICAgICAgIGdzdF9idWZmZXJfdW5yZWYoYnVmZmVyKTsK
ICAgICAgICAgYnVmZmVyID0gcHJpdi0+YnVmZmVyID0gbmV3QnVmZmVyOwogICAgIH0KQEAgLTI5
Myw2ICszNDMsMjcgQEAgc3RhdGljIGdib29sZWFuIHdlYmtpdFZpZGVvU2lua1N0YXJ0KEdzdEJh
c2VTaW5rKiBiYXNlU2luaykKICAgICByZXR1cm4gVFJVRTsKIH0KIAorI2lmZGVmIEdTVF9BUElf
VkVSU0lPTl8xCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0VmlkZW9TaW5rUHJvcG9zZUFsbG9jYXRp
b24oR3N0QmFzZVNpbmsqIGJhc2VTaW5rLCBHc3RRdWVyeSogcXVlcnkpCit7CisgICAgV2ViS2l0
VmlkZW9TaW5rKiBzaW5rID0gV0VCS0lUX1ZJREVPX1NJTksoYmFzZVNpbmspOworICAgIEdzdENh
cHMqIGNhcHM7CisKKyAgICBnc3RfcXVlcnlfcGFyc2VfYWxsb2NhdGlvbihxdWVyeSwgJmNhcHMs
IDApOworCisgICAgaWYgKCFjYXBzKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBpZiAo
IWdzdF92aWRlb19pbmZvX2Zyb21fY2Fwcygmc2luay0+cHJpdi0+aW5mbywgY2FwcykpCisgICAg
ICAgIHJldHVybiBGQUxTRTsKKworICAgIGdzdF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhKHF1
ZXJ5LCBHU1RfVklERU9fTUVUQV9BUElfVFlQRSk7CisgICAgZ3N0X3F1ZXJ5X2FkZF9hbGxvY2F0
aW9uX21ldGEocXVlcnksIEdTVF9WSURFT19DUk9QX01FVEFfQVBJX1RZUEUpOworICAgIHJldHVy
biBUUlVFOworfQorI2VuZGlmCisKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIHN0YXRpYyB2
b2lkIHdlYmtpdFZpZGVvU2lua01hcnNoYWxWb2lkQW5kTWluaU9iamVjdChHQ2xvc3VyZSogY2xv
c3VyZSwgR1ZhbHVlKiByZXR1cm5WYWx1ZSwgZ3VpbnQgcGFyYW1ldGVyc051bWJlciwgY29uc3Qg
R1ZhbHVlKiBwYXJhbWV0ZXJWYWx1ZXMsIGdwb2ludGVyIGludm9jYXRpb25IaW50LCBncG9pbnRl
ciBtYXJzaGFsRGF0YSkKIHsKICAgICB0eXBlZGVmIHZvaWQgKCptYXJzaGFsZnVuY19WT0lEX19N
SU5JT0JKRUNUKSAoZ3BvaW50ZXIgb2JqLCBncG9pbnRlciBhcmcxLCBncG9pbnRlciBkYXRhMik7
CkBAIC0zMTMsNiArMzg0LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0VmlkZW9TaW5rTWFyc2hhbFZv
aWRBbmRNaW5pT2JqZWN0KEdDbG9zdXJlKiBjbG9zdXJlLCBHVmFsdWUqIHIKICAgICBjYWxsYmFj
ayA9IChtYXJzaGFsZnVuY19WT0lEX19NSU5JT0JKRUNUKSAobWFyc2hhbERhdGEgPyBtYXJzaGFs
RGF0YSA6IGNjbG9zdXJlLT5jYWxsYmFjayk7CiAgICAgY2FsbGJhY2soZGF0YTEsIGdzdF92YWx1
ZV9nZXRfbWluaV9vYmplY3QocGFyYW1ldGVyVmFsdWVzICsgMSksIGRhdGEyKTsKIH0KKyNlbmRp
ZgogCiBzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZpZGVv
U2lua0NsYXNzKiBrbGFzcykKIHsKQEAgLTMyMSw3ICszOTMsMTEgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCiAg
ICAgR3N0RWxlbWVudENsYXNzKiBlbGVtZW50Q2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhrbGFz
cyk7CiAKICAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVsZW1lbnRDbGFz
cywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzX3NpbmtUZW1wbGF0ZSkpOworI2lmZGVm
IEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X21ldGFkYXRhKGVs
ZW1lbnRDbGFzcywKKyNlbHNlCiAgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNfc2lt
cGxlKGVsZW1lbnRDbGFzcywKKyNlbmRpZgogICAgICAgICAgICAgIldlYktpdCB2aWRlbyBzaW5r
IiwKICAgICAgICAgICAgICJTaW5rL1ZpZGVvIiwgIlNlbmRzIHZpZGVvIGRhdGEgZnJvbSBhIEdT
dHJlYW1lciBwaXBlbGluZSB0byBhIENhaXJvIHN1cmZhY2UiLAogICAgICAgICAgICAgIkFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+Iik7CkBAIC0zMzYsNiArNDEyLDkgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3ZpZGVvX3NpbmtfY2xhc3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3Mp
CiAgICAgYmFzZVNpbmtDbGFzcy0+cHJlcm9sbCA9IHdlYmtpdFZpZGVvU2lua1JlbmRlcjsKICAg
ICBiYXNlU2lua0NsYXNzLT5zdG9wID0gd2Via2l0VmlkZW9TaW5rU3RvcDsKICAgICBiYXNlU2lu
a0NsYXNzLT5zdGFydCA9IHdlYmtpdFZpZGVvU2lua1N0YXJ0OworI2lmZGVmIEdTVF9BUElfVkVS
U0lPTl8xCisgICAgYmFzZVNpbmtDbGFzcy0+cHJvcG9zZV9hbGxvY2F0aW9uID0gd2Via2l0Vmlk
ZW9TaW5rUHJvcG9zZUFsbG9jYXRpb247CisjZW5kaWYKIAogICAgIHdlYmtpdFZpZGVvU2lua1Np
Z25hbHNbUkVQQUlOVF9SRVFVRVNURURdID0gZ19zaWduYWxfbmV3KCJyZXBhaW50LXJlcXVlc3Rl
ZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhrbGFzcyksCkBAIC0zNDMsMTggKzQy
MiwyOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19jbGFzc19pbml0KFdlYktpdFZp
ZGVvU2lua0NsYXNzKiBrbGFzcykKICAgICAgICAgICAgIDAsIC8vIENsYXNzIG9mZnNldAogICAg
ICAgICAgICAgMCwgLy8gQWNjdW11bGF0b3IKICAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxhdG9y
IGRhdGEKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKICAgICAgICAgICAgIHdlYmtpdFZpZGVv
U2lua01hcnNoYWxWb2lkQW5kTWluaU9iamVjdCwKKyNlbHNlCisgICAgICAgICAgICBnX2NjbG9z
dXJlX21hcnNoYWxfZ2VuZXJpYywgLy8gQ3VzdG9tIG1hcnNoYWxsZXIKKyNlbmRpZgogICAgICAg
ICAgICAgR19UWVBFX05PTkUsIC8vIFJldHVybiB0eXBlCiAgICAgICAgICAgICAxLCAvLyBPbmx5
IG9uZSBwYXJhbWV0ZXIKICAgICAgICAgICAgIEdTVF9UWVBFX0JVRkZFUik7CiB9CiAKIAorI2lm
bmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogR3N0RWxlbWVudCogd2Via2l0VmlkZW9TaW5rTmV3KFdl
YkNvcmU6OkdTdHJlYW1lckdXb3JsZCogZ3N0R1dvcmxkKQogewogICAgIEdzdEVsZW1lbnQqIGVs
ZW1lbnQgPSBHU1RfRUxFTUVOVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklERU9fU0lOSywg
MCkpOwogICAgIFdFQktJVF9WSURFT19TSU5LKGVsZW1lbnQpLT5wcml2LT5nc3RHV29ybGQgPSBn
c3RHV29ybGQ7CiAgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CisjZWxzZQorR3N0RWxlbWVudCogd2Vi
a2l0VmlkZW9TaW5rTmV3KCkKK3sKKyAgICByZXR1cm4gR1NUX0VMRU1FTlQoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1ZJREVPX1NJTkssIDApKTsKK30KKyNlbmRpZgogCiAjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuaAppbmRleCAzNDA1N2FhLi4w
NjFiNjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCkBAIC0yMiw3ICsyMiwxMCBA
QAogCiAjaWYgRU5BQkxFKFZJREVPKSAmJiBVU0UoR1NUUkVBTUVSKQogCisjaWZuZGVmIEdTVF9B
UElfVkVSU0lPTl8xCiAjaW5jbHVkZSAiR1N0cmVhbWVyR1dvcmxkLmgiCisjZW5kaWYKKwogI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZpZGVvc2luay5o
PgogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgpAQCAtNTgsNyArNjEsMTEgQEAgc3RydWN0
IF9XZWJLaXRWaWRlb1NpbmtDbGFzcyB7CiAKIEdUeXBlIHdlYmtpdF92aWRlb19zaW5rX2dldF90
eXBlKCkgR19HTlVDX0NPTlNUOwogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiBHc3RFbGVt
ZW50KiB3ZWJraXRWaWRlb1NpbmtOZXcoV2ViQ29yZTo6R1N0cmVhbWVyR1dvcmxkKik7CisjZWxz
ZQorR3N0RWxlbWVudCogd2Via2l0VmlkZW9TaW5rTmV3KCk7CisjZW5kaWYKIAogI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAKaW5kZXggZDFkOTE0Ny4uZjA0YzYwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTg1Niw3ICs4NTYsNyBAQCB2b2lkIFN0cmVh
bWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VSZXNwb25zZQogICAgICAgICBnc3RfdGFnX2xpc3RfZnJlZSh0YWdzKTsKICAgICBlbHNl
CiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKLSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdT
VF9QQURfQ0FTVChtX3NyYy0+cHJpdi0+c3JjcGFkKSwgZ3N0X2V2ZW50X25ld190YWcodGFncykp
OworICAgICAgICBnc3RfcGFkX3B1c2hfZXZlbnQoR1NUX1BBRF9DQVNUKG1fc3JjLT5wcml2LT5z
cmNwYWQpLCBnc3RfZXZlbnRfbmV3X3RhZygiV2ViS2l0V2ViU3JjIiwgdGFncykpOwogI2Vsc2UK
ICAgICAgICAgZ3N0X2VsZW1lbnRfZm91bmRfdGFnc19mb3JfcGFkKEdTVF9FTEVNRU5UKG1fc3Jj
KSwgbV9zcmMtPnByaXYtPnNyY3BhZCwgdGFncyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbmZp
Z3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBjODMwNjA5Li5iMDcxMDFlIDEwMDY0NAotLS0g
YS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0zNDgsNyArMzQ4LDcgQEAgQUNf
TVNHX1JFU1VMVChbJHdpdGhfZ3N0cmVhbWVyXSkKIAogR1NUUkVBTUVSXzBfMTBfUkVRVUlSRURf
VkVSU0lPTj0wLjEwCiBHU1RSRUFNRVJfMF8xMF9QTFVHSU5TX0JBU0VfUkVRVUlSRURfVkVSU0lP
Tj0wLjEwLjMwCi1HU1RSRUFNRVJfMV8wX1JFUVVJUkVEX1ZFUlNJT049MS4wCitHU1RSRUFNRVJf
MV8wX1JFUVVJUkVEX1ZFUlNJT049MC4xMS45MAogR1NUUkVBTUVSXzFfMF9QTFVHSU5TX0JBU0Vf
UkVRVUlSRURfVkVSU0lPTj0wLjExLjkwCiAKIGNhc2UgIiR3aXRoX2dzdHJlYW1lciIgaW4KLS0g
CjEuNy4xMA==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148244</attachid>
            <date>2012-06-18 22:05:45 -0700</date>
            <delta_ts>2012-06-18 22:34:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.patch</filename>
            <type>text/plain</type>
            <size>32472</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBiZGYzZjFkYWU2ZTI0ZjFkMjkxZmM5NTQ0OTk1ZTE1NTQzNjEzODRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBTYXQsIDkgSnVuIDIwMTIgMTE6NTQ6MzkgLTA3MDAKU3ViamVjdDogW1BBVENIXSBQ
YXRjaAoKLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgIDkgKysKIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAzNSArKysrKysrCiAuLi4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
clZlcnNpb25pbmcuY3BwICAgICB8ICAgNTAgKysrKysrKysrLQogLi4uL2dyYXBoaWNzL2dzdHJl
YW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmggICAgICAgfCAgIDEyICsrLQogLi4uL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oICAgfCAgIDM5ICsrKysrLS0tCiAu
Li4vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwICAgICB8ICAgNTUg
KysrKysrKy0tLS0KIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAg
ICAgICAgIHwgICA1MCArKysrKystLS0tCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAgICAgICB8ICAgNjEgKysrKysrLS0tLS0tCiAuLi4vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5jcHAgICAgICB8ICAxMDQgKysrKysrKysrKysrKysr
KysrLS0KIC4uLi9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggICAgICAg
IHwgICAgNyArKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwICAg
ICAgICAgfCAgICA2ICstCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8ICAgIDIgKy0KIDEyIGZpbGVzIGNoYW5nZWQsIDMyNiBpbnNlcnRpb25zKCsp
LCAxMDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmlu
ZGV4IGJhOGU1MmQuLjljZmE4YjkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNi0xOCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gMC4xMSB2aWRlby1zaW5rCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzA4NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY29uZmlndXJl
LmFjOiBGaXggcmVxdWlyZWQgZ3N0cmVhbWVyIDAuMTEgdmVyc2lvbgorCiAyMDEyLTA2LTE4ICBS
b2IgQnVpcyAgPHJidWlzQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnldIEVuYWJsZSBM
RUdBQ1lfVklFV1BPUlRfQURBUFRJT04KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4YWMwYzBhLi42NDJiY2M5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTItMDYtMTggIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIDAuMTEgdmlkZW8t
c2luaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzcw
ODcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQb3J0
IHRoZSB2aWRlbyBzaW5rIHRvIEdTdHJlYW1lciAwLjExIEFQSXMuIFRoZXJlIGlzIG5vIGNoYW5n
ZSBpbgorICAgICAgICBmdW5jdGlvbmFsaXR5IGNvbXBhcmVkIHRvIDAuMTAsIGZvciBub3cuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmlu
Zy5jcHA6CisgICAgICAgICh3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2Fwcyk6Cisg
ICAgICAgICh3ZWJraXRHc3RDcmVhdGVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlR1N0cmVhbWVyOjpjcmVhdGVJbWFnZSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUdTdHJlYW1lcjo6c2V0Q3JvcFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VHU3RyZWFtZXI6OnJlY3QpOgorICAgICAgICAoSW1hZ2VHU3RyZWFtZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNw
cDoKKyAgICAgICAgKEltYWdlR1N0cmVhbWVyOjpJbWFnZUdTdHJlYW1lcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwOgorICAgICAg
ICAoSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6fk1lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVHU3Ry
ZWFtZXI6Om5hdHVyYWxTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKF9XZWJLaXRWaWRlb1NpbmtQcml2
YXRlKToKKyAgICAgICAgKHdlYmtpdFZpZGVvU2lua1JlbmRlcik6CisgICAgICAgICh3ZWJraXRW
aWRlb1NpbmtQcm9wb3NlQWxsb2NhdGlvbik6CisgICAgICAgICh3ZWJraXRfdmlkZW9fc2lua19j
bGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9T
aW5rR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dl
YktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHA6CisKIDIwMTItMDYtMTggIEFteSBPdXN0ZXJob3V0
ICA8YW91c3RlcmhAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gRGV2aWNlT3Jp
ZW50YXRpb24gQ2xlYW51cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lclZlcnNpb25pbmcuY3BwCmluZGV4
IDg1MmMyNjEuLmI0YWNkZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5jcHAK
QEAgLTIxLDcgKzIxLDcgQEAKIAogI2luY2x1ZGUgIkdTdHJlYW1lclZlcnNpb25pbmcuaCIKIAot
I2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlICJJbnRTaXplLmgiCiAKIHZvaWQgd2Via2l0
R3N0T2JqZWN0UmVmU2luayhHc3RPYmplY3QqIGdzdE9iamVjdCkKIHsKQEAgLTQ4LDMgKzQ4LDUx
IEBAIEdzdENhcHMqIHdlYmtpdEdzdEdldFBhZENhcHMoR3N0UGFkKiBwYWQpCiAjZW5kaWYKICAg
ICByZXR1cm4gY2FwczsKIH0KKworYm9vbCB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9t
Q2FwcyhHc3RDYXBzKiBjYXBzLCBXZWJDb3JlOjpJbnRTaXplJiBzaXplLCBHc3RWaWRlb0Zvcm1h
dCYgZm9ybWF0LCBpbnQmIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIGludCYgcGl4ZWxBc3Bl
Y3RSYXRpb0Rlbm9taW5hdG9yLCBpbnQmIHN0cmlkZSkKK3sKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQorICAgIEdzdFZpZGVvSW5mbyBpbmZvOworICAgIGlmICghZ3N0X3ZpZGVvX2luZm9fZnJv
bV9jYXBzKCZpbmZvLCBjYXBzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9ybWF0
ID0gR1NUX1ZJREVPX0lORk9fRk9STUFUKCZpbmZvKTsKKyAgICBzaXplLnNldFdpZHRoKEdTVF9W
SURFT19JTkZPX1dJRFRIKCZpbmZvKSk7CisgICAgc2l6ZS5zZXRIZWlnaHQoR1NUX1ZJREVPX0lO
Rk9fSEVJR0hUKCZpbmZvKSk7CisgICAgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IEdTVF9W
SURFT19JTkZPX1BBUl9OKCZpbmZvKTsKKyAgICBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3Ig
PSBHU1RfVklERU9fSU5GT19QQVJfRCgmaW5mbyk7CisgICAgc3RyaWRlID0gR1NUX1ZJREVPX0lO
Rk9fUExBTkVfU1RSSURFKCZpbmZvLCAwKTsKKyNlbHNlCisgICAgZ2ludCB3aWR0aCwgaGVpZ2h0
OworICAgIGlmICghR1NUX0lTX0NBUFMoY2FwcykgfHwgIWdzdF9jYXBzX2lzX2ZpeGVkKGNhcHMp
CisgICAgICAgIHx8ICFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwg
JndpZHRoLCAmaGVpZ2h0KQorICAgICAgICB8fCAhZ3N0X3ZpZGVvX3BhcnNlX2NhcHNfcGl4ZWxf
YXNwZWN0X3JhdGlvKGNhcHMsICZwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaXhlbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2l6ZS5zZXRXaWR0
aCh3aWR0aCk7CisgICAgc2l6ZS5zZXRIZWlnaHQoaGVpZ2h0KTsKKyAgICBzdHJpZGUgPSBzaXpl
LndpZHRoKCkgKiA0OworI2VuZGlmCisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR3N0QnVmZmVy
KiB3ZWJraXRHc3RDcmVhdGVCdWZmZXIoR3N0QnVmZmVyKiBidWZmZXIpCit7CisjaWZuZGVmIEdT
VF9BUElfVkVSU0lPTl8xCisgICAgR3N0QnVmZmVyKiBuZXdCdWZmZXIgPSBnc3RfYnVmZmVyX3Ry
eV9uZXdfYW5kX2FsbG9jKEdTVF9CVUZGRVJfU0laRShidWZmZXIpKTsKKyNlbHNlCisgICAgZ3Np
emUgYnVmZmVyU2l6ZSA9IGdzdF9idWZmZXJfZ2V0X3NpemUoYnVmZmVyKTsKKyAgICBHc3RCdWZm
ZXIqIG5ld0J1ZmZlciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyNl
bmRpZgorCisgICAgaWYgKCFuZXdCdWZmZXIpCisgICAgICAgIHJldHVybiAwOworCisjaWZuZGVm
IEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2J1ZmZlcl9jb3B5X21ldGFkYXRhKG5ld0J1ZmZl
ciwgYnVmZmVyLCBzdGF0aWNfY2FzdDxHc3RCdWZmZXJDb3B5RmxhZ3M+KEdTVF9CVUZGRVJfQ09Q
WV9BTEwpKTsKKyNlbHNlCisgICAgZ3N0X2J1ZmZlcl9jb3B5X2ludG8obmV3QnVmZmVyLCBidWZm
ZXIsIHN0YXRpY19jYXN0PEdzdEJ1ZmZlckNvcHlGbGFncz4oR1NUX0JVRkZFUl9DT1BZX01FVEFE
QVRBKSwgMCwgYnVmZmVyU2l6ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbmV3QnVmZmVyOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lclZlcnNpb25pbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HU3RyZWFtZXJWZXJzaW9uaW5nLmgKaW5kZXggOGRjZTIxYi4uMmZmYTg0NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJl
YW1lclZlcnNpb25pbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyVmVyc2lvbmluZy5oCkBAIC0yMCwxMSArMjAsMTUgQEAKICNpZm5k
ZWYgR1N0cmVhbWVyVmVyc2lvbmluZ19oCiAjZGVmaW5lIEdTdHJlYW1lclZlcnNpb25pbmdfaAog
Ci10eXBlZGVmIHN0cnVjdCBfR3N0Q2FwcyBHc3RDYXBzOwotdHlwZWRlZiBzdHJ1Y3QgX0dzdE9i
amVjdCBHc3RPYmplY3Q7Ci10eXBlZGVmIHN0cnVjdCBfR3N0UGFkIEdzdFBhZDsKKyNpbmNsdWRl
IDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIEludFNpemU7Cit9OwogCiB2b2lkIHdlYmtpdEdzdE9iamVjdFJlZlNp
bmsoR3N0T2JqZWN0Kik7CiBHc3RDYXBzKiB3ZWJraXRHc3RHZXRQYWRDYXBzKEdzdFBhZCopOwot
Citib29sIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZyb21DYXBzKEdzdENhcHMqLCBXZWJD
b3JlOjpJbnRTaXplJiwgR3N0VmlkZW9Gb3JtYXQmLCBpbnQmIHBpeGVsQXNwZWN0UmF0aW9OdW1l
cmF0b3IsIGludCYgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yLCBpbnQmIHN0cmlkZSk7CitH
c3RCdWZmZXIqIHdlYmtpdEdzdENyZWF0ZUJ1ZmZlcihHc3RCdWZmZXIqKTsKICNlbmRpZiAvLyBH
U3RyZWFtZXJWZXJzaW9uaW5nX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKaW5kZXggMzhlMDgzZi4u
NTJjNTRmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAx
MSwgMjAxMiBJZ2FsaWEgUy5MCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIzLDIwICsyMywyNCBA
QAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1FUikKIAogI2luY2x1ZGUgIkJpdG1h
cEltYWdlLmgiCi0jaW5jbHVkZSA8Z3N0L2dzdC5oPgotI2luY2x1ZGUgPGdzdC92aWRlby92aWRl
by5oPgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclZlcnNpb25p
bmcuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCi0jaWYgVVNFKENBSVJPKQotI2luY2x1
ZGUgPGNhaXJvLmg+Ci0jZW5kaWYKK3R5cGVkZWYgc3RydWN0IF9Hc3RCdWZmZXIgR3N0QnVmZmVy
OwordHlwZWRlZiBzdHJ1Y3QgX0dzdENhcHMgR3N0Q2FwczsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogY2xhc3MgSW50U2l6ZTsKIAogY2xhc3MgSW1hZ2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbWFnZUdTdHJlYW1lcj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IGNyZWF0ZUltYWdlKEdzdEJ1ZmZlciopOworICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxJbWFnZUdTdHJlYW1lcj4gY3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBi
dWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgSW1hZ2VHU3RyZWFtZXIoYnVmZmVyLCBjYXBzKSk7CisgICAgICAgIH0KICAgICAg
ICAgfkltYWdlR1N0cmVhbWVyKCk7CiAKICAgICAgICAgUGFzc1JlZlB0cjxCaXRtYXBJbWFnZT4g
aW1hZ2UoKQpAQCAtNDUsMTcgKzQ5LDIwIEBAIGNsYXNzIEltYWdlR1N0cmVhbWVyIDogcHVibGlj
IFJlZkNvdW50ZWQ8SW1hZ2VHU3RyZWFtZXI+IHsKICAgICAgICAgICAgIHJldHVybiBtX2ltYWdl
LmdldCgpOwogICAgICAgICB9CiAKLSAgICBwcml2YXRlOgotICAgICAgICBSZWZQdHI8Qml0bWFw
SW1hZ2U+IG1faW1hZ2U7Ci0KLSNpZiBVU0UoQ0FJUk8pCi0gICAgICAgIEltYWdlR1N0cmVhbWVy
KEdzdEJ1ZmZlciomLCBJbnRTaXplLCBjYWlyb19mb3JtYXRfdCYpOwotI2VuZGlmCisgICAgICAg
IHZvaWQgc2V0Q3JvcFJlY3QoRmxvYXRSZWN0IHJlY3QpIHsgbV9jcm9wUmVjdCA9IHJlY3Q7IH0K
KyAgICAgICAgRmxvYXRSZWN0IHJlY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1f
Y3JvcFJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBGbG9hdFJlY3QobV9j
cm9wUmVjdCk7CiAKLSNpZiBQTEFURk9STShRVCkKLSAgICAgICAgSW1hZ2VHU3RyZWFtZXIoR3N0
QnVmZmVyKiYsIEludFNpemUsIFFJbWFnZTo6Rm9ybWF0KTsKLSNlbmRpZgorICAgICAgICAgICAg
Ly8gRGVmYXVsdCByZWN0YW5nbGUgdXNlZCBieSBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZSgp
LgorICAgICAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCAtMSwgLTEpOworICAgICAgICB9
CiAKKyAgICBwcml2YXRlOgorICAgICAgICBJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqLCBHc3RD
YXBzKik7CisgICAgICAgIFJlZlB0cjxCaXRtYXBJbWFnZT4gbV9pbWFnZTsKKyAgICAgICAgRmxv
YXRSZWN0IG1fY3JvcFJlY3Q7CiAgICAgfTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVy
Q2Fpcm8uY3BwCmluZGV4IGEwYmY1ZjQuLjAxODYzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lckNhaXJvLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3Ry
ZWFtZXJDYWlyby5jcHAKQEAgLTIyLDQwICsyMiw1MyBAQAogCiAjaWYgRU5BQkxFKFZJREVPKSAm
JiBVU0UoR1NUUkVBTUVSKQogCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxnc3QvZ3N0
Lmg+CisjaW5jbHVkZSA8Z3N0L3ZpZGVvL3ZpZGVvLmg+CisKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJ
T05fMQorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb21ldGEuaD4KKyNlbmRpZgorCiAjaW5j
bHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVBhc3NSZWZQdHI8SW1hZ2VHU3RyZWFtZXI+IEltYWdl
R1N0cmVhbWVyOjpjcmVhdGVJbWFnZShHc3RCdWZmZXIqIGJ1ZmZlcikKK0ltYWdlR1N0cmVhbWVy
OjpJbWFnZUdTdHJlYW1lcihHc3RCdWZmZXIqIGJ1ZmZlciwgR3N0Q2FwcyogY2FwcykKKyAgICA6
IG1faW1hZ2UoMCkKIHsKLSAgICBpbnQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIEdzdENh
cHMqIGNhcHMgPSBnc3RfYnVmZmVyX2dldF9jYXBzKGJ1ZmZlcik7CiAgICAgR3N0VmlkZW9Gb3Jt
YXQgZm9ybWF0OwotICAgIGlmICghZ3N0X3ZpZGVvX2Zvcm1hdF9wYXJzZV9jYXBzKGNhcHMsICZm
b3JtYXQsICZ3aWR0aCwgJmhlaWdodCkpIHsKLSAgICAgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7
Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBJbnRTaXplIHNpemU7CisgICAgaW50IHBp
eGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWluYXRvciwgc3Ry
aWRlOworICAgIHdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZyb21DYXBzKGNhcHMsIHNpemUs
IGZvcm1hdCwgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwgcGl4ZWxBc3BlY3RSYXRpb0Rlbm9t
aW5hdG9yLCBzdHJpZGUpOwogCi0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisjaWZkZWYgR1NU
X0FQSV9WRVJTSU9OXzEKKyAgICBHc3RNYXBJbmZvIG1hcEluZm87CisgICAgZ3N0X2J1ZmZlcl9t
YXAoYnVmZmVyLCAmbWFwSW5mbywgR1NUX01BUF9SRUFEKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBi
dWZmZXJEYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFwSW5mby5kYXRh
KTsKKyNlbHNlCisgICAgdW5zaWduZWQgY2hhciogYnVmZmVyRGF0YSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhcio+KEdTVF9CVUZGRVJfREFUQShidWZmZXIpKTsKKyNlbmRpZgogCiAg
ICAgY2Fpcm9fZm9ybWF0X3QgY2Fpcm9Gb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9PSBHU1RfVklE
RU9fRk9STUFUX0FSR0IgfHwgZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkKLSAgICAg
ICAgY2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwotICAgIGVsc2UKLSAgICAgICAg
Y2Fpcm9Gb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMjQ7Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEltYWdlR1N0cmVhbWVyKGJ1ZmZlciwgSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgY2Fpcm9G
b3JtYXQpKTsKLX0KKyNpZiBHX0JZVEVfT1JERVIgPT0gR19MSVRUTEVfRU5ESUFOCisgICAgY2Fp
cm9Gb3JtYXQgPSAoZm9ybWF0ID09IEdTVF9WSURFT19GT1JNQVRfQkdSQSkgPyBDQUlST19GT1JN
QVRfQVJHQjMyIDogQ0FJUk9fRk9STUFUX1JHQjI0OworI2Vsc2UKKyAgICBjYWlyb0Zvcm1hdCA9
IChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCKSA/IENBSVJPX0ZPUk1BVF9BUkdCMzIg
OiBDQUlST19GT1JNQVRfUkdCMjQ7CisjZW5kaWYKIAotSW1hZ2VHU3RyZWFtZXI6OkltYWdlR1N0
cmVhbWVyKEdzdEJ1ZmZlciomIGJ1ZmZlciwgSW50U2l6ZSBzaXplLCBjYWlyb19mb3JtYXRfdCYg
Y2Fpcm9Gb3JtYXQpCi0gICAgOiBtX2ltYWdlKDApCi17Ci0gICAgY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoR1NUX0JVRkZFUl9E
QVRBKGJ1ZmZlciksIGNhaXJvRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19mb3Jt
YXRfc3RyaWRlX2Zvcl93aWR0aChjYWlyb0Zvcm1hdCwgc2l6ZS53aWR0aCgpKSk7CisgICAgY2Fp
cm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoYnVmZmVyRGF0YSwgY2Fpcm9Gb3JtYXQsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwg
c3RyaWRlKTsKICAgICBBU1NFUlQoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgPT0gQ0FJ
Uk9fU1RBVFVTX1NVQ0NFU1MpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1
cmZhY2UpOworCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBHc3RWaWRlb0Nyb3BNZXRh
KiBjcm9wTWV0YSA9IGdzdF9idWZmZXJfZ2V0X3ZpZGVvX2Nyb3BfbWV0YShidWZmZXIpOworICAg
IGlmIChjcm9wTWV0YSkKKyAgICAgICAgc2V0Q3JvcFJlY3QoRmxvYXRSZWN0KGNyb3BNZXRhLT54
LCBjcm9wTWV0YS0+eSwgY3JvcE1ldGEtPndpZHRoLCBjcm9wTWV0YS0+aGVpZ2h0KSk7CisKKyAg
ICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJm1hcEluZm8pOworI2VuZGlmCiB9CiAKIEltYWdl
R1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0ltYWdlR1N0cmVhbWVyUXQuY3Bw
CmluZGV4IDM2YjA4MDYuLmIzNTQ5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9JbWFnZUdTdHJlYW1lclF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvSW1hZ2VHU3RyZWFtZXJRdC5jcHAK
QEAgLTIxLDM5ICsyMSw0OSBAQAogI2luY2x1ZGUgIkltYWdlR1N0cmVhbWVyLmgiCiAKICNpZiBF
TkFCTEUoVklERU8pICYmIFVTRShHU1RSRUFNRVIpCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2lu
Y2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyNp
bmNsdWRlIDxnc3QvdmlkZW8vZ3N0dmlkZW9tZXRhLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dPd25QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBJbWFnZUdTdHJlYW1l
cjo6Y3JlYXRlSW1hZ2UoR3N0QnVmZmVyKiBidWZmZXIpCitJbWFnZUdTdHJlYW1lcjo6SW1hZ2VH
U3RyZWFtZXIoR3N0QnVmZmVyKiBidWZmZXIsIEdzdENhcHMqIGNhcHMpCisgICAgOiBtX2ltYWdl
KDApCiB7Ci0gICAgaW50IHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKLSAgICBHc3RDYXBzKiBjYXBz
ID0gZ3N0X2J1ZmZlcl9nZXRfY2FwcyhidWZmZXIpOworICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBu
ZXcgUVBpeG1hcDsKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaWYgKCFnc3Rfdmlk
ZW9fZm9ybWF0X3BhcnNlX2NhcHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkgewot
ICAgICAgICBnc3RfY2Fwc191bnJlZihjYXBzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot
Ci0gICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7CisgICAgSW50U2l6ZSBzaXplOworICAgIGludCBw
aXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0
cmlkZTsKKyAgICB3ZWJraXRHZXRWaWRlb1NpemVBbmRGb3JtYXRGcm9tQ2FwcyhjYXBzLCBzaXpl
LCBmb3JtYXQsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5v
bWluYXRvciwgc3RyaWRlKTsKIAorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgR3N0TWFw
SW5mbyBpbmZvOworICAgIGdzdF9idWZmZXJfbWFwKGJ1ZmZlciwgJmluZm8sIEdTVF9NQVBfUkVB
RCk7CisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0PHVjaGFyKj4oaW5m
by5kYXRhKTsKKyNlbHNlCisgICAgdWNoYXIqIGJ1ZmZlckRhdGEgPSByZWludGVycHJldF9jYXN0
PHVjaGFyKj4oR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikpOworI2VuZGlmCiAgICAgUUltYWdlOjpG
b3JtYXQgaW1hZ2VGb3JtYXQ7Ci0gICAgaWYgKGZvcm1hdCA9PSBHU1RfVklERU9fRk9STUFUX1JH
QikKLSAgICAgICAgaW1hZ2VGb3JtYXQgPSBRSW1hZ2U6OkZvcm1hdF9SR0I4ODg7Ci0gICAgZWxz
ZQotICAgICAgICBpbWFnZUZvcm1hdCA9IFFJbWFnZTo6Rm9ybWF0X1JHQjMyOworI2lmIEdfQllU
RV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KKyAgICBpbWFnZUZvcm1hdCA9IChmb3JtYXQgPT0g
R1NUX1ZJREVPX0ZPUk1BVF9CR1JBKSA/IFFJbWFnZTo6Rm9ybWF0X1JHQjMyIDogUUltYWdlOjpG
b3JtYXRfUkdCODg4OworI2Vsc2UKKyAgICBpbWFnZUZvcm1hdCA9IChmb3JtYXQgPT0gR1NUX1ZJ
REVPX0ZPUk1BVF9BUkdCKSA/IFFJbWFnZTo6Rm9ybWF0X0FSR0IzMiA6IFFJbWFnZTo6Rm9ybWF0
X1JHQjg4ODsKKyNlbmRpZgogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbWFnZUdTdHJlYW1l
cihidWZmZXIsIEludFNpemUod2lkdGgsIGhlaWdodCksIGltYWdlRm9ybWF0KSk7Ci19CisgICAg
UUltYWdlIGltYWdlKGJ1ZmZlckRhdGEsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgaW1h
Z2VGb3JtYXQpOwogCi1JbWFnZUdTdHJlYW1lcjo6SW1hZ2VHU3RyZWFtZXIoR3N0QnVmZmVyKiYg
YnVmZmVyLCBJbnRTaXplIHNpemUsIFFJbWFnZTo6Rm9ybWF0IGltYWdlRm9ybWF0KQotICAgIDog
bV9pbWFnZSgwKQotewotICAgIFFQaXhtYXAqIHN1cmZhY2UgPSBuZXcgUVBpeG1hcDsKLSAgICBR
SW1hZ2UgaW1hZ2UoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHNpemUud2lkdGgoKSwgc2l6ZS5o
ZWlnaHQoKSwgaW1hZ2VGb3JtYXQpOwogICAgIHN1cmZhY2UtPmNvbnZlcnRGcm9tSW1hZ2UoaW1h
Z2UpOwogICAgIG1faW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKHN1cmZhY2UpOworCisjaWZk
ZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfYnVmZmVyX3VubWFwKGJ1ZmZlciwgJmluZm8p
OworI2VuZGlmCiB9CiAKIEltYWdlR1N0cmVhbWVyOjp+SW1hZ2VHU3RyZWFtZXIoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAppbmRleCBhYzMzY2E3
Li5mMTg3ZDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVh
bWVyLmNwcApAQCAtMjU0LDEwICsyNTQsMTIgQEAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVy
Ojp+TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyKCkKICAgICAgICAgbV9tZWRpYUxvY2F0aW9u
cyA9IDA7CiAgICAgfQogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgaWYgKG1fdmlk
ZW9TaW5rQmluKSB7CiAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYobV92aWRlb1NpbmtCaW4pOwog
ICAgICAgICBtX3ZpZGVvU2lua0JpbiA9IDA7CiAgICAgfQorI2VuZGlmCiAKICAgICBpZiAobV9w
bGF5QmluKSB7CiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BsYXlCaW4sIEdTVF9T
VEFURV9OVUxMKTsKQEAgLTQ5Nyw5ICs0OTksMTAgQEAgSW50U2l6ZSBNZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXI6Om5hdHVyYWxTaXplKCkgY29uc3QKICAgICBpZiAoIWNhcHMpCiAgICAgICAg
IHJldHVybiBJbnRTaXplKCk7CiAKLSAgICBpbnQgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciwg
cGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yOworICAgIGludCBwaXhlbEFzcGVjdFJhdGlvTnVt
ZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZTsKICAgICBpbnQgZGlz
cGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0LCBkaXNwbGF5QXNwZWN0UmF0aW9HQ0Q7Ci0gICAgaW50
IG9yaWdpbmFsV2lkdGggPSAwLCBvcmlnaW5hbEhlaWdodCA9IDA7CisgICAgSW50U2l6ZSBvcmln
aW5hbFNpemU7CisgICAgR3N0VmlkZW9Gb3JtYXQgZm9ybWF0OwogCiAgICAgLy8gVE9ETzogaGFu
ZGxlIHBvc3NpYmxlIGNsZWFuIGFwZXJ0dXJlIGRhdGEuIFNlZQogICAgIC8vIGh0dHBzOi8vYnVn
emlsbGEuZ25vbWUub3JnL3Nob3dfYnVnLmNnaT9pZD01OTY1NzEKQEAgLTUwOCwzMCArNTExLDE1
IEBAIEludFNpemUgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpuYXR1cmFsU2l6ZSgpIGNv
bnN0CiAKICAgICAvLyBHZXQgdGhlIHZpZGVvIFBBUiBhbmQgb3JpZ2luYWwgc2l6ZSwgaWYgdGhp
cyBmYWlscyB0aGUKICAgICAvLyB2aWRlby1zaW5rIGhhcyBsaWtlbHkgbm90IHlldCBuZWdvdGlh
dGVkIGl0cyBjYXBzLgotI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCi0gICAgR3N0VmlkZW9JbmZv
IGluZm87Ci0gICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJmluZm8sIGNhcHMpKQot
ICAgICAgICByZXR1cm4gSW50U2l6ZSgpOwotCi0gICAgb3JpZ2luYWxXaWR0aCA9IEdTVF9WSURF
T19JTkZPX1dJRFRIKCZpbmZvKTsKLSAgICBvcmlnaW5hbEhlaWdodCA9IEdTVF9WSURFT19JTkZP
X0hFSUdIVCgmaW5mbyk7Ci0gICAgcGl4ZWxBc3BlY3RSYXRpb051bWVyYXRvciA9IEdTVF9WSURF
T19JTkZPX1BBUl9OKCZpbmZvKTsKLSAgICBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IgPSBH
U1RfVklERU9fSU5GT19QQVJfRCgmaW5mbyk7Ci0jZWxzZQotICAgIC8vIEdldCB0aGUgdmlkZW8g
UEFSIGFuZCBvcmlnaW5hbCBzaXplLgotICAgIGlmICghR1NUX0lTX0NBUFMoY2FwcykgfHwgIWdz
dF9jYXBzX2lzX2ZpeGVkKGNhcHMpCi0gICAgICAgIHx8ICFnc3RfdmlkZW9fZm9ybWF0X3BhcnNl
X2NhcHMoY2FwcywgMCwgJm9yaWdpbmFsV2lkdGgsICZvcmlnaW5hbEhlaWdodCkKLSAgICAgICAg
fHwgIWdzdF92aWRlb19wYXJzZV9jYXBzX3BpeGVsX2FzcGVjdF9yYXRpbyhjYXBzLCAmcGl4ZWxB
c3BlY3RSYXRpb051bWVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmcGl4ZWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKSkKKyAgICBpZiAo
IXdlYmtpdEdldFZpZGVvU2l6ZUFuZEZvcm1hdEZyb21DYXBzKGNhcHMsIG9yaWdpbmFsU2l6ZSwg
Zm9ybWF0LCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21p
bmF0b3IsIHN0cmlkZSkpCiAgICAgICAgIHJldHVybiBJbnRTaXplKCk7Ci0jZW5kaWYKIAotICAg
IExPR19WRVJCT1NFKE1lZGlhLCAiT3JpZ2luYWwgdmlkZW8gc2l6ZTogJWR4JWQiLCBvcmlnaW5h
bFdpZHRoLCBvcmlnaW5hbEhlaWdodCk7CisgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJPcmlnaW5h
bCB2aWRlbyBzaXplOiAlZHglZCIsIG9yaWdpbmFsU2l6ZS53aWR0aCgpLCBvcmlnaW5hbFNpemUu
aGVpZ2h0KCkpOwogICAgIExPR19WRVJCT1NFKE1lZGlhLCAiUGl4ZWwgYXNwZWN0IHJhdGlvOiAl
ZC8lZCIsIHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0UmF0aW9EZW5vbWlu
YXRvcik7CiAKICAgICAvLyBDYWxjdWxhdGUgREFSIGJhc2VkIG9uIFBBUiBhbmQgdmlkZW8gc2l6
ZS4KLSAgICBkaXNwbGF5V2lkdGggPSBvcmlnaW5hbFdpZHRoICogcGl4ZWxBc3BlY3RSYXRpb051
bWVyYXRvcjsKLSAgICBkaXNwbGF5SGVpZ2h0ID0gb3JpZ2luYWxIZWlnaHQgKiBwaXhlbEFzcGVj
dFJhdGlvRGVub21pbmF0b3I7CisgICAgZGlzcGxheVdpZHRoID0gb3JpZ2luYWxTaXplLndpZHRo
KCkgKiBwaXhlbEFzcGVjdFJhdGlvTnVtZXJhdG9yOworICAgIGRpc3BsYXlIZWlnaHQgPSBvcmln
aW5hbFNpemUuaGVpZ2h0KCkgKiBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3I7CiAKICAgICAv
LyBEaXZpZGUgZGlzcGxheSB3aWR0aCBhbmQgaGVpZ2h0IGJ5IHRoZWlyIEdDRCB0byBhdm9pZCBw
b3NzaWJsZSBvdmVyZmxvd3MuCiAgICAgZGlzcGxheUFzcGVjdFJhdGlvR0NEID0gZ3JlYXRlc3RD
b21tb25EaXZpc29yKGRpc3BsYXlXaWR0aCwgZGlzcGxheUhlaWdodCk7CkBAIC01NDAsMTggKzUy
OCwxOCBAQCBJbnRTaXplIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6bmF0dXJhbFNpemUo
KSBjb25zdAogCiAgICAgLy8gQXBwbHkgREFSIHRvIG9yaWdpbmFsIHZpZGVvIHNpemUuIFRoaXMg
aXMgdGhlIHNhbWUgYmVoYXZpb3IgYXMgaW4geHZpbWFnZXNpbmsncyBzZXRjYXBzIGZ1bmN0aW9u
LgogICAgIGd1aW50NjQgd2lkdGggPSAwLCBoZWlnaHQgPSAwOwotICAgIGlmICghKG9yaWdpbmFs
SGVpZ2h0ICUgZGlzcGxheUhlaWdodCkpIHsKKyAgICBpZiAoIShvcmlnaW5hbFNpemUuaGVpZ2h0
KCkgJSBkaXNwbGF5SGVpZ2h0KSkgewogICAgICAgICBMT0dfVkVSQk9TRShNZWRpYSwgIktlZXBp
bmcgdmlkZW8gb3JpZ2luYWwgaGVpZ2h0Iik7Ci0gICAgICAgIHdpZHRoID0gZ3N0X3V0aWxfdWlu
dDY0X3NjYWxlX2ludChvcmlnaW5hbEhlaWdodCwgZGlzcGxheVdpZHRoLCBkaXNwbGF5SGVpZ2h0
KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4ob3JpZ2luYWxIZWlnaHQp
OwotICAgIH0gZWxzZSBpZiAoIShvcmlnaW5hbFdpZHRoICUgZGlzcGxheVdpZHRoKSkgeworICAg
ICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxTaXplLmhlaWdo
dCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOworICAgICAgICBoZWlnaHQgPSBzdGF0
aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0KCkpOworICAgIH0gZWxzZSBpZiAo
IShvcmlnaW5hbFNpemUud2lkdGgoKSAlIGRpc3BsYXlXaWR0aCkpIHsKICAgICAgICAgTE9HX1ZF
UkJPU0UoTWVkaWEsICJLZWVwaW5nIHZpZGVvIG9yaWdpbmFsIHdpZHRoIik7Ci0gICAgICAgIGhl
aWdodCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9pbnQob3JpZ2luYWxXaWR0aCwgZGlzcGxheUhl
aWdodCwgZGlzcGxheVdpZHRoKTsKLSAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxndWludDY0
PihvcmlnaW5hbFdpZHRoKTsKKyAgICAgICAgaGVpZ2h0ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxl
X2ludChvcmlnaW5hbFNpemUud2lkdGgoKSwgZGlzcGxheUhlaWdodCwgZGlzcGxheVdpZHRoKTsK
KyAgICAgICAgd2lkdGggPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUud2lkdGgo
KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgTE9HX1ZFUkJPU0UoTWVkaWEsICJBcHByb3hpbWF0
aW5nIHdoaWxlIGtlZXBpbmcgb3JpZ2luYWwgdmlkZW8gaGVpZ2h0Iik7Ci0gICAgICAgIHdpZHRo
ID0gZ3N0X3V0aWxfdWludDY0X3NjYWxlX2ludChvcmlnaW5hbEhlaWdodCwgZGlzcGxheVdpZHRo
LCBkaXNwbGF5SGVpZ2h0KTsKLSAgICAgICAgaGVpZ2h0ID0gc3RhdGljX2Nhc3Q8Z3VpbnQ2ND4o
b3JpZ2luYWxIZWlnaHQpOworICAgICAgICB3aWR0aCA9IGdzdF91dGlsX3VpbnQ2NF9zY2FsZV9p
bnQob3JpZ2luYWxTaXplLmhlaWdodCgpLCBkaXNwbGF5V2lkdGgsIGRpc3BsYXlIZWlnaHQpOwor
ICAgICAgICBoZWlnaHQgPSBzdGF0aWNfY2FzdDxndWludDY0PihvcmlnaW5hbFNpemUuaGVpZ2h0
KCkpOwogICAgIH0KIAogICAgIExPR19WRVJCT1NFKE1lZGlhLCAiTmF0dXJhbCBzaXplOiAlIiBH
X0dVSU5UNjRfRk9STUFUICJ4JSIgR19HVUlOVDY0X0ZPUk1BVCwgd2lkdGgsIGhlaWdodCk7CkBA
IC05NTcsNyArOTQ1LDcgQEAgdW5zaWduZWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp0
b3RhbEJ5dGVzKCkgY29uc3QKICAgICBib29sIGRvbmUgPSBmYWxzZTsKICAgICB3aGlsZSAoIWRv
bmUpIHsKICNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQotICAgICAgICBHVmFsdWUgaXRlbSA9IHsw
LCB9OworICAgICAgICBHVmFsdWUgaXRlbSA9IEdfVkFMVUVfSU5JVDsKICAgICAgICAgc3dpdGNo
IChnc3RfaXRlcmF0b3JfbmV4dChpdGVyLCAmaXRlbSkpIHsKICAgICAgICAgY2FzZSBHU1RfSVRF
UkFUT1JfT0s6IHsKICAgICAgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFk
Kj4oZ192YWx1ZV9nZXRfb2JqZWN0KCZpdGVtKSk7CkBAIC0xNDgxLDE3ICsxNDY5LDIwIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpwYWludChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmCiAgICAgaWYgKCFtX2J1ZmZlcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0cmVhbWVy
OjpjcmVhdGVJbWFnZShtX2J1ZmZlcik7CisgICAgR3N0Q2FwcyogY2FwcyA9IHdlYmtpdEdzdEdl
dFBhZENhcHMobV92aWRlb1NpbmtQYWQuZ2V0KCkpOworICAgIGlmICghY2FwcykKKyAgICAgICAg
cmV0dXJuOworCisgICAgUmVmUHRyPEltYWdlR1N0cmVhbWVyPiBnc3RJbWFnZSA9IEltYWdlR1N0
cmVhbWVyOjpjcmVhdGVJbWFnZShtX2J1ZmZlciwgY2Fwcyk7CiAgICAgaWYgKCFnc3RJbWFnZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKHJlaW50ZXJwcmV0X2Nh
c3Q8SW1hZ2UqPihnc3RJbWFnZS0+aW1hZ2UoKS5nZXQoKSksIENvbG9yU3BhY2VTUkdCLAotICAg
ICAgICAgICAgICAgICAgICAgICByZWN0LCBDb21wb3NpdGVDb3B5LCBEb05vdFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIGdzdElt
YWdlLT5yZWN0KCksIENvbXBvc2l0ZUNvcHksIERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24s
IGZhbHNlKTsKIH0KIAogc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBtaW1lVHlwZUNhY2hlKCkKIHsK
LQogICAgIGluaXRpYWxpemVHU3RyZWFtZXJBbmRSZWdpc3RlcldlYktpdEVsZW1lbnRzKCk7CiAK
ICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhhc2hTZXQ8U3RyaW5nPiwgY2FjaGUsICgpKTsKQEAg
LTE2NzMsNyArMTY2NCwxMSBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6Y3Jl
YXRlR1NUUGxheUJpbigpCiAgICAgZ19zaWduYWxfY29ubmVjdChtX3BsYXlCaW4sICJ2aWRlby1j
aGFuZ2VkIiwgR19DQUxMQkFDSyhtZWRpYVBsYXllclByaXZhdGVWaWRlb0NoYW5nZWRDYWxsYmFj
ayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9wbGF5QmluLCAiYXVkaW8tY2hhbmdl
ZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRlQXVkaW9DaGFuZ2VkQ2FsbGJhY2spLCB0
aGlzKTsKIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgIG1fd2Via2l0VmlkZW9TaW5r
ID0gd2Via2l0VmlkZW9TaW5rTmV3KG1fZ3N0R1dvcmxkLmdldCgpKTsKKyNlbHNlCisgICAgbV93
ZWJraXRWaWRlb1NpbmsgPSB3ZWJraXRWaWRlb1NpbmtOZXcoKTsKKyNlbmRpZgogICAgIG1fdmlk
ZW9TaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fd2Via2l0
VmlkZW9TaW5rLCAic2luayIpKTsKIAogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJraXRWaWRl
b1NpbmssICJyZXBhaW50LXJlcXVlc3RlZCIsIEdfQ0FMTEJBQ0sobWVkaWFQbGF5ZXJQcml2YXRl
UmVwYWludENhbGxiYWNrKSwgdGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3Bw
CmluZGV4IDEzODliNjkuLjIwMTMxY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
Y3BwCkBAIC0yOSwxNSArMjksMjkgQEAKICNpZiBVU0UoR1NUUkVBTUVSKQogI2luY2x1ZGUgIlZp
ZGVvU2lua0dTdHJlYW1lci5oIgogCisjaW5jbHVkZSAiR1N0cmVhbWVyVmVyc2lvbmluZy5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlIDxnbGliLmg+CiAjaW5jbHVkZSA8Z3N0L2dz
dC5oPgorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisjaW5jbHVkZSA8Z3N0L3ZpZGVvL2dzdHZp
ZGVvbWV0YS5oPgorI2luY2x1ZGUgPGdzdC92aWRlby9nc3R2aWRlb3Bvb2wuaD4KKyNlbmRpZgog
I2luY2x1ZGUgPHd0Zi9GYXN0QWxsb2NCYXNlLmg+CiAKIC8vIENBSVJPX0ZPUk1BVF9SR0IyNCB1
c2VkIHRvIHJlbmRlciB0aGUgdmlkZW8gYnVmZmVycyBpcyBsaXR0bGUvYmlnIGVuZGlhbiBkZXBl
bmRhbnQuCiAjaWYgR19CWVRFX09SREVSID09IEdfTElUVExFX0VORElBTgorI2lmbmRlZiBHU1Rf
QVBJX1ZFUlNJT05fMQogI2RlZmluZSBXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUyBHU1RfVklE
RU9fQ0FQU19CR1J4ICI7IiBHU1RfVklERU9fQ0FQU19CR1JBCiAjZWxzZQorI2RlZmluZSBXRUJL
SVRfVklERU9fU0lOS19QQURfQ0FQUyBHU1RfVklERU9fQ0FQU19NQUtFKCJ7IEJHUngsIEJHUkEg
fSIpCisjZW5kaWYKKyNlbHNlCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAjZGVmaW5lIFdF
QktJVF9WSURFT19TSU5LX1BBRF9DQVBTIEdTVF9WSURFT19DQVBTX3hSR0IgIjsiIEdTVF9WSURF
T19DQVBTX0FSR0IKKyNlbHNlCisjZGVmaW5lIFdFQktJVF9WSURFT19TSU5LX1BBRF9DQVBTIEdT
VF9WSURFT19DQVBTX01BS0UoInsgeFJHQiwgQVJHQiB9IikKKyNlbmRpZgogI2VuZGlmCiBzdGF0
aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc19zaW5rVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9U
RU1QTEFURSgic2luayIsIEdTVF9QQURfU0lOSywgR1NUX1BBRF9BTFdBWVMsIEdTVF9TVEFUSUNf
Q0FQUyhXRUJLSVRfVklERU9fU0lOS19QQURfQ0FQUykpOwogCkBAIC02Miw3ICs3NiwxMyBAQCBz
dHJ1Y3QgX1dlYktpdFZpZGVvU2lua1ByaXZhdGUgewogICAgIEdNdXRleCogYnVmZmVyTXV0ZXg7
CiAgICAgR0NvbmQqIGRhdGFDb25kaXRpb247CiAKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQor
ICAgIEdzdFZpZGVvSW5mbyBpbmZvOworI2VuZGlmCisKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9O
XzEKICAgICBXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3JsZDsKKyNlbmRpZgogCiAg
ICAgLy8gSWYgdGhpcyBpcyBUUlVFIGFsbCBwcm9jZXNzaW5nIHNob3VsZCBmaW5pc2ggQVNBUAog
ICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlcmUgY291bGQgYmUgYSByYWNlIGJl
dHdlZW4KQEAgLTkxLDYgKzExMSwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfdmlkZW9fc2lua19p
bml0KFdlYktpdFZpZGVvU2luayogc2luaykKICAgICBzaW5rLT5wcml2LT5kYXRhQ29uZGl0aW9u
ID0gZ19jb25kX25ldygpOwogICAgIHNpbmstPnByaXYtPmJ1ZmZlck11dGV4ID0gZ19tdXRleF9u
ZXcoKTsKICNlbmRpZgorCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICBnc3RfdmlkZW9f
aW5mb19pbml0KCZzaW5rLT5wcml2LT5pbmZvKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgZ2Jvb2xl
YW4gd2Via2l0VmlkZW9TaW5rVGltZW91dENhbGxiYWNrKGdwb2ludGVyIGRhdGEpCkBAIC0xMjks
MTUgKzE1MywxOCBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJraXRWaWRlb1NpbmtSZW5kZXIo
R3N0QmFzZVNpbmsqIGJhc2VTaW5rLCBHc3RCdWZmZXIqIGJ1ZgogICAgICAgICByZXR1cm4gR1NU
X0ZMT1dfT0s7CiAgICAgfQogCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAgLy8gSWdu
b3JlIGJ1ZmZlcnMgaWYgdGhlIHZpZGVvIGlzIGFscmVhZHkgaW4gZnVsbHNjcmVlbiB1c2luZwog
ICAgIC8vIGFub3RoZXIgc2luay4KICAgICBpZiAocHJpdi0+Z3N0R1dvcmxkLT5pc0Z1bGxzY3Jl
ZW4oKSkgewogICAgICAgICBnX211dGV4X3VubG9jayhwcml2LT5idWZmZXJNdXRleCk7CiAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19PSzsKICAgICB9CisjZW5kaWYKIAogICAgIHByaXYtPmJ1ZmZl
ciA9IGdzdF9idWZmZXJfcmVmKGJ1ZmZlcik7CiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEK
ICAgICAvLyBGb3IgdGhlIHVubGlrZWx5IGNhc2Ugd2hlcmUgdGhlIGJ1ZmZlciBoYXMgbm8gY2Fw
cywgdGhlIGNhcHMKICAgICAvLyBhcmUgaW1wbGljaXRlbHkgdGhlIGNhcHMgb2YgdGhlIHBhZC4g
VGhpcyBzaG91bGRuJ3QgaGFwcGVuLgogICAgIGlmIChVTkxJS0VMWSghR1NUX0JVRkZFUl9DQVBT
KGJ1ZmZlcikpKSB7CkBAIC0xNDYsMTQgKzE3MywyNiBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3
ZWJraXRWaWRlb1NpbmtSZW5kZXIoR3N0QmFzZVNpbmsqIGJhc2VTaW5rLCBHc3RCdWZmZXIqIGJ1
ZgogICAgIH0KIAogICAgIEdzdENhcHMqIGNhcHMgPSBHU1RfQlVGRkVSX0NBUFMoYnVmZmVyKTsK
KyNlbHNlCisgICAgR3N0Q2FwcyogY2FwcyA9IGdzdF92aWRlb19pbmZvX3RvX2NhcHMoJnByaXYt
PmluZm8pOworI2VuZGlmCisKICAgICBHc3RWaWRlb0Zvcm1hdCBmb3JtYXQ7Ci0gICAgaW50IHdp
ZHRoLCBoZWlnaHQ7Ci0gICAgaWYgKFVOTElLRUxZKCFnc3RfdmlkZW9fZm9ybWF0X3BhcnNlX2Nh
cHMoY2FwcywgJmZvcm1hdCwgJndpZHRoLCAmaGVpZ2h0KSkpIHsKKyAgICBXZWJDb3JlOjpJbnRT
aXplIHNpemU7CisgICAgaW50IHBpeGVsQXNwZWN0UmF0aW9OdW1lcmF0b3IsIHBpeGVsQXNwZWN0
UmF0aW9EZW5vbWluYXRvciwgc3RyaWRlOworICAgIGlmICghd2Via2l0R2V0VmlkZW9TaXplQW5k
Rm9ybWF0RnJvbUNhcHMoY2Fwcywgc2l6ZSwgZm9ybWF0LCBwaXhlbEFzcGVjdFJhdGlvTnVtZXJh
dG9yLCBwaXhlbEFzcGVjdFJhdGlvRGVub21pbmF0b3IsIHN0cmlkZSkpIHsKICAgICAgICAgZ3N0
X2J1ZmZlcl91bnJlZihidWZmZXIpOworI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgICAg
IGdzdF9jYXBzX3VucmVmKGNhcHMpOworI2VuZGlmCiAgICAgICAgIGdfbXV0ZXhfdW5sb2NrKHBy
aXYtPmJ1ZmZlck11dGV4KTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VSUk9SOwogICAgIH0K
IAorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgZ3N0X2NhcHNfdW5yZWYoY2Fwcyk7Cisj
ZW5kaWYKKwogICAgIC8vIENhaXJvJ3MgQVJHQiBoYXMgcHJlLW11bHRpcGxpZWQgYWxwaGEgd2hp
bGUgR1N0cmVhbWVyJ3MgZG9lc24ndC4KICAgICAvLyBIZXJlIHdlIGNvbnZlcnQgdG8gQ2Fpcm8n
cyBBUkdCLgogICAgIGlmIChmb3JtYXQgPT0gR1NUX1ZJREVPX0ZPUk1BVF9BUkdCIHx8IGZvcm1h
dCA9PSBHU1RfVklERU9fRk9STUFUX0JHUkEpIHsKQEAgLTE2Miw3ICsyMDEsNyBAQCBzdGF0aWMg
R3N0Rmxvd1JldHVybiB3ZWJraXRWaWRlb1NpbmtSZW5kZXIoR3N0QmFzZVNpbmsqIGJhc2VTaW5r
LCBHc3RCdWZmZXIqIGJ1ZgogICAgICAgICAvLyBUaGUgYnVmZmVyIGNvbnRlbnQgc2hvdWxkIG5v
dCBiZSBjaGFuZ2VkIGhlcmUgYmVjYXVzZSB0aGUgc2FtZSBidWZmZXIKICAgICAgICAgLy8gY291
bGQgYmUgcGFzc2VkIG11bHRpcGxlIHRpbWVzIHRvIHRoaXMgbWV0aG9kIChpbiB0aGVvcnkpLgog
Ci0gICAgICAgIEdzdEJ1ZmZlciogbmV3QnVmZmVyID0gZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9h
bGxvYyhHU1RfQlVGRkVSX1NJWkUoYnVmZmVyKSk7CisgICAgICAgIEdzdEJ1ZmZlciogbmV3QnVm
ZmVyID0gd2Via2l0R3N0Q3JlYXRlQnVmZmVyKGJ1ZmZlcik7CiAKICAgICAgICAgLy8gQ2hlY2sg
aWYgYWxsb2NhdGlvbiBmYWlsZWQuCiAgICAgICAgIGlmIChVTkxJS0VMWSghbmV3QnVmZmVyKSkg
ewpAQCAtMTcwLDE3ICsyMDksMjQgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gd2Via2l0VmlkZW9T
aW5rUmVuZGVyKEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0QnVmZmVyKiBidWYKICAgICAgICAg
ICAgIHJldHVybiBHU1RfRkxPV19FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIGdzdF9idWZm
ZXJfY29weV9tZXRhZGF0YShuZXdCdWZmZXIsIGJ1ZmZlciwgc3RhdGljX2Nhc3Q8R3N0QnVmZmVy
Q29weUZsYWdzPihHU1RfQlVGRkVSX0NPUFlfQUxMKSk7Ci0KICAgICAgICAgLy8gV2UgZG9uJ3Qg
dXNlIENvbG9yOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcigpIGhlcmUgYmVjYXVzZQogICAg
ICAgICAvLyBvbmUgZnVuY3Rpb24gY2FsbCBwZXIgdmlkZW8gcGl4ZWwgaXMganVzdCB0b28gZXhw
ZW5zaXZlOgogICAgICAgICAvLyBGb3IgNzIwcC9QQUwgZm9yIGV4YW1wbGUgdGhpcyBtZWFucyAx
MjgwKjcyMCoyNT0yMzA0MDAwMAogICAgICAgICAvLyBmdW5jdGlvbiBjYWxscyBwZXIgc2Vjb25k
IQorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogICAgICAgICBjb25zdCBndWludDgqIHNvdXJj
ZSA9IEdTVF9CVUZGRVJfREFUQShidWZmZXIpOwogICAgICAgICBndWludDgqIGRlc3RpbmF0aW9u
ID0gR1NUX0JVRkZFUl9EQVRBKG5ld0J1ZmZlcik7CisjZWxzZQorICAgICAgICBHc3RNYXBJbmZv
IHNvdXJjZUluZm87CisgICAgICAgIEdzdE1hcEluZm8gZGVzdGluYXRpb25JbmZvOworICAgICAg
ICBnc3RfYnVmZmVyX21hcChidWZmZXIsICZzb3VyY2VJbmZvLCBHU1RfTUFQX1JFQUQpOworICAg
ICAgICBjb25zdCBndWludDgqIHNvdXJjZSA9IGNvbnN0X2Nhc3Q8Z3VpbnQ4Kj4oc291cmNlSW5m
by5kYXRhKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9tYXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25J
bmZvLCBHU1RfTUFQX1dSSVRFKTsKKyAgICAgICAgZ3VpbnQ4KiBkZXN0aW5hdGlvbiA9IHN0YXRp
Y19jYXN0PGd1aW50OCo+KGRlc3RpbmF0aW9uSW5mby5kYXRhKTsKKyNlbmRpZgogCi0gICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgaGVpZ2h0OyB4KyspIHsKLSAgICAgICAgICAgIGZvciAoaW50
IHkgPSAwOyB5IDwgd2lkdGg7IHkrKykgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHNp
emUuaGVpZ2h0KCk7IHgrKykgeworICAgICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBzaXpl
LndpZHRoKCk7IHkrKykgewogI2lmIEdfQllURV9PUkRFUiA9PSBHX0xJVFRMRV9FTkRJQU4KICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBhbHBoYSA9IHNvdXJjZVszXTsKICAgICAgICAg
ICAgICAgICBkZXN0aW5hdGlvblswXSA9IChzb3VyY2VbMF0gKiBhbHBoYSArIDEyOCkgLyAyNTU7
CkBAIC0xOTksNiArMjQ1LDEwIEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYmtpdFZpZGVvU2lu
a1JlbmRlcihHc3RCYXNlU2luayogYmFzZVNpbmssIEdzdEJ1ZmZlciogYnVmCiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KIAorI2lmZGVmIEdTVF9BUElfVkVSU0lPTl8xCisgICAgICAgIGdzdF9i
dWZmZXJfdW5tYXAoYnVmZmVyLCAmc291cmNlSW5mbyk7CisgICAgICAgIGdzdF9idWZmZXJfdW5t
YXAobmV3QnVmZmVyLCAmZGVzdGluYXRpb25JbmZvKTsKKyNlbmRpZgogICAgICAgICBnc3RfYnVm
ZmVyX3VucmVmKGJ1ZmZlcik7CiAgICAgICAgIGJ1ZmZlciA9IHByaXYtPmJ1ZmZlciA9IG5ld0J1
ZmZlcjsKICAgICB9CkBAIC0yOTMsNiArMzQzLDI3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRW
aWRlb1NpbmtTdGFydChHc3RCYXNlU2luayogYmFzZVNpbmspCiAgICAgcmV0dXJuIFRSVUU7CiB9
CiAKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorc3RhdGljIGdib29sZWFuIHdlYmtpdFZpZGVv
U2lua1Byb3Bvc2VBbGxvY2F0aW9uKEdzdEJhc2VTaW5rKiBiYXNlU2luaywgR3N0UXVlcnkqIHF1
ZXJ5KQoreworICAgIFdlYktpdFZpZGVvU2luayogc2luayA9IFdFQktJVF9WSURFT19TSU5LKGJh
c2VTaW5rKTsKKyAgICBHc3RDYXBzKiBjYXBzOworCisgICAgZ3N0X3F1ZXJ5X3BhcnNlX2FsbG9j
YXRpb24ocXVlcnksICZjYXBzLCAwKTsKKworICAgIGlmICghY2FwcykKKyAgICAgICAgcmV0dXJu
IEZBTFNFOworCisgICAgaWYgKCFnc3RfdmlkZW9faW5mb19mcm9tX2NhcHMoJnNpbmstPnByaXYt
PmluZm8sIGNhcHMpKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBnc3RfcXVlcnlfYWRk
X2FsbG9jYXRpb25fbWV0YShxdWVyeSwgR1NUX1ZJREVPX01FVEFfQVBJX1RZUEUpOworICAgIGdz
dF9xdWVyeV9hZGRfYWxsb2NhdGlvbl9tZXRhKHF1ZXJ5LCBHU1RfVklERU9fQ1JPUF9NRVRBX0FQ
SV9UWVBFKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbmRpZgorCisjaWZuZGVmIEdTVF9BUElf
VkVSU0lPTl8xCiBzdGF0aWMgdm9pZCB3ZWJraXRWaWRlb1NpbmtNYXJzaGFsVm9pZEFuZE1pbmlP
YmplY3QoR0Nsb3N1cmUqIGNsb3N1cmUsIEdWYWx1ZSogcmV0dXJuVmFsdWUsIGd1aW50IHBhcmFt
ZXRlcnNOdW1iZXIsIGNvbnN0IEdWYWx1ZSogcGFyYW1ldGVyVmFsdWVzLCBncG9pbnRlciBpbnZv
Y2F0aW9uSGludCwgZ3BvaW50ZXIgbWFyc2hhbERhdGEpCiB7CiAgICAgdHlwZWRlZiB2b2lkICgq
bWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkgKGdwb2ludGVyIG9iaiwgZ3BvaW50ZXIgYXJn
MSwgZ3BvaW50ZXIgZGF0YTIpOwpAQCAtMzEzLDYgKzM4NCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtp
dFZpZGVvU2lua01hcnNoYWxWb2lkQW5kTWluaU9iamVjdChHQ2xvc3VyZSogY2xvc3VyZSwgR1Zh
bHVlKiByCiAgICAgY2FsbGJhY2sgPSAobWFyc2hhbGZ1bmNfVk9JRF9fTUlOSU9CSkVDVCkgKG1h
cnNoYWxEYXRhID8gbWFyc2hhbERhdGEgOiBjY2xvc3VyZS0+Y2FsbGJhY2spOwogICAgIGNhbGxi
YWNrKGRhdGExLCBnc3RfdmFsdWVfZ2V0X21pbmlfb2JqZWN0KHBhcmFtZXRlclZhbHVlcyArIDEp
LCBkYXRhMik7CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3NpbmtfY2xh
c3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCiB7CkBAIC0zMjEsNyArMzkzLDEx
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0VmlkZW9T
aW5rQ2xhc3MqIGtsYXNzKQogICAgIEdzdEVsZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NU
X0VMRU1FTlRfQ0xBU1Moa2xhc3MpOwogCiAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90
ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc19zaW5r
VGVtcGxhdGUpKTsKKyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGdzdF9lbGVtZW50X2Ns
YXNzX3NldF9tZXRhZGF0YShlbGVtZW50Q2xhc3MsCisjZWxzZQogICAgIGdzdF9lbGVtZW50X2Ns
YXNzX3NldF9kZXRhaWxzX3NpbXBsZShlbGVtZW50Q2xhc3MsCisjZW5kaWYKICAgICAgICAgICAg
ICJXZWJLaXQgdmlkZW8gc2luayIsCiAgICAgICAgICAgICAiU2luay9WaWRlbyIsICJTZW5kcyB2
aWRlbyBkYXRhIGZyb20gYSBHU3RyZWFtZXIgcGlwZWxpbmUgdG8gYSBDYWlybyBzdXJmYWNlIiwK
ICAgICAgICAgICAgICJBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPiIpOwpAQCAtMzM2LDYgKzQx
Miw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF92aWRlb19zaW5rX2NsYXNzX2luaXQoV2ViS2l0Vmlk
ZW9TaW5rQ2xhc3MqIGtsYXNzKQogICAgIGJhc2VTaW5rQ2xhc3MtPnByZXJvbGwgPSB3ZWJraXRW
aWRlb1NpbmtSZW5kZXI7CiAgICAgYmFzZVNpbmtDbGFzcy0+c3RvcCA9IHdlYmtpdFZpZGVvU2lu
a1N0b3A7CiAgICAgYmFzZVNpbmtDbGFzcy0+c3RhcnQgPSB3ZWJraXRWaWRlb1NpbmtTdGFydDsK
KyNpZmRlZiBHU1RfQVBJX1ZFUlNJT05fMQorICAgIGJhc2VTaW5rQ2xhc3MtPnByb3Bvc2VfYWxs
b2NhdGlvbiA9IHdlYmtpdFZpZGVvU2lua1Byb3Bvc2VBbGxvY2F0aW9uOworI2VuZGlmCiAKICAg
ICB3ZWJraXRWaWRlb1NpbmtTaWduYWxzW1JFUEFJTlRfUkVRVUVTVEVEXSA9IGdfc2lnbmFsX25l
dygicmVwYWludC1yZXF1ZXN0ZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Moa2xh
c3MpLApAQCAtMzQzLDE4ICs0MjIsMjkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3ZpZGVvX3Npbmtf
Y2xhc3NfaW5pdChXZWJLaXRWaWRlb1NpbmtDbGFzcyoga2xhc3MpCiAgICAgICAgICAgICAwLCAv
LyBDbGFzcyBvZmZzZXQKICAgICAgICAgICAgIDAsIC8vIEFjY3VtdWxhdG9yCiAgICAgICAgICAg
ICAwLCAvLyBBY2N1bXVsYXRvciBkYXRhCisjaWZuZGVmIEdTVF9BUElfVkVSU0lPTl8xCiAgICAg
ICAgICAgICB3ZWJraXRWaWRlb1NpbmtNYXJzaGFsVm9pZEFuZE1pbmlPYmplY3QsCisjZWxzZQor
ICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX2dlbmVyaWMsIC8vIEN1c3RvbSBtYXJzaGFs
bGVyCisjZW5kaWYKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAvLyBSZXR1cm4gdHlwZQogICAg
ICAgICAgICAgMSwgLy8gT25seSBvbmUgcGFyYW1ldGVyCiAgICAgICAgICAgICBHU1RfVFlQRV9C
VUZGRVIpOwogfQogCiAKKyNpZm5kZWYgR1NUX0FQSV9WRVJTSU9OXzEKIEdzdEVsZW1lbnQqIHdl
YmtpdFZpZGVvU2lua05ldyhXZWJDb3JlOjpHU3RyZWFtZXJHV29ybGQqIGdzdEdXb3JsZCkKIHsK
ICAgICBHc3RFbGVtZW50KiBlbGVtZW50ID0gR1NUX0VMRU1FTlQoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX1ZJREVPX1NJTkssIDApKTsKICAgICBXRUJLSVRfVklERU9fU0lOSyhlbGVtZW50KS0+
cHJpdi0+Z3N0R1dvcmxkID0gZ3N0R1dvcmxkOwogICAgIHJldHVybiBlbGVtZW50OwogfQorI2Vs
c2UKK0dzdEVsZW1lbnQqIHdlYmtpdFZpZGVvU2lua05ldygpCit7CisgICAgcmV0dXJuIEdTVF9F
TEVNRU5UKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSURFT19TSU5LLCAwKSk7Cit9CisjZW5k
aWYKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0cmVhbWVy
LmgKaW5kZXggMzQwNTdhYS4uMDYxYjY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIu
aApAQCAtMjIsNyArMjIsMTAgQEAKIAogI2lmIEVOQUJMRShWSURFTykgJiYgVVNFKEdTVFJFQU1F
UikKIAorI2lmbmRlZiBHU1RfQVBJX1ZFUlNJT05fMQogI2luY2x1ZGUgIkdTdHJlYW1lckdXb3Js
ZC5oIgorI2VuZGlmCisKICNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgogI2luY2x1ZGUgPGdzdC92
aWRlby9nc3R2aWRlb3NpbmsuaD4KICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KQEAgLTU4
LDcgKzYxLDExIEBAIHN0cnVjdCBfV2ViS2l0VmlkZW9TaW5rQ2xhc3MgewogCiBHVHlwZSB3ZWJr
aXRfdmlkZW9fc2lua19nZXRfdHlwZSgpIEdfR05VQ19DT05TVDsKIAorI2lmbmRlZiBHU1RfQVBJ
X1ZFUlNJT05fMQogR3N0RWxlbWVudCogd2Via2l0VmlkZW9TaW5rTmV3KFdlYkNvcmU6OkdTdHJl
YW1lckdXb3JsZCopOworI2Vsc2UKK0dzdEVsZW1lbnQqIHdlYmtpdFZpZGVvU2lua05ldygpOwor
I2VuZGlmCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGQxZDkxNDcuLmM1ZDc2OTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJL
aXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC04NTMsMTAg
Kzg1MywxNCBAQCB2b2lkIFN0cmVhbWluZ0NsaWVudDo6ZGlkUmVjZWl2ZVJlc3BvbnNlKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZQogICAgIH0KIAogICAgIGlmIChnc3Rf
dGFnX2xpc3RfaXNfZW1wdHkodGFncykpCisjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEKKyAgICAg
ICAgZ3N0X3RhZ19saXN0X3VucmVmKHRhZ3MpOworI2Vsc2UKICAgICAgICAgZ3N0X3RhZ19saXN0
X2ZyZWUodGFncyk7CisjZW5kaWYKICAgICBlbHNlCiAjaWZkZWYgR1NUX0FQSV9WRVJTSU9OXzEK
LSAgICAgICAgZ3N0X3BhZF9wdXNoX2V2ZW50KEdTVF9QQURfQ0FTVChtX3NyYy0+cHJpdi0+c3Jj
cGFkKSwgZ3N0X2V2ZW50X25ld190YWcodGFncykpOworICAgICAgICBnc3RfcGFkX3B1c2hfZXZl
bnQoR1NUX1BBRF9DQVNUKG1fc3JjLT5wcml2LT5zcmNwYWQpLCBnc3RfZXZlbnRfbmV3X3RhZygi
V2ViS2l0V2ViU3JjIiwgdGFncykpOwogI2Vsc2UKICAgICAgICAgZ3N0X2VsZW1lbnRfZm91bmRf
dGFnc19mb3JfcGFkKEdTVF9FTEVNRU5UKG1fc3JjKSwgbV9zcmMtPnByaXYtPnNyY3BhZCwgdGFn
cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRl
eCAxZGE3OTc1Li45NTk1N2I1IDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmln
dXJlLmFjCkBAIC0zNDgsNyArMzQ4LDcgQEAgQUNfTVNHX1JFU1VMVChbJHdpdGhfZ3N0cmVhbWVy
XSkKIAogR1NUUkVBTUVSXzBfMTBfUkVRVUlSRURfVkVSU0lPTj0wLjEwCiBHU1RSRUFNRVJfMF8x
MF9QTFVHSU5TX0JBU0VfUkVRVUlSRURfVkVSU0lPTj0wLjEwLjMwCi1HU1RSRUFNRVJfMV8wX1JF
UVVJUkVEX1ZFUlNJT049MS4wCitHU1RSRUFNRVJfMV8wX1JFUVVJUkVEX1ZFUlNJT049MC4xMS45
MAogR1NUUkVBTUVSXzFfMF9QTFVHSU5TX0JBU0VfUkVRVUlSRURfVkVSU0lPTj0wLjExLjkwCiAK
IGNhc2UgIiR3aXRoX2dzdHJlYW1lciIgaW4KLS0gCjEuNy4xMC40
</data>
<flag name="review"
          id="155904"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="155910"
          type_id="3"
          status="-"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>