<?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>69835</bug_id>
          
          <creation_ts>2011-10-11 06:36:05 -0700</creation_ts>
          <short_desc>[GStreamer] WebAudio AudioDestination</short_desc>
          <delta_ts>2011-11-24 06:58:17 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Audio</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>69834</dependson>
    
    <dependson>72023</dependson>
    
    <dependson>73014</dependson>
          <blocked>61355</blocked>
    
    <blocked>69836</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>crogers</cc>
    
    <cc>donggwan.kim</cc>
    
    <cc>levin+threading</cc>
    
    <cc>pnormand</cc>
    
    <cc>s.choi</cc>
    
    <cc>slomo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>wingo</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>481605</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-11 06:36:05 -0700</bug_when>
    <thetext>This is for playback! We need to get floating point data from WebCore and feed it to a pipeline like this:

webkitwebaudiosrc ! wavparse ! audioconvert ! autoaudiosink

webkitwebaudiosrc is a bin containing:

queue ! capsfilter ! audioconvert -\
...                                  interleave -- wavenc -- srcpad

queue ! capsfilter ! audioconvert -/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491590</commentid>
    <comment_count>1</comment_count>
      <attachid>112685</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-27 08:14:41 -0700</bug_when>
    <thetext>Created attachment 112685
WebAudio GStreamer implementation: playback support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>491596</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-27 08:21:49 -0700</bug_when>
    <thetext>Attachment 112685 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/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:114:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:156:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:47:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 3 in 6 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>491646</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-27 09:47:33 -0700</bug_when>
    <thetext>Hi Sebastian, can you please have a look at this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497143</commentid>
    <comment_count>4</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-07 06:53:14 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Hi Sebastian, can you please have a look at this patch?

From IRC:

&lt;slomo_&gt; philn-tp: you should check if wavparse and the other elements are available (gst_element_factory_create() returns non-NULL)

15:39:02 &lt;slomo_&gt; philn-tp: you should check if wavparse and the other elements are available (gst_element_factory_create() returns non-NULL)
15:40:14 &lt;philn-tp&gt; ah, right, the ones not in -core and -base at least
15:40:48 &lt;slomo_&gt; philn-tp: center and mono are not the same
15:41:42 &lt;philn-tp&gt; yeah, i know, go tell that to Chris :)
15:42:45 &lt;philn-tp&gt; slomo_: it&apos;s in AudioBus.h, line 48
15:43:54 &lt;philn-tp&gt; slomo_: i&apos;ll file a bug about that
15:44:03 &lt;slomo_&gt; philn-tp: why is this using a separate task for the srcpad?
15:45:20 &lt;slomo_&gt; philn-tp: other than that this looks good
15:45:37 &lt;philn-tp&gt; slomo_: hum, not sure to understand your question ;)
15:47:19 &lt;slomo_&gt; philn-tp: i don&apos;t understand why there is a GstTask :)
15:49:03 &lt;philn-tp&gt; slomo_: well I need to pull the data from AudioBus when needed, would you suggest some other way than a task?
15:50:14 &lt;slomo_&gt; philn-tp: oh i see... no, that&apos;s fine :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497202</commentid>
    <comment_count>5</comment_count>
      <attachid>113874</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-07 08:46:00 -0800</bug_when>
    <thetext>Created attachment 113874
WebAudio GStreamer implementation: playback support

Added in this version, checks for missing autoaudiosink, wavenc, wavparse and
interleave elements, as suggested by Sebastian.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497206</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-07 08:49:04 -0800</bug_when>
    <thetext>Attachment 113874 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/audio/gstreamer/AudioDestinationGStreamer.cpp:92:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:117:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:159:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:47:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 6 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>497258</commentid>
    <comment_count>7</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-07 09:53:17 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Created an attachment (id=113874) [details]
&gt; WebAudio GStreamer implementation: playback support
&gt; 
&gt; Added in this version, checks for missing autoaudiosink, wavenc, wavparse and
&gt; interleave elements, as suggested by Sebastian.

There&apos;s still an issue with audio latency, I&apos;m looking at it now, it&apos;s quite noticeable especially in that demo: http://www.iquilezles.org/apps/soundtoy/index.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497884</commentid>
    <comment_count>8</comment_count>
      <attachid>114022</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-08 02:58:37 -0800</bug_when>
    <thetext>Created attachment 114022
WebAudio GStreamer implementation: playback support

Turns out the default queue max-buffer-size property set to 200
buffers was triggering this latency issue. I think it&apos;s safe to set it
to... 2 for instance. I get much better results here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497889</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-08 03:02:36 -0800</bug_when>
    <thetext>Attachment 114022 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/audio/gstreamer/AudioDestinationGStreamer.cpp:92:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:117:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:159:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:47:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 6 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>497894</commentid>
    <comment_count>10</comment_count>
      <attachid>114025</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-08 03:10:01 -0800</bug_when>
    <thetext>Created attachment 114025
WebAudio GStreamer implementation: playback support

One buffer limit is also working, even better!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497899</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-08 03:18:48 -0800</bug_when>
    <thetext>Attachment 114025 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/audio/gstreamer/AudioDestinationGStreamer.cpp:92:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:117:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:159:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:47:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 4 in 6 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>499684</commentid>
    <comment_count>12</comment_count>
      <attachid>114025</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-09 23:40:28 -0800</bug_when>
    <thetext>Comment on attachment 114025
WebAudio GStreamer implementation: playback support

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

Just a lot of nitpicky stuff below. I&apos;ll try to get a moment later to get a deeper understanding of this patch. Since GStreamer experts have already looked at it though, I&apos;m not too worried.

&gt; Source/WebCore/ChangeLog:31
&gt; +        * GNUmakefile.list.am:
&gt; +        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
&gt; +        (WebCore::onGStreamerWavparsePadAddedCallback):
&gt; +        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
&gt; +        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
&gt; +        (WebCore::AudioDestinationGStreamer::plugSink):
&gt; +        (WebCore::AudioDestinationGStreamer::start):
&gt; +        (WebCore::AudioDestinationGStreamer::stop):
&gt; +        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
&gt; +        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp: Added.
&gt; +        (getGStreamerMonoAudioCaps):
&gt; +        (webKitWebAudioGStreamerChannelPosition):
&gt; +        (webkit_web_audio_src_class_init):
&gt; +        (webkit_web_audio_src_init):
&gt; +        (webKitWebAudioSrcConstructed):
&gt; +        (webKitWebAudioSrcFinalize):
&gt; +        (webKitWebAudioSrcSetProperty):
&gt; +        (webKitWebAudioSrcGetProperty):
&gt; +        (webKitWebAudioSrcLoop):
&gt; +        (webKitWebAudioSrcChangeState):
&gt; +        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h: Added.

Please fill in this information.

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:31
&gt; +#include &quot;WebKitWebAudioSourceGStreamer.h&quot;
&gt; +
&gt; +#include &lt;gst/gst.h&gt;
&gt; +#include &lt;gst/pbutils/pbutils.h&gt;

No newline here.

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:58
&gt; +    static bool gstInitialized = false;
&gt; +    if (!gstInitialized)
&gt; +        gstInitialized = gst_init_check(0, 0, 0);

This code seems to be the same as the block in AudioFileReader::createBus. Is there any way to abstract it to a shared function somewhere?

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:63
&gt; +    GstElement* webkitAudioSrc = reinterpret_cast&lt;GstElement*&gt;(g_object_new(WEBKIT_TYPE_WEB_AUDIO_SRC, &quot;rate&quot;, static_cast&lt;gfloat&gt;(sampleRate), &quot;bus&quot;, static_cast&lt;gpointer&gt;(&amp;m_renderBus), &quot;provider&quot;, &amp;m_provider, NULL));

I think it would be good to break up this line in the way we often break up g_object_new and g_object_set calls. You don&apos;t need to cast float to gfloat nor do I think you need to cast &amp;m_renderBus to gpointer. gfloat is just a thin veil over float and gpointer is just a thin veil over void*.  In general, pointers to data types never need to be cast to void *, unless it&apos;s a const pointer, in which case you should use const_cast.

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:65
&gt; +    GstElement* wavparse = gst_element_factory_make(&quot;wavparse&quot;, 0);

wavParser?

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:114
&gt; +    GstPad* sinkPad = gst_element_get_static_pad(audioconvert, &quot;sink&quot;);
&gt; +    gst_pad_link(pad, sinkPad);
&gt; +    gst_object_unref(GST_OBJECT(sinkPad));

RefPtr here?

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:126
&gt; +    ASSERT(m_wavParserAvailable);
&gt; +    if (!m_wavParserAvailable)
&gt; +        return;

Could the wav parser not be avilable for a valid reason (missing codec,  for instance)? If that&apos;s the case I don&apos;t think an assert is the right thing here. That will cause a debug build to crash immediately, of course. That shouldn&apos;t happen in a valid error condition.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:30
&gt; +#include &quot;GOwnPtr.h&quot;
&gt; +
&gt; +#include &lt;gst/audio/multichannel.h&gt;
&gt; +#include &lt;gst/pbutils/pbutils.h&gt;

No blank line here.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:34
&gt; +#define WEBKIT_WEB_AUDIO_SRC_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_AUDIO_SRC, WebKitWebAudioSrcPrivate))

Ideally the private data would be allocated via the WTF allocator and not via the GLib allocator.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:42
&gt; +struct _WebKitWebAudioSrcPrivate {

_WebKitWebAudioSrcPrivate -&gt; _WebKitWebAudioSourcePrivate

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:47
&gt; +    guint64 offset; // current buffer offset.

Instead of making a comment why not just call the member current_buffer_offset?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:50
&gt; +    GstElement* wavenc;

wavEncoder?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:55
&gt; +    GSList* pads; // list of queue src pads. One queue for each planar audio channel.

&apos;list&apos; should be capitalized.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:56
&gt; +    GstPad* srcpad; // src pad of the element, interleaved wav data is pushed to it.

sourcePad?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:71
&gt; +static void webKitWebAudioSrcSetProperty(GObject*, guint, const GValue*, GParamSpec*);
&gt; +static void webKitWebAudioSrcGetProperty(GObject*, guint, GValue*, GParamSpec*);

The guint parameters should have names.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:77
&gt; +    return gst_caps_new_simple(&quot;audio/x-raw-float&quot;, &quot;rate&quot;, G_TYPE_INT, static_cast&lt;int&gt;(sampleRate), &quot;channels&quot;, G_TYPE_INT, 1, &quot;endianness&quot;, G_TYPE_INT, G_BYTE_ORDER, &quot;width&quot;, G_TYPE_INT, 32, NULL);

I think it will make this easier to read if you break it up.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:123
&gt; +    gst_element_class_add_pad_template(eklass,
&gt; +                                       gst_static_pad_template_get(&amp;srcTemplate));

This can be one line.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:129
&gt; +                                         (gchar*) &quot;WebKit WebAudio source element&quot;,
&gt; +                                         (gchar*) &quot;Source&quot;,
&gt; +                                         (gchar*) &quot;Handles WebAudio data from WebCore&quot;,
&gt; +                                         (gchar*) &quot;Philippe Normand &lt;pnormand@igalia.com&gt;&quot;);
&gt; +

You don&apos;t need to cast const char* to char*.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:142
&gt; +                                                       (GParamFlags) (G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)));

Please use static_cast here. In the API layer we typically save this to a temporary to avoid all the chatter.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:175
&gt; +    priv-&gt;task = gst_task_create((GstTaskFunction) webKitWebAudioSrcLoop, src);

Please use a C++ style cast here.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:179
&gt; +static void webKitWebAudioSrcConstructed(GObject *object)

The asterisk is in the wrong place here.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:217
&gt; +        GstCaps* monoCaps = getGStreamerMonoAudioCaps(priv-&gt;sampleRate);
&gt; +        g_object_set(capsfilter, &quot;caps&quot;, monoCaps, NULL);
&gt; +        gst_caps_unref(monoCaps);
&gt; +

monoCaps should be a smart pointer.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:219
&gt; +        g_object_set(queue, &quot;max-size-buffers&quot;, static_cast&lt;guint&gt;(1), NULL);

You should not need to cast 1 to a uint.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:251
&gt; +    if (priv-&gt;interleave)
&gt; +        gst_object_unref(GST_OBJECT(priv-&gt;interleave));
&gt; +    if (priv-&gt;wavenc)
&gt; +        gst_object_unref(GST_OBJECT(priv-&gt;wavenc));
&gt; +

If your private data structure was a C++ object you could use a the destructor and smart pointers could take care of most of this cleanup. We use this pattern quite a bit in the API layer.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:257
&gt; +    GST_CALL_PARENT(G_OBJECT_CLASS, finalize, ((GObject* )(src)));

G_OBJECT(src) here?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:265
&gt; +    switch (propID) {

Nit: propID = propId

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:270
&gt; +        priv-&gt;bus = reinterpret_cast&lt;AudioBus*&gt;(g_value_get_pointer(value));

You only need a staic cast here.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:273
&gt; +        priv-&gt;provider = reinterpret_cast&lt;AudioSourceProvider*&gt;(g_value_get_pointer(value));

Ditto.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:281
&gt; +static void webKitWebAudioSrcGetProperty(GObject* object, guint propID, GValue* value, GParamSpec* pspec)

propID -&gt; propId.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:311
&gt; +    size_t requestedFrames = 128;

This should probably be static with a comment explaining why you chose 128 here.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:312
&gt; +    guint bufferSize = requestedFrames * sizeof(float);

Please use unsigned instead of guint.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:315
&gt; +    for (guint index = 0; index &lt; g_slist_length(priv-&gt;pads); index++) {

Ditto.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:324
&gt; +        GstCaps* monoCaps = getGStreamerMonoAudioCaps(priv-&gt;sampleRate);

This should be  asmart pointer.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:340
&gt; +    GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;

ret -&gt; returnValue

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:347
&gt; +            gst_element_post_message(element,
&gt; +                                     gst_missing_element_message_new(element, &quot;interleave&quot;));

This can be one line

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:348
&gt; +            GST_ELEMENT_ERROR(src, CORE, MISSING_PLUGIN, (0), (&quot;no interleave&quot;));

Why the parenthesis around 0?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:354
&gt; +            gst_element_post_message(element,
&gt; +                                     gst_missing_element_message_new(element, &quot;wavenc&quot;));
&gt; +            GST_ELEMENT_ERROR(src, CORE, MISSING_PLUGIN, (0), (&quot;no wavenc&quot;));

Dittos.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:363
&gt; +    if (G_UNLIKELY(ret == GST_STATE_CHANGE_FAILURE)) {

There&apos;s a WTF version of LIKELY and UNLIKELY. I think we should use those in WebCore code.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:25
&gt; +G_BEGIN_DECLS

Is this public API? G_BEGIN_DECLS ensures that these symbols are unmangled so that they can be called from a foriegn C compilation unit. Is that necessary? A lot of this header looks like stuff you can omit actually. A lot of it can probably be private to the implementation file and the dead code (uncalled) should probably be removed. I think we should make this change for all private GObjects. Basically just trim it down to what you need in some other file.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:40
&gt; +    WebKitWebAudioSrcPrivate *priv;

The asterisk is in the wrong place here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499849</commentid>
    <comment_count>13</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-10 06:25:40 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 114025 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114025&amp;action=review
&gt; 
&gt; Just a lot of nitpicky stuff below. I&apos;ll try to get a moment later to get a deeper understanding of this patch. Since GStreamer experts have already looked at it though, I&apos;m not too worried.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:31
&gt; &gt; +        * GNUmakefile.list.am:
&gt; &gt; +        * platform/audio/gstreamer/AudioDestinationGStreamer.cpp:
&gt; &gt; +        (WebCore::onGStreamerWavparsePadAddedCallback):
&gt; &gt; +        (WebCore::AudioDestinationGStreamer::AudioDestinationGStreamer):
&gt; &gt; +        (WebCore::AudioDestinationGStreamer::~AudioDestinationGStreamer):
&gt; &gt; +        (WebCore::AudioDestinationGStreamer::plugSink):
&gt; &gt; +        (WebCore::AudioDestinationGStreamer::start):
&gt; &gt; +        (WebCore::AudioDestinationGStreamer::stop):
&gt; &gt; +        * platform/audio/gstreamer/AudioDestinationGStreamer.h:
&gt; &gt; +        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp: Added.
&gt; &gt; +        (getGStreamerMonoAudioCaps):
&gt; &gt; +        (webKitWebAudioGStreamerChannelPosition):
&gt; &gt; +        (webkit_web_audio_src_class_init):
&gt; &gt; +        (webkit_web_audio_src_init):
&gt; &gt; +        (webKitWebAudioSrcConstructed):
&gt; &gt; +        (webKitWebAudioSrcFinalize):
&gt; &gt; +        (webKitWebAudioSrcSetProperty):
&gt; &gt; +        (webKitWebAudioSrcGetProperty):
&gt; &gt; +        (webKitWebAudioSrcLoop):
&gt; &gt; +        (webKitWebAudioSrcChangeState):
&gt; &gt; +        * platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h: Added.
&gt; 
&gt; Please fill in this information.
&gt; 

Done

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:31
&gt; &gt; +#include &quot;WebKitWebAudioSourceGStreamer.h&quot;
&gt; &gt; +
&gt; &gt; +#include &lt;gst/gst.h&gt;
&gt; &gt; +#include &lt;gst/pbutils/pbutils.h&gt;
&gt; 
&gt; No newline here.
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:58
&gt; &gt; +    static bool gstInitialized = false;
&gt; &gt; +    if (!gstInitialized)
&gt; &gt; +        gstInitialized = gst_init_check(0, 0, 0);
&gt; 
&gt; This code seems to be the same as the block in AudioFileReader::createBus. Is there any way to abstract it to a shared function somewhere?
&gt; 

Hum. The issue I see with that is that AudioDestination and the FileReader can run in different threads, we really need at least two calls of gst_init_check on each side and avoid additional ones, not sure how to implement that in a separate function.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:63
&gt; &gt; +    GstElement* webkitAudioSrc = reinterpret_cast&lt;GstElement*&gt;(g_object_new(WEBKIT_TYPE_WEB_AUDIO_SRC, &quot;rate&quot;, static_cast&lt;gfloat&gt;(sampleRate), &quot;bus&quot;, static_cast&lt;gpointer&gt;(&amp;m_renderBus), &quot;provider&quot;, &amp;m_provider, NULL));
&gt; 
&gt; I think it would be good to break up this line in the way we often break up g_object_new and g_object_set calls. You don&apos;t need to cast float to gfloat nor do I think you need to cast &amp;m_renderBus to gpointer. gfloat is just a thin veil over float and gpointer is just a thin veil over void*.  In general, pointers to data types never need to be cast to void *, unless it&apos;s a const pointer, in which case you should use const_cast.
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:65
&gt; &gt; +    GstElement* wavparse = gst_element_factory_make(&quot;wavparse&quot;, 0);
&gt; 
&gt; wavParser?
&gt; 

Sure!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:114
&gt; &gt; +    GstPad* sinkPad = gst_element_get_static_pad(audioconvert, &quot;sink&quot;);
&gt; &gt; +    gst_pad_link(pad, sinkPad);
&gt; &gt; +    gst_object_unref(GST_OBJECT(sinkPad));
&gt; 
&gt; RefPtr here?
&gt; 

Sure, I&apos;ll send a separate patch for GstPad support in GRefPtrGStreamer though.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:126
&gt; &gt; +    ASSERT(m_wavParserAvailable);
&gt; &gt; +    if (!m_wavParserAvailable)
&gt; &gt; +        return;
&gt; 
&gt; Could the wav parser not be avilable for a valid reason (missing codec,  for instance)? If that&apos;s the case I don&apos;t think an assert is the right thing here. That will cause a debug build to crash immediately, of course. That shouldn&apos;t happen in a valid error condition.
&gt; 

wavparse is in gst-plugins-good which is a runtime dependency. Not having -good will make this useless anyway. I thought asserting was the way to go in this case but I&apos;m ok with removing it :)

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:30
&gt; &gt; +#include &quot;GOwnPtr.h&quot;
&gt; &gt; +
&gt; &gt; +#include &lt;gst/audio/multichannel.h&gt;
&gt; &gt; +#include &lt;gst/pbutils/pbutils.h&gt;
&gt; 
&gt; No blank line here.
&gt; 

Sure!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:34
&gt; &gt; +#define WEBKIT_WEB_AUDIO_SRC_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_AUDIO_SRC, WebKitWebAudioSrcPrivate))
&gt; 
&gt; Ideally the private data would be allocated via the WTF allocator and not via the GLib allocator.

Hum, ok. Trying this with help from Carlos.

&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:42
&gt; &gt; +struct _WebKitWebAudioSrcPrivate {
&gt; 
&gt; _WebKitWebAudioSrcPrivate -&gt; _WebKitWebAudioSourcePrivate
&gt; 

OK.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:47
&gt; &gt; +    guint64 offset; // current buffer offset.
&gt; 
&gt; Instead of making a comment why not just call the member current_buffer_offset?
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:50
&gt; &gt; +    GstElement* wavenc;
&gt; 
&gt; wavEncoder?
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:55
&gt; &gt; +    GSList* pads; // list of queue src pads. One queue for each planar audio channel.
&gt; 
&gt; &apos;list&apos; should be capitalized.
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:56
&gt; &gt; +    GstPad* srcpad; // src pad of the element, interleaved wav data is pushed to it.
&gt; 
&gt; sourcePad?
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:71
&gt; &gt; +static void webKitWebAudioSrcSetProperty(GObject*, guint, const GValue*, GParamSpec*);
&gt; &gt; +static void webKitWebAudioSrcGetProperty(GObject*, guint, GValue*, GParamSpec*);
&gt; 
&gt; The guint parameters should have names.
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:77
&gt; &gt; +    return gst_caps_new_simple(&quot;audio/x-raw-float&quot;, &quot;rate&quot;, G_TYPE_INT, static_cast&lt;int&gt;(sampleRate), &quot;channels&quot;, G_TYPE_INT, 1, &quot;endianness&quot;, G_TYPE_INT, G_BYTE_ORDER, &quot;width&quot;, G_TYPE_INT, 32, NULL);
&gt; 
&gt; I think it will make this easier to read if you break it up.
&gt; 

Ok, but style bot won&apos;t like it! :)

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:123
&gt; &gt; +    gst_element_class_add_pad_template(eklass,
&gt; &gt; +                                       gst_static_pad_template_get(&amp;srcTemplate));
&gt; 
&gt; This can be one line.
&gt; 

Sure.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:129
&gt; &gt; +                                         (gchar*) &quot;WebKit WebAudio source element&quot;,
&gt; &gt; +                                         (gchar*) &quot;Source&quot;,
&gt; &gt; +                                         (gchar*) &quot;Handles WebAudio data from WebCore&quot;,
&gt; &gt; +                                         (gchar*) &quot;Philippe Normand &lt;pnormand@igalia.com&gt;&quot;);
&gt; &gt; +
&gt; 
&gt; You don&apos;t need to cast const char* to char*.
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:142
&gt; &gt; +                                                       (GParamFlags) (G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE)));
&gt; 
&gt; Please use static_cast here. In the API layer we typically save this to a temporary to avoid all the chatter.
&gt; 

Done!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:175
&gt; &gt; +    priv-&gt;task = gst_task_create((GstTaskFunction) webKitWebAudioSrcLoop, src);
&gt; 
&gt; Please use a C++ style cast here.
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:179
&gt; &gt; +static void webKitWebAudioSrcConstructed(GObject *object)
&gt; 
&gt; The asterisk is in the wrong place here.
&gt; 

Oops.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:217
&gt; &gt; +        GstCaps* monoCaps = getGStreamerMonoAudioCaps(priv-&gt;sampleRate);
&gt; &gt; +        g_object_set(capsfilter, &quot;caps&quot;, monoCaps, NULL);
&gt; &gt; +        gst_caps_unref(monoCaps);
&gt; &gt; +
&gt; 
&gt; monoCaps should be a smart pointer.
&gt; 

Hum, this will need support in GRefPtrGStreamer as well :( Ok... :)

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:219
&gt; &gt; +        g_object_set(queue, &quot;max-size-buffers&quot;, static_cast&lt;guint&gt;(1), NULL);
&gt; 
&gt; You should not need to cast 1 to a uint.
&gt; 

Well it turns out I do :(
Spent an hour figuring it out when I added this.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:251
&gt; &gt; +    if (priv-&gt;interleave)
&gt; &gt; +        gst_object_unref(GST_OBJECT(priv-&gt;interleave));
&gt; &gt; +    if (priv-&gt;wavenc)
&gt; &gt; +        gst_object_unref(GST_OBJECT(priv-&gt;wavenc));
&gt; &gt; +
&gt; 
&gt; If your private data structure was a C++ object you could use a the destructor and smart pointers could take care of most of this cleanup. We use this pattern quite a bit in the API layer.
&gt; 

Alright.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:257
&gt; &gt; +    GST_CALL_PARENT(G_OBJECT_CLASS, finalize, ((GObject* )(src)));
&gt; 
&gt; G_OBJECT(src) here?
&gt; 

Sure.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:265
&gt; &gt; +    switch (propID) {
&gt; 
&gt; Nit: propID = propId
&gt; 

I made it propertyId.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:270
&gt; &gt; +        priv-&gt;bus = reinterpret_cast&lt;AudioBus*&gt;(g_value_get_pointer(value));
&gt; 
&gt; You only need a staic cast here.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:273
&gt; &gt; +        priv-&gt;provider = reinterpret_cast&lt;AudioSourceProvider*&gt;(g_value_get_pointer(value));
&gt; 
&gt; Ditto.
&gt; 

Ok.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:281
&gt; &gt; +static void webKitWebAudioSrcGetProperty(GObject* object, guint propID, GValue* value, GParamSpec* pspec)
&gt; 
&gt; propID -&gt; propId.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:311
&gt; &gt; +    size_t requestedFrames = 128;
&gt; 
&gt; This should probably be static with a comment explaining why you chose 128 here.
&gt; 

Alright I&apos;ll make it a constant in the AudioDestination implementation and pass it as new property to the src element, if that&apos;s OK with you.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:312
&gt; &gt; +    guint bufferSize = requestedFrames * sizeof(float);
&gt; 
&gt; Please use unsigned instead of guint.
&gt; 

Ok.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:315
&gt; &gt; +    for (guint index = 0; index &lt; g_slist_length(priv-&gt;pads); index++) {
&gt; 
&gt; Ditto.
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:324
&gt; &gt; +        GstCaps* monoCaps = getGStreamerMonoAudioCaps(priv-&gt;sampleRate);
&gt; 
&gt; This should be  asmart pointer.
&gt; 

I tried a GRefPtr here but it doesn&apos;t work when I need to update the GstStructure just below.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:340
&gt; &gt; +    GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
&gt; 
&gt; ret -&gt; returnValue
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:347
&gt; &gt; +            gst_element_post_message(element,
&gt; &gt; +                                     gst_missing_element_message_new(element, &quot;interleave&quot;));
&gt; 
&gt; This can be one line
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:348
&gt; &gt; +            GST_ELEMENT_ERROR(src, CORE, MISSING_PLUGIN, (0), (&quot;no interleave&quot;));
&gt; 
&gt; Why the parenthesis around 0?
&gt; 

In the macro the (0) text argument is used like this: gchar *__txt = _gst_element_error_printf text;
So here it translates to gchar *__txt = _gst_element_error_printf(0);

I can add a more relevant value if necessary :)

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:354
&gt; &gt; +            gst_element_post_message(element,
&gt; &gt; +                                     gst_missing_element_message_new(element, &quot;wavenc&quot;));
&gt; &gt; +            GST_ELEMENT_ERROR(src, CORE, MISSING_PLUGIN, (0), (&quot;no wavenc&quot;));
&gt; 
&gt; Dittos.
&gt; 

Okeys ^ :)

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:363
&gt; &gt; +    if (G_UNLIKELY(ret == GST_STATE_CHANGE_FAILURE)) {
&gt; 
&gt; There&apos;s a WTF version of LIKELY and UNLIKELY. I think we should use those in WebCore code.
&gt; 

Sure.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:25
&gt; &gt; +G_BEGIN_DECLS
&gt; 
&gt; Is this public API? G_BEGIN_DECLS ensures that these symbols are unmangled so that they can be called from a foriegn C compilation unit. Is that necessary? A lot of this header looks like stuff you can omit actually. A lot of it can probably be private to the implementation file and the dead code (uncalled) should probably be removed. I think we should make this change for all private GObjects. Basically just trim it down to what you need in some other file.
&gt; 

Hum. OK!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:40
&gt; &gt; +    WebKitWebAudioSrcPrivate *priv;
&gt; 
&gt; The asterisk is in the wrong place here.

Oh, my! :)
Thanks for the review Martin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499856</commentid>
    <comment_count>14</comment_count>
      <attachid>114487</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-10 06:38:06 -0800</bug_when>
    <thetext>Created attachment 114487
WebAudio GStreamer implementation: playback support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>499866</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-10 06:50:54 -0800</bug_when>
    <thetext>Attachment 114487 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/audio/gstreamer/AudioDestinationGStreamer.cpp:66:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:91:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:131:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:176:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 6 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>499999</commentid>
    <comment_count>16</comment_count>
      <attachid>114487</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-10 09:32:42 -0800</bug_when>
    <thetext>Comment on attachment 114487
WebAudio GStreamer implementation: playback support

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

Just a couple more nitpicky things. I&apos;ll try to do a real review soon!

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:35
&gt; +const unsigned framesToPull = 128;

This definitely goes beyond what I suggested, but I think it&apos;s an interesting approach. I was just interested in having a small comment explaining why you pull 128 frames at a time.

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:65
&gt; +    GstElement* webkitAudioSrc = reinterpret_cast&lt;GstElement*&gt;(g_object_new(WEBKIT_TYPE_WEB_AUDIO_SRC,

Sorry maybe just format like this:

...g_object_new(WEBKIT_TYPE_WEB_AUDIO_SRC,
                &quot;rate&quot;, sampleRate,
                &quot;bus&quot;,  &amp;m_renderBus,

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:69
&gt; +enum {
&gt; +    PROP_RATE = 1,
&gt; +    PROP_BUS = 2,
&gt; +    PROP_PROVIDER = 3,
&gt; +    PROP_FRAMES = 4
&gt; +};

I think you can omit the values here...but I&apos;m not certain.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:134
&gt; +    GObjectClass* oklass = G_OBJECT_CLASS(klass);
&gt; +    GstElementClass* eklass = GST_ELEMENT_CLASS(klass);

I think I&apos;d prefer objectClass and elementClass here.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:220
&gt; +    // gst_object_ref_sink(GST_OBJECT(priv-&gt;interleave));
&gt; +    // gst_object_ref_sink(GST_OBJECT(priv-&gt;wavEncoder));

Was this left in by mistake?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:26
&gt; +#define WEBKIT_TYPE_WEB_AUDIO_SRC (webkit_web_audio_src_get_type())
&gt; +#define WEBKIT_WEB_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_AUDIO_SRC, WebKitWebAudioSrc))

Nit. You you should remove the extra space before the parenthesis.

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30
&gt;&gt; +GType webkit_web_audio_src_get_type(void);
&gt; 
&gt; webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]

You can omit the &quot;void&quot; from the argument list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500612</commentid>
    <comment_count>17</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-11 02:50:26 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 114487 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114487&amp;action=review
&gt; 
&gt; Just a couple more nitpicky things. I&apos;ll try to do a real review soon!
&gt; 
&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:35
&gt; &gt; +const unsigned framesToPull = 128;
&gt; 
&gt; This definitely goes beyond what I suggested, but I think it&apos;s an interesting approach. I was just interested in having a small comment explaining why you pull 128 frames at a time.
&gt; 

When you create an AudioBus with a specific size you can only pull that number of frames at a time, from my understanding. That&apos;s why I made it constant in AudioDestination.

&gt; &gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:65
&gt; &gt; +    GstElement* webkitAudioSrc = reinterpret_cast&lt;GstElement*&gt;(g_object_new(WEBKIT_TYPE_WEB_AUDIO_SRC,
&gt; 
&gt; Sorry maybe just format like this:
&gt; 
&gt; ...g_object_new(WEBKIT_TYPE_WEB_AUDIO_SRC,
&gt;                 &quot;rate&quot;, sampleRate,
&gt;                 &quot;bus&quot;,  &amp;m_renderBus,
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:69
&gt; &gt; +enum {
&gt; &gt; +    PROP_RATE = 1,
&gt; &gt; +    PROP_BUS = 2,
&gt; &gt; +    PROP_PROVIDER = 3,
&gt; &gt; +    PROP_FRAMES = 4
&gt; &gt; +};
&gt; 
&gt; I think you can omit the values here...but I&apos;m not certain.
&gt; 

The first one no but the others yes indeed :)

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:134
&gt; &gt; +    GObjectClass* oklass = G_OBJECT_CLASS(klass);
&gt; &gt; +    GstElementClass* eklass = GST_ELEMENT_CLASS(klass);
&gt; 
&gt; I think I&apos;d prefer objectClass and elementClass here.
&gt; 

Ok!

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:220
&gt; &gt; +    // gst_object_ref_sink(GST_OBJECT(priv-&gt;interleave));
&gt; &gt; +    // gst_object_ref_sink(GST_OBJECT(priv-&gt;wavEncoder));
&gt; 
&gt; Was this left in by mistake?
&gt; 

Heh. Yes :)

&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:26
&gt; &gt; +#define WEBKIT_TYPE_WEB_AUDIO_SRC (webkit_web_audio_src_get_type())
&gt; &gt; +#define WEBKIT_WEB_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_AUDIO_SRC, WebKitWebAudioSrc))
&gt; 
&gt; Nit. You you should remove the extra space before the parenthesis.
&gt; 

What extra space?

&gt; &gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30
&gt; &gt;&gt; +GType webkit_web_audio_src_get_type(void);
&gt; &gt; 
&gt; &gt; webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
&gt; 
&gt; You can omit the &quot;void&quot; from the argument list.

Sure!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500615</commentid>
    <comment_count>18</comment_count>
      <attachid>114658</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-11 03:05:09 -0800</bug_when>
    <thetext>Created attachment 114658
WebAudio GStreamer implementation: playback support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500618</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-11 03:08:46 -0800</bug_when>
    <thetext>Attachment 114658 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/audio/gstreamer/AudioDestinationGStreamer.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:91:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:131:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:176:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 6 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>502717</commentid>
    <comment_count>20</comment_count>
      <attachid>115118</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-15 01:08:22 -0800</bug_when>
    <thetext>Created attachment 115118
WebAudio GStreamer implementation: playback support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502718</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-15 01:11:15 -0800</bug_when>
    <thetext>Attachment 115118 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/audio/gstreamer/AudioDestinationGStreamer.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:91:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:131:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:176:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 6 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>505763</commentid>
    <comment_count>22</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-18 07:17:14 -0800</bug_when>
    <thetext>Martin, any chance we can get this one in soon or should we just wait the hackfest?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506437</commentid>
    <comment_count>23</comment_count>
      <attachid>115118</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-19 13:19:38 -0800</bug_when>
    <thetext>Comment on attachment 115118
WebAudio GStreamer implementation: playback support

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

Looks good! I have a few comments. I feel confident enough to r+ this after fixes now.

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:91
&gt; +void AudioDestinationGStreamer::plugSink(GstPad* pad)

I think this method deserves a more interesting name. plugSink is pretty generic. How about finishBuildingPipelineAfterWavParserPadReady or something similar?

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:95
&gt; +    GstElement* audiosink = gst_element_factory_make(&quot;autoaudiosink&quot;, 0);

RefPtr here?

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:98
&gt; +    if (audiosink) {

Just move the early return below before here.

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:114
&gt; +    ASSERT_WITH_MESSAGE(m_audioSinkAvailable, &quot;Failed to create GStreamer autoaudiosink element&quot;);
&gt; +    if (!m_audioSinkAvailable)
&gt; +        return;

(this one)

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:121
&gt; +    GRefPtr&lt;GstPad&gt; sinkPad(gst_element_get_static_pad(audioconvert, &quot;sink&quot;));
&gt; +    gst_pad_link(pad, sinkPad.get());

You are leaking sinkPad here because you didn&apos;t call adoptGRef.

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:139
&gt;  void AudioDestinationGStreamer::stop()

Comment unrelated to your patch: &quot;stop&quot; seems confusing, because in many audio contexts it means &quot;pause and then reset the location to 0.&quot;

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:57
&gt; +    GstTask* task;

GRefPtr here?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:207
&gt; +    priv-&gt;interleave = gst_element_factory_make(&quot;interleave&quot;, 0);
&gt; +    priv-&gt;wavEncoder = gst_element_factory_make(&quot;wavenc&quot;, 0);

Do these have floating references or full references? If full references you need to call adoptGRef here.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:243
&gt; +        GRefPtr&lt;GstPad&gt; srcPad(gst_element_get_static_pad(audioconvert, &quot;src&quot;));
&gt; +        GRefPtr&lt;GstPad&gt; sinkPad(gst_element_get_request_pad(priv-&gt;interleave.get(), &quot;sink%d&quot;));

You are leadking the pads here because of missing adoptGRef.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:335
&gt; +        memcpy(GST_BUFFER_DATA(buffer), priv-&gt;bus-&gt;channel(index)-&gt;data(), bufferSize);
&gt; +        GST_BUFFER_OFFSET(buffer) = priv-&gt;currentBufferOffset;
&gt; +        GST_BUFFER_OFFSET_END(buffer) = priv-&gt;currentBufferOffset + priv-&gt;framesToPull;
&gt; +

Hrm. Isn&apos;t there any way to have a GstBuffer point to some static memory that it won&apos;t free when it finishes? It seems this is possible if you don&apos;t use mallocdata. If so, you can avoid a memcpy here. Maybe it even makes sense to have one large buffer and create sub GstBuffers here. That would avoid fragmentation, at least.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:336
&gt; +        GstCaps* monoCaps = getGStreamerMonoAudioCaps(priv-&gt;sampleRate);

This should be GRefPtr&lt;GstCaps&gt; monoCaps = adoptGRef(getGStreamerMonoAudioCaps(priv-&gt;samleRate));

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:26
&gt; +#define WEBKIT_TYPE_WEB_AUDIO_SRC (webkit_web_audio_src_get_type())
&gt; +#define WEBKIT_WEB_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_AUDIO_SRC, WebKitWebAudioSrc))

Nit: Extra spaces  after macro names.

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:28
&gt; +typedef struct _WebKitWebAudioSrc        WebKitWebAudioSrc;

no need to align this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506749</commentid>
    <comment_count>24</comment_count>
      <attachid>115118</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-21 00:06:43 -0800</bug_when>
    <thetext>Comment on attachment 115118
WebAudio GStreamer implementation: playback support

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

&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:98
&gt;&gt; +    if (audiosink) {
&gt; 
&gt; Just move the early return below before here.

Hum I can&apos;t because m_audioSinkAvailable might change just below, line 106.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506990</commentid>
    <comment_count>25</comment_count>
      <attachid>115118</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-21 08:24:24 -0800</bug_when>
    <thetext>Comment on attachment 115118
WebAudio GStreamer implementation: playback support

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

&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:91
&gt;&gt; +void AudioDestinationGStreamer::plugSink(GstPad* pad)
&gt; 
&gt; I think this method deserves a more interesting name. plugSink is pretty generic. How about finishBuildingPipelineAfterWavParserPadReady or something similar?

Sure!

&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:95
&gt;&gt; +    GstElement* audiosink = gst_element_factory_make(&quot;autoaudiosink&quot;, 0);
&gt; 
&gt; RefPtr here?

Doesn&apos;t work :( I need to unref only if the element is not added to the bin.

&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:121

&gt; 
&gt; You are leaking sinkPad here because you didn&apos;t call adoptGRef.

:( Fixed!

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:57
&gt;&gt; +    GstTask* task;
&gt; 
&gt; GRefPtr here?

Ok

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:207
&gt;&gt; +    priv-&gt;wavEncoder = gst_element_factory_make(&quot;wavenc&quot;, 0);
&gt; 
&gt; Do these have floating references or full references? If full references you need to call adoptGRef here.

Well, full references afaik, so trying to use adoptGRef here, the destructor is called immediately :(

#0  WTF::derefGPtr&lt;_GstElement&gt; (ptr=0x8077260) at ../../Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp:42
#1  0xb6af957d in WTF::GRefPtr&lt;_GstElement&gt;::~GRefPtr (this=0xbfffd75c, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/JavaScriptCore/wtf/gobject/GRefPtr.h:72
#2  0xb6af851d in webKitWebAudioSrcConstructed (object=0x84c7150)
    at ../../Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:206

Not sure what&apos;s going on here :( So the GstElement is unreffed and destructed even before we get a chance to add it to the bin...

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:243
&gt;&gt; +        GRefPtr&lt;GstPad&gt; sinkPad(gst_element_get_request_pad(priv-&gt;interleave.get(), &quot;sink%d&quot;));
&gt; 
&gt; You are leadking the pads here because of missing adoptGRef.

Right :/ Fixed

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:335

&gt; 
&gt; Hrm. Isn&apos;t there any way to have a GstBuffer point to some static memory that it won&apos;t free when it finishes? It seems this is possible if you don&apos;t use mallocdata. If so, you can avoid a memcpy here. Maybe it even makes sense to have one large buffer and create sub GstBuffers here. That would avoid fragmentation, at least.

A &quot;large buffer&quot;? How large would it be given that it&apos;s possible for the playback pipeline to run as long as your browser keeps a WebAudio-enabled page open?

I&apos;m not sure it&apos;s possible to have a GstBuffer point to static memory. Another thing that&apos;s not possible here (afaik) is using gst_pad_alloc which requires srcpads while we need to chain to queue&apos;s sink pad. :/

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:336
&gt;&gt; +        GstCaps* monoCaps = getGStreamerMonoAudioCaps(priv-&gt;sampleRate);
&gt; 
&gt; This should be GRefPtr&lt;GstCaps&gt; monoCaps = adoptGRef(getGStreamerMonoAudioCaps(priv-&gt;samleRate));

I tried that already and it didn&apos;t work out, the gst_structure_set below failing.

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:26
&gt;&gt; +#define WEBKIT_WEB_AUDIO_SRC(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_AUDIO_SRC, WebKitWebAudioSrc))
&gt; 
&gt; Nit: Extra spaces  after macro names.

I&apos;m sorry but I see nothing wrong here! :/ There&apos;s only one space between the macro name and its definition.

#define WEBKIT_WEB_AUDIO_SRC(obj)(G_TYPE_CHECK_INSTANCE_CAST((obj), WEBKIT_TYPE_WEB_AUDIO_SRC, WebKitWebAudioSrc))

obviously won&apos;t work.

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:28
&gt;&gt; +typedef struct _WebKitWebAudioSrc        WebKitWebAudioSrc;
&gt; 
&gt; no need to align this.

Right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506996</commentid>
    <comment_count>26</comment_count>
      <attachid>116095</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-21 08:38:54 -0800</bug_when>
    <thetext>Created attachment 116095
WebAudio GStreamer implementation: playback support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506998</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-21 08:41:57 -0800</bug_when>
    <thetext>Attachment 116095 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/audio/gstreamer/AudioDestinationGStreamer.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:91:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:131:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:176:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 8 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>507017</commentid>
    <comment_count>28</comment_count>
      <attachid>115118</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-21 09:11:50 -0800</bug_when>
    <thetext>Comment on attachment 115118
WebAudio GStreamer implementation: playback support

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

&gt;&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:95
&gt;&gt;&gt; +    GstElement* audiosink = gst_element_factory_make(&quot;autoaudiosink&quot;, 0);
&gt;&gt; 
&gt;&gt; RefPtr here?
&gt; 
&gt; Doesn&apos;t work :( I need to unref only if the element is not added to the bin.

You can use GRefPtr::leakRef in that case with a note that gst_add_many is transfer full.

&gt;&gt;&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:98
&gt;&gt;&gt; +    if (audiosink) {
&gt;&gt; 
&gt;&gt; Just move the early return below before here.
&gt; 
&gt; Hum I can&apos;t because m_audioSinkAvailable might change just below, line 106.

If m_audioSinkAvailable changes you return early right away, so it shouldn&apos;t matter. What I&apos;m suggesting is:

ASSERT_WITH_MESSAGE(audioSink, &quot;Failed to create GStreamer autoaudiosink element&quot;);
if (!audioSink)
    return;

GstStateChangeReturn stateChangeReturn = gst_element_set_state(audiosink, GST_STATE_READY);
ASSERT_WITH_MESSAGE(m_audioSinkAvailable, &quot;Failed to change autoaudiosink element state&quot;);
if (stateChangeReturn == GST_STATE_CHANGE_FAILURE) {
    gst_element_set_state(audiosink, GST_STATE_NULL);
    m_audioSinkAvailable = false;
    gst_object_unref(audiosink);
            return;

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:112
&gt; +    ASSERT_WITH_MESSAGE(m_audioSinkAvailable, &quot;Failed to create GStreamer autoaudiosink element&quot;);

ASSERT actually crashes the application in debug mode. Can happen as the result of a missing installed plugin or some other non-fatal gstreamer error? If that&apos;s the case, I think you sould just print a message and not assert. The main signal that this shouldn&apos;t be an assert is that you are handling the failure case really thoroughly.

&gt;&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:207
&gt;&gt;&gt; +    priv-&gt;wavEncoder = gst_element_factory_make(&quot;wavenc&quot;, 0);
&gt;&gt; 
&gt;&gt; Do these have floating references or full references? If full references you need to call adoptGRef here.
&gt; 
&gt; Well, full references afaik, so trying to use adoptGRef here, the destructor is called immediately :(
&gt; 
&gt; #0  WTF::derefGPtr&lt;_GstElement&gt; (ptr=0x8077260) at ../../Source/WebCore/platform/graphics/gstreamer/GRefPtrGStreamer.cpp:42
&gt; #1  0xb6af957d in WTF::GRefPtr&lt;_GstElement&gt;::~GRefPtr (this=0xbfffd75c, __in_chrg=&lt;optimized out&gt;)
&gt;     at ../../Source/JavaScriptCore/wtf/gobject/GRefPtr.h:72
&gt; #2  0xb6af851d in webKitWebAudioSrcConstructed (object=0x84c7150)
&gt;     at ../../Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:206
&gt; 
&gt; Not sure what&apos;s going on here :( So the GstElement is unreffed and destructed even before we get a chance to add it to the bin...

That would suggest they are floating references. The documentation seems to confirm that: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstObject.html

I think that this means the GRefPtr needs to do:
gst_object_ref(GST_OBJECT(m_ptr));
gst_object_sink(GST_OBJECT(m_ptr));

This is because the gst_object_sink function works differently than the g_object_ref_sink function. gst_object_sink does nothing if the GstObject does not have a floating reference, while in this case g_object_ref_sink increases the reference count by one. I think that should fix the crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508048</commentid>
    <comment_count>29</comment_count>
      <attachid>116339</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-23 03:54:49 -0800</bug_when>
    <thetext>Created attachment 116339
WebAudio GStreamer implementation: playback support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508050</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 03:57:02 -0800</bug_when>
    <thetext>Attachment 116339 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/audio/gstreamer/AudioDestinationGStreamer.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:92:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:132:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:177:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 8 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>508127</commentid>
    <comment_count>31</comment_count>
      <attachid>116355</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-23 07:32:05 -0800</bug_when>
    <thetext>Created attachment 116355
WebAudio GStreamer implementation: playback support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508132</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-23 07:35:47 -0800</bug_when>
    <thetext>Attachment 116355 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/audio/gstreamer/AudioDestinationGStreamer.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:91:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:131:  webkit_web_audio_src_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:176:  webkit_web_audio_src_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.h:30:  webkit_web_audio_src_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 5 in 8 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>508727</commentid>
    <comment_count>33</comment_count>
      <attachid>116355</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-11-24 05:21:45 -0800</bug_when>
    <thetext>Comment on attachment 116355
WebAudio GStreamer implementation: playback support

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

&gt; Source/WebCore/platform/audio/gstreamer/AudioDestinationGStreamer.cpp:106
&gt; +    // Autoaudiosink does the real sink detection in the
&gt; +    // GST_STATE_NULL-&gt;READY transition so it&apos;s best to roll it to READY as
&gt; +    // soon as possible to ensure the underlying platform
&gt; +    // audiosink was loaded correctly.

Super nit: Do you mind evening out these lines?

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:324
&gt; +    if (!priv-&gt;provider || !priv-&gt;bus)
&gt; +        return;

You can probably remove this since you assert above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508758</commentid>
    <comment_count>34</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-11-24 06:58:17 -0800</bug_when>
    <thetext>Committed r101138: &lt;http://trac.webkit.org/changeset/101138&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112685</attachid>
            <date>2011-10-27 08:14:41 -0700</date>
            <delta_ts>2011-11-07 08:46:00 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>23292</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA0MDIxOTQzMzM2MDRmMzU1MTk1M2IyNWZhZWQ4OGEwYjZkODMzODgwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz
MiArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAg
fCAgICAyICsKIC4uLi9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5j
cHAgIHwgICA0MiArKysKIC4uLi9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJl
YW1lci5oICAgIHwgICAgNyArCiAuLi4vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0
cmVhbWVyLmNwcCAgICB8ICAzNDMgKysrKysrKysrKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIv
V2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCAgICAgIHwgICA1MiArKysKIDYgZmlsZXMg
Y2hhbmdlZCwgNDc4IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx
MDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1
ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5o
CgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGFkYjUzMTAuLjNhMGNiNjYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
NSBAQAorMjAxMS0xMC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl0gV2ViQXVkaW8gQXVkaW9EZXN0aW5hdGlvbgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4MzUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgR1N0cmVhbWVyIHNv
dXJjZSBlbGVtZW50IHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBBdWRpb0J1cyBhbmQKKyAgICAgICAg
b3V0cHV0aW5nIGF1ZGlvIGludGVybGVhdmVkIEdzdEJ1ZmZlcnMgc3VpdGFibGUgZm9yIHBsYXli
YWNrLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpBdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6On5B
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OnBsdWdTaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRp
b25HU3RyZWFtZXI6OnN0b3ApOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9B
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAg
IChnZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBzKToKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvR1N0
cmVhbWVyQ2hhbm5lbFBvc2l0aW9uKToKKyAgICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2Ns
YXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl9hdWRpb19zcmNfaW5pdCk6CisgICAgICAg
ICh3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlv
U3JjRmluYWxpemUpOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0eSk6Cisg
ICAgICAgICh3ZWJLaXRXZWJBdWRpb1NyY0dldFByb3BlcnR5KToKKyAgICAgICAgKHdlYktpdFdl
YkF1ZGlvU3JjTG9vcCk6CisgICAgICAgICh3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuaDogQWRkZWQuCisKIDIwMTEtMTAtMjcgIEFudHRpIEtvaXZpc3RvICA8YW50dGlA
YXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBTdHJpbmdIYXNoZXIgdG8gZ2VuZXJhdGUgdGhlIG1h
dGNoZWQgZGVjbGFyYXRpb24gY2FjaGUgaGFzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggMTFmNTFiNy4uMDYzMTQzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC00NzU2LDYgKzQ3NTYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRp
b25HU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9C
dXNHdGsuY3BwCiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNBdWRpb0J1ZmZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXIuY3BwCmluZGV4IDk0M2Q4NGEuLjc2YmU0NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0
aW5hdGlvbkdTdHJlYW1lci5jcHAKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5jbHVkZSAiQXVkaW9D
aGFubmVsLmgiCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkdP
d25QdHIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisj
aW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwyNSArNDIsNjMgQEAgZmxvYXQgQXVkaW9EZXN0
aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkKICAgICByZXR1cm4gNDQxMDA7CiB9CiAKK3N0
YXRpYyB2b2lkIG9uR1N0cmVhbWVyV2F2cGFyc2VQYWRBZGRlZENhbGxiYWNrKEdzdEVsZW1lbnQq
IGVsZW1lbnQsIEdzdFBhZCogcGFkLCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKiBkZXN0aW5h
dGlvbikKK3sKKyAgICBkZXN0aW5hdGlvbi0+cGx1Z1NpbmsocGFkKTsKK30KKwogQXVkaW9EZXN0
aW5hdGlvbkdTdHJlYW1lcjo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcihBdWRpb1NvdXJjZVBy
b3ZpZGVyJiBwcm92aWRlciwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICA6IG1fcHJvdmlkZXIocHJv
dmlkZXIpCiAgICAgLCBtX3JlbmRlckJ1cygyLCAxMjgsIHRydWUpCiAgICAgLCBtX3NhbXBsZVJh
dGUoc2FtcGxlUmF0ZSkKICAgICAsIG1faXNQbGF5aW5nKGZhbHNlKQogeworICAgIHN0YXRpYyBi
b29sIGdzdEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFnc3RJbml0aWFsaXplZCkKKyAg
ICAgICAgZ3N0SW5pdGlhbGl6ZWQgPSBnc3RfaW5pdF9jaGVjaygwLCAwLCAwKTsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKGdzdEluaXRpYWxpemVkLCAiR1N0cmVhbWVyIGluaXRpYWxpemF0aW9u
IGZhaWxlZCIpOworCisgICAgbV9waXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcoInBsYXkiKTsK
KworICAgIEdzdEVsZW1lbnQqIHdlYmtpdEF1ZGlvU3JjID0gcmVpbnRlcnByZXRfY2FzdDxHc3RF
bGVtZW50Kj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9BVURJT19TUkMsICJyYXRlIiwg
c3RhdGljX2Nhc3Q8Z2Zsb2F0PihzYW1wbGVSYXRlKSwgImJ1cyIsIHN0YXRpY19jYXN0PGdwb2lu
dGVyPigmbV9yZW5kZXJCdXMpLCAicHJvdmlkZXIiLCAmbV9wcm92aWRlciwgTlVMTCkpOworCisg
ICAgR3N0RWxlbWVudCogd2F2cGFyc2UgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdnBh
cnNlIiwgMCk7CisgICAgZ19zaWduYWxfY29ubmVjdCh3YXZwYXJzZSwgInBhZC1hZGRlZCIsIEdf
Q0FMTEJBQ0sob25HU3RyZWFtZXJXYXZwYXJzZVBhZEFkZGVkQ2FsbGJhY2spLCB0aGlzKTsKKwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVsaW5lKSwgd2Via2l0QXVkaW9TcmMs
IHdhdnBhcnNlLCBOVUxMKTsKKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbCh3ZWJraXRB
dWRpb1NyYywgInNyYyIsIHdhdnBhcnNlLCAic2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RI
SU5HKTsKIH0KIAogQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6fkF1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIoKQogeworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBHU1Rf
U1RBVEVfTlVMTCk7CisgICAgZ3N0X29iamVjdF91bnJlZihtX3BpcGVsaW5lKTsKK30KKwordm9p
ZCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpwbHVnU2luayhHc3RQYWQqIHBhZCkKK3sKKyAg
ICBHc3RFbGVtZW50KiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1
ZGlvY29udmVydCIsIDApOworICAgIEdzdFBhZCogc2lua1BhZCA9IGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKGF1ZGlvY29udmVydCwgInNpbmsiKTsKKyAgICBHc3RFbGVtZW50KiBhdWRpb3Np
bmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3NpbmsiLCAwKTsKKyAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIGF1ZGlvY29udmVydCwgYXVkaW9z
aW5rLCBOVUxMKTsKKworICAgIGdzdF9wYWRfbGluayhwYWQsIHNpbmtQYWQpOworICAgIGdzdF9v
YmplY3RfdW5yZWYoR1NUX09CSkVDVChzaW5rUGFkKSk7CisKKyAgICBnc3RfZWxlbWVudF9saW5r
X3BhZHNfZnVsbChhdWRpb2NvbnZlcnQsICJzcmMiLCBhdWRpb3NpbmssICJzaW5rIiwgR1NUX1BB
RF9MSU5LX0NIRUNLX05PVEhJTkcpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9w
YXJlbnQoYXVkaW9jb252ZXJ0KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFy
ZW50KGF1ZGlvc2luayk7CiB9CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6c3Rh
cnQoKQogeworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBHU1RfU1RBVEVf
UExBWUlORyk7CiAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwogfQogCiB2b2lkIEF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OnN0b3AoKQogeworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3Bp
cGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVk
aW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAppbmRleCA3Y2YzNzk4Li4zZDEz
YTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmgKQEAgLTIyLDYgKzIy
LDkgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24u
aCIKIAordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKK3R5cGVkZWYgc3Ry
dWN0IF9Hc3RQYWQgR3N0UGFkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlv
RGVzdGluYXRpb25HU3RyZWFtZXIgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CkBAIC0zNiwx
MiArMzksMTYgQEAgcHVibGljOgogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVy
biBtX3NhbXBsZVJhdGU7IH0KICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXI7IH0KIAorICAgIHZvaWQgcGx1Z1NpbmsoR3N0
UGFkKik7CisKIHByaXZhdGU6CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciYgbV9wcm92aWRlcjsK
ICAgICBBdWRpb0J1cyBtX3JlbmRlckJ1czsKIAogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKICAg
ICBib29sIG1faXNQbGF5aW5nOworCisgICAgR3N0RWxlbWVudCogbV9waXBlbGluZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMTkw
NjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMzQzIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKwor
I2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJBdWRp
b0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJHT3du
UHRyLmgiCisKKyNpbmNsdWRlIDxnc3QvYXVkaW8vbXVsdGljaGFubmVsLmg+CisjaW5jbHVkZSA8
Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworI2Rl
ZmluZSBXRUJLSVRfV0VCX0FVRElPX1NSQ19HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9BVURJT19TUkMsIFdlYktpdFdl
YkF1ZGlvU3JjUHJpdmF0ZSkpCisKK2VudW0geworICAgIFBST1BfUkFURSA9IDEsCisgICAgUFJP
UF9CVVMgPSAyLAorICAgIFBST1BfUFJPVklERVIgPSAzCit9OworCitzdHJ1Y3QgX1dlYktpdFdl
YkF1ZGlvU3JjUHJpdmF0ZSB7CisgICAgZ2Zsb2F0IHNhbXBsZVJhdGU7CisgICAgQXVkaW9CdXMq
IGJ1czsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlcjsKKworICAgIGd1aW50NjQg
b2Zmc2V0OyAvLyBjdXJyZW50IGJ1ZmZlciBvZmZzZXQuCisKKyAgICBHc3RUYXNrKiB0YXNrOwor
ICAgIEdTdGF0aWNSZWNNdXRleCogbXV0ZXg7CisKKyAgICBHU0xpc3QqIHBhZHM7IC8vIGxpc3Qg
b2YgcXVldWUgc3JjIHBhZHMuIE9uZSBxdWV1ZSBmb3IgZWFjaCBwbGFuYXIgYXVkaW8gY2hhbm5l
bC4KKyAgICBHc3RQYWQqIHNyY3BhZDsgLy8gc3JjIHBhZCBvZiB0aGUgZWxlbWVudCwgaW50ZXJs
ZWF2ZWQgd2F2IGRhdGEgaXMgcHVzaGVkIHRvIGl0LgorfTsKKworCitzdGF0aWMgR3N0U3RhdGlj
UGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdTVF9QQURfU1JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtd2F2IikpOworCitHU1RfREVCVUdfQ0FURUdPUllf
U1RBVElDKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnCisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1
ZGlvU3JjQ29uc3RydWN0ZWQoR09iamVjdCopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9T
cmNGaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY1NldFBy
b3BlcnR5KEdPYmplY3QqLCBndWludCwgY29uc3QgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOworc3Rh
dGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQsIEdW
YWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRX
ZWJBdWRpb1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSk7CitzdGF0
aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2ViQXVkaW9TcmMqKTsKKworc3Rh
dGljIEdzdENhcHMqIGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMoZmxvYXQgc2FtcGxlUmF0ZSkK
K3sKKyAgICByZXR1cm4gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXctZmxvYXQiLCAi
cmF0ZSIsIEdfVFlQRV9JTlQsIHN0YXRpY19jYXN0PGludD4oc2FtcGxlUmF0ZSksICJjaGFubmVs
cyIsIEdfVFlQRV9JTlQsIDEsICJlbmRpYW5uZXNzIiwgR19UWVBFX0lOVCwgR19CWVRFX09SREVS
LCAid2lkdGgiLCBHX1RZUEVfSU5ULCAzMiwgTlVMTCk7Cit9CisKK3N0YXRpYyBHc3RBdWRpb0No
YW5uZWxQb3NpdGlvbiB3ZWJLaXRXZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihpbnQg
Y2hhbm5lbEluZGV4KQoreworICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc2l0aW9uOwor
CisgICAgc3dpdGNoIChjaGFubmVsSW5kZXgpIHsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVs
TGVmdDoKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9O
VF9MRUZUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsUmlnaHQ6
CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklH
SFQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxDZW50ZXI6Cisg
ICAgICAgIC8vIENlbnRlciBhbmQgbW9ubyBhcmUgdGhlIHNhbWUuCisgICAgICAgIHBvc2l0aW9u
ID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTU9OTzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbExGRToKKyAgICAgICAgcG9zaXRpb24gPSBHU1Rf
QVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXVk
aW9CdXM6OkNoYW5uZWxTdXJyb3VuZExlZnQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElP
X0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1
ZGlvQnVzOjpDaGFubmVsU3Vycm91bmRSaWdodDoKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVE
SU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgcmV0dXJuIHBvc2l0aW9uOworfQor
CisjZGVmaW5lIHdlYmtpdF93ZWJfYXVkaW9fc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MK
K0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFdlYkF1ZGlvU3JjLCB3ZWJraXRfd2ViX2F1
ZGlvX3NyYywgR1NUX1RZUEVfQklOLCBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2Vi
X2F1ZGlvX3NyY19kZWJ1ZywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXR3
ZWJhdWRpb3NyYyIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIndlYmF1ZGlvc3JjIGVsZW1lbnQiKSk7CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2NsYXNzX2luaXQoV2ViS2l0V2ViQXVkaW9TcmNDbGFz
cyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBva2xhc3MgPSBHX09CSkVDVF9DTEFTUyhr
bGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBla2xhc3MgPSBHU1RfRUxFTUVOVF9DTEFTUyhr
bGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVrbGFzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdF9zdGF0aWNfcGFkX3Rl
bXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0
YWlsc19zaW1wbGUoZWtsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZ2NoYXIqKSAiV2ViS2l0IFdlYkF1ZGlvIHNvdXJjZSBlbGVtZW50IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjaGFyKikgIlNvdXJjZSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2hhciopICJIYW5kbGVzIFdl
YkF1ZGlvIGRhdGEgZnJvbSBXZWJDb3JlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGdjaGFyKikgIlBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxpYS5j
b20+Iik7CisKKyAgICBva2xhc3MtPmNvbnN0cnVjdGVkID0gd2ViS2l0V2ViQXVkaW9TcmNDb25z
dHJ1Y3RlZDsKKyAgICBva2xhc3MtPmZpbmFsaXplID0gd2ViS2l0V2ViQXVkaW9TcmNGaW5hbGl6
ZTsKKyAgICBla2xhc3MtPmNoYW5nZV9zdGF0ZSA9IHdlYktpdFdlYkF1ZGlvU3JjQ2hhbmdlU3Rh
dGU7CisKKyAgICBva2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJv
cGVydHk7CisgICAgb2tsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJLaXRXZWJBdWRpb1NyY0dldFBy
b3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShva2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1JBVEUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoInJhdGUiLCAicmF0
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlNhbXBsZSByYXRlIiwgR19NSU5ET1VCTEUsIEdfTUFYRE9VQkxFLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQ0MTAwLjAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJh
bUZsYWdzKSAoR19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFSQU1fUkVBRFdSSVRFKSkpOwor
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShva2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0JVUywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJidXMiLCAiYnVzIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdXMi
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFSQU1fUkVBRFdS
SVRFKSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShva2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1BST1ZJREVSLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3BvaW50ZXIoInByb3Zp
ZGVyIiwgInByb3ZpZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJQcm92aWRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFtRmxhZ3MpIChHX1BBUkFNX0NP
TlNUUlVDVF9PTkxZIHwgR19QQVJBTV9SRUFEV1JJVEUpKSk7CisKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUpKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9hdWRpb19zcmNfaW5pdChXZWJLaXRXZWJBdWRpb1Ny
Yyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU3JjUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9X
RUJfQVVESU9fU1JDX0dFVF9QUklWQVRFKHNyYyk7CisgICAgc3JjLT5wcml2ID0gcHJpdjsKKwor
ICAgIEdzdFBhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRl
X2dldCgmc3JjVGVtcGxhdGUpOworICAgIHByaXYtPnNyY3BhZCA9IGdzdF9naG9zdF9wYWRfbmV3
X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlKCJzcmMiLCBwYWRUZW1wbGF0ZSk7CisgICAgZ3N0X2Vs
ZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzcmMpLCBwcml2LT5zcmNwYWQpOworCisgICAgcHJp
di0+cHJvdmlkZXIgPSAwOworICAgIHByaXYtPmJ1cyA9IDA7CisgICAgcHJpdi0+b2Zmc2V0ID0g
MDsKKworICAgIHByaXYtPm11dGV4ID0gZ19uZXcoR1N0YXRpY1JlY011dGV4LCAxKTsKKyAgICBn
X3N0YXRpY19yZWNfbXV0ZXhfaW5pdChwcml2LT5tdXRleCk7CisKKyAgICBwcml2LT50YXNrID0g
Z3N0X3Rhc2tfY3JlYXRlKChHc3RUYXNrRnVuY3Rpb24pIHdlYktpdFdlYkF1ZGlvU3JjTG9vcCwg
c3JjKTsKKyAgICBnc3RfdGFza19zZXRfbG9jayhwcml2LT50YXNrLCBwcml2LT5tdXRleCk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjQ29uc3RydWN0ZWQoR09iamVjdCAqb2Jq
ZWN0KQoreworICAgIFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NS
QyhvYmplY3QpOworICAgIFdlYktpdFdlYkF1ZGlvU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJp
djsKKworICAgIEFTU0VSVChwcml2LT5idXMpOworICAgIEFTU0VSVChwcml2LT5wcm92aWRlcik7
CisgICAgQVNTRVJUKHByaXYtPnNhbXBsZVJhdGUpOworCisKKyAgICBHc3RFbGVtZW50KiBpbnRl
cmxlYXZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJpbnRlcmxlYXZlIiwgMCk7CisgICAg
R3N0RWxlbWVudCogd2F2ZW5jID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3YXZlbmMiLCAw
KTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3JjKSwgaW50ZXJsZWF2ZSwgd2F2ZW5j
LCBOVUxMKTsKKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChpbnRlcmxlYXZlLCAic3Jj
Iiwgd2F2ZW5jLCAic2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKworICAgIC8v
IEZvciBlYWNoIGNoYW5uZWwgb2YgdGhlIGJ1cyBjcmVhdGUgYSBuZXcgdXBzdHJlYW0gYnJhbmNo
IGZvciBpbnRlcmxlYXZlLCBsaWtlOgorICAgIC8vIHF1ZXVlICEgY2Fwc2ZpbHRlciAhIGF1ZGlv
Y29udmVydC4gd2hpY2ggaXMgcGx1Z2dlZCB0byBhIG5ldyBpbnRlcmxlYXZlIHJlcXVlc3Qgc3Jj
cGFkLgorICAgIGZvciAodW5zaWduZWQgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwg
cHJpdi0+YnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7IGNoYW5uZWxJbmRleCsrKSB7CisgICAgICAg
IEdzdEVsZW1lbnQqIHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIDAp
OworICAgICAgICBHc3RFbGVtZW50KiBjYXBzZmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJjYXBzZmlsdGVyIiwgMCk7CisgICAgICAgIEdzdEVsZW1lbnQqIGF1ZGlvY29udmVydCA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgMCk7CisKKyAgICAgICAg
R3N0Q2FwcyogbW9ub0NhcHMgPSBnZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBzKHByaXYtPnNhbXBs
ZVJhdGUpOworICAgICAgICBnX29iamVjdF9zZXQoY2Fwc2ZpbHRlciwgImNhcHMiLCBtb25vQ2Fw
cywgTlVMTCk7CisgICAgICAgIGdzdF9jYXBzX3VucmVmKG1vbm9DYXBzKTsKKworICAgICAgICBH
c3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHF1ZXVlLCAic2luayIpOwor
ICAgICAgICBwcml2LT5wYWRzID0gZ19zbGlzdF9wcmVwZW5kKHByaXYtPnBhZHMsIHBhZCk7CisK
KyAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHNyYyksIHF1ZXVlLCBjYXBzZmlsdGVy
LCBhdWRpb2NvbnZlcnQsIE5VTEwpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVs
bChxdWV1ZSwgInNyYyIsIGNhcHNmaWx0ZXIsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05P
VEhJTkcpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChjYXBzZmlsdGVyLCAi
c3JjIiwgYXVkaW9jb252ZXJ0LCAic2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsK
KworICAgICAgICBHc3RQYWQqIHNyY1BhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGF1
ZGlvY29udmVydCwgInNyYyIpOworICAgICAgICBHc3RQYWQqIHNpbmtQYWQgPSBnc3RfZWxlbWVu
dF9nZXRfcmVxdWVzdF9wYWQoaW50ZXJsZWF2ZSwgInNpbmslZCIpOworICAgICAgICBnc3RfcGFk
X2xpbmsoc3JjUGFkLCBzaW5rUGFkKTsKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JK
RUNUKHNyY1BhZCkpOworICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKEdTVF9PQkpFQ1Qoc2lua1Bh
ZCkpOworICAgIH0KKyAgICBwcml2LT5wYWRzID0gZ19zbGlzdF9yZXZlcnNlKHByaXYtPnBhZHMp
OworCisgICAgLy8gd2F2ZW5jJ3Mgc3JjIHBhZCBpcyB0aGUgb25seSB2aXNpYmxlIHBhZCBvZiBv
dXIgZWxlbWVudC4KKyAgICBHc3RQYWQqIHRhcmdldFBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKHdhdmVuYywgInNyYyIpOworICAgIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldChHU1Rf
R0hPU1RfUEFEKHByaXYtPnNyY3BhZCksIHRhcmdldFBhZCk7CisgICAgZ3N0X29iamVjdF91bnJl
Zih0YXJnZXRQYWQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0ZpbmFsaXpl
KEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lU
X1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHBy
aXYgPSBzcmMtPnByaXY7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVmKHByaXYtPnRhc2spOworICAg
IGdfc3RhdGljX3JlY19tdXRleF9mcmVlKHByaXYtPm11dGV4KTsKKworICAgIGdfc2xpc3RfZnJl
ZV9mdWxsKHByaXYtPnBhZHMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGdzdF9v
YmplY3RfdW5yZWYpKTsKKworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmlu
YWxpemUsICgoR09iamVjdCogKShzcmMpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1
ZGlvU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU3Jj
KiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhvYmplY3QpOworICAgIFdlYktpdFdlYkF1ZGlv
U3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIHN3aXRjaCAocHJvcElEKSB7Cisg
ICAgY2FzZSBQUk9QX1JBVEU6CisgICAgICAgIHByaXYtPnNhbXBsZVJhdGUgPSBnX3ZhbHVlX2dl
dF9mbG9hdCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CVVM6CisgICAg
ICAgIHByaXYtPmJ1cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8QXVkaW9CdXMqPihnX3ZhbHVlX2dldF9w
b2ludGVyKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9WSURFUjoK
KyAgICAgICAgcHJpdi0+cHJvdmlkZXIgPSByZWludGVycHJldF9jYXN0PEF1ZGlvU291cmNlUHJv
dmlkZXIqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmpl
Y3QsIHByb3BJRCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBw
cm9wSUQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFdl
YkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhvYmplY3QpOworICAgIFdlYktp
dFdlYkF1ZGlvU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIHN3aXRjaCAocHJv
cElEKSB7CisgICAgY2FzZSBQUk9QX1JBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5zYW1wbGVSYXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JV
UzoKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgcHJpdi0+YnVzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BST1ZJREVSOgorICAgICAgICBnX3ZhbHVlX3NldF9w
b2ludGVyKHZhbHVlLCBwcml2LT5wcm92aWRlcik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHBy
b3BJRCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdl
YktpdFdlYkF1ZGlvU3JjTG9vcChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktp
dFdlYkF1ZGlvU3JjUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVChwcml2
LT5idXMpOworICAgIEFTU0VSVChwcml2LT5wcm92aWRlcik7CisgICAgaWYgKCFwcml2LT5wcm92
aWRlciB8fCAhcHJpdi0+YnVzKQorICAgICAgICByZXR1cm47CisKKyAgICBzaXplX3QgcmVxdWVz
dGVkRnJhbWVzID0gMTI4OworICAgIGd1aW50IGJ1ZmZlclNpemUgPSByZXF1ZXN0ZWRGcmFtZXMg
KiBzaXplb2YoZmxvYXQpOworICAgIHByaXYtPnByb3ZpZGVyLT5wcm92aWRlSW5wdXQocHJpdi0+
YnVzLCByZXF1ZXN0ZWRGcmFtZXMpOworCisgICAgZm9yIChndWludCBpbmRleCA9IDA7IGluZGV4
IDwgZ19zbGlzdF9sZW5ndGgocHJpdi0+cGFkcyk7IGluZGV4KyspIHsKKyAgICAgICAgR3N0UGFk
KiBwYWQgPSBzdGF0aWNfY2FzdDxHc3RQYWQqPihnX3NsaXN0X250aF9kYXRhKHByaXYtPnBhZHMs
IGluZGV4KSk7CisKKyAgICAgICAgR3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVmZmVyX3RyeV9u
ZXdfYW5kX2FsbG9jKGJ1ZmZlclNpemUpOworICAgICAgICBBU1NFUlQoYnVmZmVyKTsKKyAgICAg
ICAgbWVtY3B5KEdTVF9CVUZGRVJfREFUQShidWZmZXIpLCBwcml2LT5idXMtPmNoYW5uZWwoaW5k
ZXgpLT5kYXRhKCksIGJ1ZmZlclNpemUpOworICAgICAgICBHU1RfQlVGRkVSX09GRlNFVChidWZm
ZXIpID0gcHJpdi0+b2Zmc2V0OworICAgICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQoYnVmZmVy
KSA9IHByaXYtPm9mZnNldCArIHJlcXVlc3RlZEZyYW1lczsKKworICAgICAgICBHc3RDYXBzKiBt
b25vQ2FwcyA9IGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+c2FtcGxlUmF0ZSk7Cisg
ICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSht
b25vQ2FwcywgMCk7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNoYW5u
ZWxzIiwgR19UWVBFX0lOVCwgMSwgTlVMTCk7CisgICAgICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0
aW9uIGNoYW5uZWxQb3NpdGlvbiA9IHdlYktpdFdlYkF1ZGlvR1N0cmVhbWVyQ2hhbm5lbFBvc2l0
aW9uKGluZGV4KTsKKyAgICAgICAgZ3N0X2F1ZGlvX3NldF9jaGFubmVsX3Bvc2l0aW9ucyhzdHJ1
Y3R1cmUsICZjaGFubmVsUG9zaXRpb24pOworICAgICAgICBnc3RfYnVmZmVyX3NldF9jYXBzKGJ1
ZmZlciwgbW9ub0NhcHMpOworICAgICAgICBnc3RfY2Fwc191bnJlZihtb25vQ2Fwcyk7CisKKyAg
ICAgICAgZ3N0X3BhZF9jaGFpbihwYWQsIGJ1ZmZlcik7CisgICAgfQorCisgICAgcHJpdi0+b2Zm
c2V0ICs9IHJlcXVlc3RlZEZyYW1lczsKK30KKworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJu
IHdlYktpdFdlYkF1ZGlvU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3Rh
dGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgICBHc3RTdGF0ZUNoYW5nZVJldHVybiByZXQgPSBH
U1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgICAgV2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdF
QktJVF9XRUJfQVVESU9fU1JDKGVsZW1lbnQpOworCisgICAgcmV0ID0gR1NUX0VMRU1FTlRfQ0xB
U1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOworICAg
IGlmIChHX1VOTElLRUxZKHJldCA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RhdGUgY2hhbmdlIGZhaWxlZCIpOworICAgICAg
ICByZXR1cm4gcmV0OworICAgIH0KKworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNh
c2UgR1NUX1NUQVRFX0NIQU5HRV9SRUFEWV9UT19QQVVTRUQ6CisgICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiUkVBRFktPlBBVVNFRCIpOworICAgICAgICBpZiAoIWdzdF90YXNrX3N0YXJ0
KHNyYy0+cHJpdi0+dGFzaykpCisgICAgICAgICAgICByZXQgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZB
SUxVUkU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVTRURf
VE9fUkVBRFk6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUEFVU0VELT5SRUFEWSIp
OworICAgICAgICBpZiAoIWdzdF90YXNrX2pvaW4oc3JjLT5wcml2LT50YXNrKSkKKyAgICAgICAg
ICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjA4Zjk1YWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApA
QCAtMCwwICsxLDUyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBQaGlsaXBwZSBOb3Jt
YW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2lmbmRlZiBXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lcl9oCisjZGVmaW5lIFdlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyX2gKKyNpZiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVk
ZSA8Z3N0L2dzdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VC
X0FVRElPX1NSQyAgICAgICAgICAgICh3ZWJraXRfd2ViX2F1ZGlvX3NyY19nZXRfdHlwZSAoKSkK
KyNkZWZpbmUgV0VCS0lUX1dFQl9BVURJT19TUkMob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9BVURJT19TUkMsIFdlYktp
dFdlYkF1ZGlvU3JjKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9BVURJT19TUkNfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCAoKGtsYXNzKSwgV0VCS0lUX1RZUEVfV0VCX0FV
RElPX1NSQywgV2ViS2l0V2ViQXVkaW9TcmNDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19XRUJf
QVVESU9fU1JDKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUgKChvYmop
LCBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9BVURJ
T19TUkNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSAoKGtsYXNzKSwgV0VC
S0lUX1RZUEVfV0VCX0FVRElPX1NSQykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRp
b1NyYyAgICAgICAgV2ViS2l0V2ViQXVkaW9TcmM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
QXVkaW9TcmNDbGFzcyAgIFdlYktpdFdlYkF1ZGlvU3JjQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlIFdlYktpdFdlYkF1ZGlvU3JjUHJpdmF0ZTsKKworc3Ry
dWN0IF9XZWJLaXRXZWJBdWRpb1NyYyB7CisgICAgR3N0QmluIHBhcmVudDsKKworICAgIFdlYktp
dFdlYkF1ZGlvU3JjUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViQXVkaW9T
cmNDbGFzcyB7CisgICAgR3N0QmluQ2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitHVHlwZSB3ZWJr
aXRfd2ViX2F1ZGlvX3NyY19nZXRfdHlwZSh2b2lkKTsKKworR19FTkRfREVDTFMKKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCisjZW5kaWYKLS0gCjEuNy43
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113874</attachid>
            <date>2011-11-07 08:46:00 -0800</date>
            <delta_ts>2011-11-08 02:58:37 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>26074</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkYTA4MWQ0MzRkZGQ5NDUwM2I0MDdmY2ZjZGRjMDM2NmZkZTBmZDRjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz
MiArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAg
fCAgICAyICsKIC4uLi9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5j
cHAgIHwgICA3OSArKysrCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAgICAgfCAgMzgzICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVhbWVy
L1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgNTIgKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDU1NiBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwNzc0OWYxLi43YTdiNzAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTEtMTAtMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIFdlYkF1ZGlvIEF1ZGlvRGVzdGluYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODM1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IEdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBwdWxsaW5nIGRhdGEgZnJvbSB0aGUgQXVkaW9CdXMgYW5kCisgICAgICAg
IG91dHB1dGluZyBhdWRpbyBpbnRlcmxlYXZlZCBHc3RCdWZmZXJzIHN1aXRhYmxlIGZvciBwbGF5
YmFjay4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b25HU3RyZWFtZXJXYXZwYXJzZVBhZEFkZGVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6QXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyOjpwbHVnU2luayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uR1N0cmVhbWVyOjpzdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAg
ICAoZ2V0R1N0cmVhbWVyTW9ub0F1ZGlvQ2Fwcyk6CisgICAgICAgICh3ZWJLaXRXZWJBdWRpb0dT
dHJlYW1lckNoYW5uZWxQb3NpdGlvbik6CisgICAgICAgICh3ZWJraXRfd2ViX2F1ZGlvX3NyY19j
bGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2luaXQpOgorICAgICAg
ICAod2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJLaXRXZWJBdWRp
b1NyY0ZpbmFsaXplKToKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJvcGVydHkpOgor
ICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRX
ZWJBdWRpb1NyY0xvb3ApOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDExLTExLTA3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVy
eXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0gV2ViIEluc3BlY3RvcjogdXNl
IG5hdGl2ZSB3b3JrZXIgaW5zcGVjdG9yIGluc3RlYWQgb2YgZmFrZSB3b3JrZXJzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBhOWMyYmI1Li4xYjFhYTc4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ3ODQsNiArNDc4NCw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVyLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAKIHdlYmNvcmVfYnVpbHRfc291cmNlcyArPSBc
CiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0F1ZGlvQnVmZmVyLmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlv
bkdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5jcHAKaW5kZXggOTQzZDg0YS4uMGYzNTczYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVz
dGluYXRpb25HU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcApAQCAtMjUsNiArMjUsMTAg
QEAKICNpbmNsdWRlICJBdWRpb0NoYW5uZWwuaCIKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3Zp
ZGVyLmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIldlYktpdFdlYkF1ZGlvU291
cmNlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3Bi
dXRpbHMvcGJ1dGlscy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM4LDI1ICs0Miwx
MDAgQEAgZmxvYXQgQXVkaW9EZXN0aW5hdGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkKICAgICBy
ZXR1cm4gNDQxMDA7CiB9CiAKK3N0YXRpYyB2b2lkIG9uR1N0cmVhbWVyV2F2cGFyc2VQYWRBZGRl
ZENhbGxiYWNrKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFBhZCogcGFkLCBBdWRpb0Rlc3RpbmF0
aW9uR1N0cmVhbWVyKiBkZXN0aW5hdGlvbikKK3sKKyAgICBkZXN0aW5hdGlvbi0+cGx1Z1Npbmso
cGFkKTsKK30KKwogQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6QXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lcihBdWRpb1NvdXJjZVByb3ZpZGVyJiBwcm92aWRlciwgZmxvYXQgc2FtcGxlUmF0ZSkK
ICAgICA6IG1fcHJvdmlkZXIocHJvdmlkZXIpCiAgICAgLCBtX3JlbmRlckJ1cygyLCAxMjgsIHRy
dWUpCiAgICAgLCBtX3NhbXBsZVJhdGUoc2FtcGxlUmF0ZSkKICAgICAsIG1faXNQbGF5aW5nKGZh
bHNlKQogeworICAgIHN0YXRpYyBib29sIGdzdEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYg
KCFnc3RJbml0aWFsaXplZCkKKyAgICAgICAgZ3N0SW5pdGlhbGl6ZWQgPSBnc3RfaW5pdF9jaGVj
aygwLCAwLCAwKTsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGdzdEluaXRpYWxpemVkLCAiR1N0
cmVhbWVyIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpOworCisgICAgbV9waXBlbGluZSA9IGdzdF9w
aXBlbGluZV9uZXcoInBsYXkiKTsKKworICAgIEdzdEVsZW1lbnQqIHdlYmtpdEF1ZGlvU3JjID0g
cmVpbnRlcnByZXRfY2FzdDxHc3RFbGVtZW50Kj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dF
Ql9BVURJT19TUkMsICJyYXRlIiwgc3RhdGljX2Nhc3Q8Z2Zsb2F0PihzYW1wbGVSYXRlKSwgImJ1
cyIsIHN0YXRpY19jYXN0PGdwb2ludGVyPigmbV9yZW5kZXJCdXMpLCAicHJvdmlkZXIiLCAmbV9w
cm92aWRlciwgTlVMTCkpOworCisgICAgR3N0RWxlbWVudCogd2F2cGFyc2UgPSBnc3RfZWxlbWVu
dF9mYWN0b3J5X21ha2UoIndhdnBhcnNlIiwgMCk7CisKKyAgICBtX3dhdlBhcnNlckF2YWlsYWJs
ZSA9IHdhdnBhcnNlOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV93YXZQYXJzZXJBdmFpbGFi
bGUsICJGYWlsZWQgdG8gY3JlYXRlIEdTdHJlYW1lciB3YXZwYXJzZSBlbGVtZW50Iik7CisgICAg
aWYgKCFtX3dhdlBhcnNlckF2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zaWdu
YWxfY29ubmVjdCh3YXZwYXJzZSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sob25HU3RyZWFtZXJX
YXZwYXJzZVBhZEFkZGVkQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdT
VF9CSU4obV9waXBlbGluZSksIHdlYmtpdEF1ZGlvU3JjLCB3YXZwYXJzZSwgTlVMTCk7CisgICAg
Z3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwod2Via2l0QXVkaW9TcmMsICJzcmMiLCB3YXZwYXJz
ZSwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CiB9CiAKIEF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6On5BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKCkKIHsKKyAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9v
YmplY3RfdW5yZWYobV9waXBlbGluZSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbkdTdHJl
YW1lcjo6cGx1Z1NpbmsoR3N0UGFkKiBwYWQpCit7CisgICAgQVNTRVJUKG1fd2F2UGFyc2VyQXZh
aWxhYmxlKTsKKworICAgIEdzdEVsZW1lbnQqIGF1ZGlvc2luayA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIDApOworICAgIG1fYXVkaW9TaW5rQXZhaWxhYmxlID0g
YXVkaW9zaW5rOworCisgICAgaWYgKGF1ZGlvc2luaykgeworICAgICAgICAvLyBBdXRvYXVkaW9z
aW5rIGRvZXMgdGhlIHJlYWwgc2luayBkZXRlY3Rpb24gaW4gdGhlCisgICAgICAgIC8vIE5VTEwt
PlJFQURZIHRyYW5zaXRpb24gc28gaXQncyBiZXN0IHRvIHJvbGwgaXQgdG8gUkVBRFkgYXMKKyAg
ICAgICAgLy8gc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhlIHVuZGVybHlpbmcgcGxhdGZv
cm0KKyAgICAgICAgLy8gYXVkaW9zaW5rIHdhcyBsb2FkZWQgY29ycmVjdGx5LgorICAgICAgICBH
c3RTdGF0ZUNoYW5nZVJldHVybiBzdGF0ZUNoYW5nZVJldHVybiA9IGdzdF9lbGVtZW50X3NldF9z
dGF0ZShhdWRpb3NpbmssIEdTVF9TVEFURV9SRUFEWSk7CisgICAgICAgIGlmIChzdGF0ZUNoYW5n
ZVJldHVybiA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICAgICAgICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShhdWRpb3NpbmssIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgICAg
IG1fYXVkaW9TaW5rQXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3Vu
cmVmKGF1ZGlvc2luayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fYXVkaW9TaW5rQXZhaWxhYmxlLCAiRmFpbGVkIHRv
IGNyZWF0ZSBHU3RyZWFtZXIgYXV0b2F1ZGlvc2luayBlbGVtZW50Iik7CisgICAgaWYgKCFtX2F1
ZGlvU2lua0F2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0RWxlbWVudCogYXVk
aW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsK
KyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIGF1ZGlvY29udmVydCwg
YXVkaW9zaW5rLCBOVUxMKTsKKworICAgIC8vIExpbmsgd2F2cGFyc2UncyBzcmMgcGFkIHRvIGF1
ZGlvY29udmVydCBzaW5rIHBhZC4KKyAgICBHc3RQYWQqIHNpbmtQYWQgPSBnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChhdWRpb2NvbnZlcnQsICJzaW5rIik7CisgICAgZ3N0X3BhZF9saW5rKHBh
ZCwgc2lua1BhZCk7CisgICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHNpbmtQYWQpKTsK
KworICAgIC8vIExpbmsgYXVkaW9jb252ZXJ0IHRvIGF1ZGlvc2luayBhbmQgcm9sbCBzdGF0ZXMu
CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwoYXVkaW9jb252ZXJ0LCAic3JjIiwgYXVk
aW9zaW5rLCAic2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKyAgICBnc3RfZWxl
bWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGF1ZGlvY29udmVydCk7CisgICAgZ3N0X2VsZW1l
bnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChhdWRpb3NpbmspOwogfQogCiB2b2lkIEF1ZGlvRGVz
dGluYXRpb25HU3RyZWFtZXI6OnN0YXJ0KCkKIHsKKyAgICBBU1NFUlQobV93YXZQYXJzZXJBdmFp
bGFibGUpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsK
KworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlO
Ryk7CiAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwogfQogCiB2b2lkIEF1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXI6OnN0b3AoKQogeworICAgIEFTU0VSVChtX3dhdlBhcnNlckF2YWlsYWJsZSAmJiBt
X2F1ZGlvU2lua0F2YWlsYWJsZSk7CisgICAgaWYgKCFtX3dhdlBhcnNlckF2YWlsYWJsZSB8fCBt
X2F1ZGlvU2lua0F2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUsIEdTVF9TVEFURV9QQVVTRUQpOwogICAgIG1faXNQbGF5aW5n
ID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCmluZGV4
IDdjZjM3OTguLjUxMGQ1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
aApAQCAtMjIsNiArMjIsOSBAQAogI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiQXVk
aW9EZXN0aW5hdGlvbi5oIgogCit0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50
OwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lciA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0
aW9uIHsKQEAgLTM2LDEyICszOSwxNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQogICAgIEF1ZGlvU291cmNlUHJvdmlkZXIm
IHNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4gbV9wcm92aWRlcjsgfQogCisgICAgdm9p
ZCBwbHVnU2luayhHc3RQYWQqKTsKKwogcHJpdmF0ZToKICAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
JiBtX3Byb3ZpZGVyOwogICAgIEF1ZGlvQnVzIG1fcmVuZGVyQnVzOwogCiAgICAgZmxvYXQgbV9z
YW1wbGVSYXRlOwogICAgIGJvb2wgbV9pc1BsYXlpbmc7CisgICAgYm9vbCBtX3dhdlBhcnNlckF2
YWlsYWJsZTsKKyAgICBib29sIG1fYXVkaW9TaW5rQXZhaWxhYmxlOworICAgIEdzdEVsZW1lbnQq
IG1fcGlwZWxpbmU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi40NDUxZDA1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cApAQCAtMCwwICsxLDM4MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgUGhpbGlwcGUg
Tm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYktpdFdlYkF1ZGlvU291
cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoR1NUUkVBTUVS
KQorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVy
LmgiCisjaW5jbHVkZSAiR093blB0ci5oIgorCisjaW5jbHVkZSA8Z3N0L2F1ZGlvL211bHRpY2hh
bm5lbC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKKyNkZWZpbmUgV0VCS0lUX1dFQl9BVURJT19TUkNfR0VUX1BSSVZBVEUo
b2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJf
QVVESU9fU1JDLCBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUpKQorCitlbnVtIHsKKyAgICBQUk9Q
X1JBVEUgPSAxLAorICAgIFBST1BfQlVTID0gMiwKKyAgICBQUk9QX1BST1ZJREVSID0gMworfTsK
Kworc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUgeworICAgIGdmbG9hdCBzYW1wbGVS
YXRlOworICAgIEF1ZGlvQnVzKiBidXM7CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlciogcHJvdmlk
ZXI7CisKKyAgICBndWludDY0IG9mZnNldDsgLy8gY3VycmVudCBidWZmZXIgb2Zmc2V0LgorCisg
ICAgR3N0RWxlbWVudCogaW50ZXJsZWF2ZTsKKyAgICBHc3RFbGVtZW50KiB3YXZlbmM7CisKKyAg
ICBHc3RUYXNrKiB0YXNrOworICAgIEdTdGF0aWNSZWNNdXRleCogbXV0ZXg7CisKKyAgICBHU0xp
c3QqIHBhZHM7IC8vIGxpc3Qgb2YgcXVldWUgc3JjIHBhZHMuIE9uZSBxdWV1ZSBmb3IgZWFjaCBw
bGFuYXIgYXVkaW8gY2hhbm5lbC4KKyAgICBHc3RQYWQqIHNyY3BhZDsgLy8gc3JjIHBhZCBvZiB0
aGUgZWxlbWVudCwgaW50ZXJsZWF2ZWQgd2F2IGRhdGEgaXMgcHVzaGVkIHRvIGl0LgorfTsKKwor
CitzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BB
RF9URU1QTEFURSgic3JjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9QQURfU1JDLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BB
RF9BTFdBWVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtd2F2IikpOworCitH
U1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnKTsKKyNk
ZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnCisKK3N0YXRp
YyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjQ29uc3RydWN0ZWQoR09iamVjdCopOworc3RhdGljIHZv
aWQgd2ViS2l0V2ViQXVkaW9TcmNGaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgdm9pZCB3ZWJL
aXRXZWJBdWRpb1NyY1NldFByb3BlcnR5KEdPYmplY3QqLCBndWludCwgY29uc3QgR1ZhbHVlKiwg
R1BhcmFtU3BlYyopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eShH
T2JqZWN0KiwgZ3VpbnQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RT
dGF0ZUNoYW5nZSk7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2Vi
QXVkaW9TcmMqKTsKKworc3RhdGljIEdzdENhcHMqIGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMo
ZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICByZXR1cm4gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVk
aW8veC1yYXctZmxvYXQiLCAicmF0ZSIsIEdfVFlQRV9JTlQsIHN0YXRpY19jYXN0PGludD4oc2Ft
cGxlUmF0ZSksICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsICJlbmRpYW5uZXNzIiwgR19UWVBF
X0lOVCwgR19CWVRFX09SREVSLCAid2lkdGgiLCBHX1RZUEVfSU5ULCAzMiwgTlVMTCk7Cit9CisK
K3N0YXRpYyBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiB3ZWJLaXRXZWJBdWRpb0dTdHJlYW1lckNo
YW5uZWxQb3NpdGlvbihpbnQgY2hhbm5lbEluZGV4KQoreworICAgIEdzdEF1ZGlvQ2hhbm5lbFBv
c2l0aW9uIHBvc2l0aW9uOworCisgICAgc3dpdGNoIChjaGFubmVsSW5kZXgpIHsKKyAgICBjYXNl
IEF1ZGlvQnVzOjpDaGFubmVsTGVmdDoKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hB
Tk5FTF9QT1NJVElPTl9GUk9OVF9MRUZUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlv
QnVzOjpDaGFubmVsUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxf
UE9TSVRJT05fRlJPTlRfUklHSFQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXVkaW9CdXM6
OkNoYW5uZWxDZW50ZXI6CisgICAgICAgIC8vIENlbnRlciBhbmQgbW9ubyBhcmUgdGhlIHNhbWUu
CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTU9O
TzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbExGRToKKyAgICAg
ICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkU7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxTdXJyb3VuZExlZnQ6CisgICAgICAgIHBv
c2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZUOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsU3Vycm91bmRSaWdodDoKKyAgICAgICAg
cG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgcmV0
dXJuIHBvc2l0aW9uOworfQorCisjZGVmaW5lIHdlYmtpdF93ZWJfYXVkaW9fc3JjX3BhcmVudF9j
bGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFdlYkF1ZGlv
U3JjLCB3ZWJraXRfd2ViX2F1ZGlvX3NyYywgR1NUX1RZUEVfQklOLCBHU1RfREVCVUdfQ0FURUdP
UllfSU5JVCh3ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1ZywgXAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ3ZWJraXR3ZWJhdWRpb3NyYyIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmF1ZGlvc3JjIGVsZW1l
bnQiKSk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2NsYXNzX2luaXQoV2Vi
S2l0V2ViQXVkaW9TcmNDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBva2xhc3Mg
PSBHX09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBla2xhc3MgPSBH
U1RfRUxFTUVOVF9DTEFTUyhrbGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFk
X3RlbXBsYXRlKGVrbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxl
bWVudF9jbGFzc19zZXRfZGV0YWlsc19zaW1wbGUoZWtsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZ2NoYXIqKSAiV2ViS2l0IFdlYkF1ZGlvIHNvdXJjZSBl
bGVtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjaGFy
KikgIlNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChn
Y2hhciopICJIYW5kbGVzIFdlYkF1ZGlvIGRhdGEgZnJvbSBXZWJDb3JlIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdjaGFyKikgIlBoaWxpcHBlIE5vcm1hbmQg
PHBub3JtYW5kQGlnYWxpYS5jb20+Iik7CisKKyAgICBva2xhc3MtPmNvbnN0cnVjdGVkID0gd2Vi
S2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZDsKKyAgICBva2xhc3MtPmZpbmFsaXplID0gd2ViS2l0
V2ViQXVkaW9TcmNGaW5hbGl6ZTsKKyAgICBla2xhc3MtPmNoYW5nZV9zdGF0ZSA9IHdlYktpdFdl
YkF1ZGlvU3JjQ2hhbmdlU3RhdGU7CisKKyAgICBva2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYktp
dFdlYkF1ZGlvU3JjU2V0UHJvcGVydHk7CisgICAgb2tsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJL
aXRXZWJBdWRpb1NyY0dldFByb3BlcnR5OworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShva2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1JBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
ZmxvYXQoInJhdGUiLCAicmF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZSByYXRlIiwgR19NSU5ET1VCTEUsIEdfTUFYRE9V
QkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDQ0MTAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFS
QU1fUkVBRFdSSVRFKSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
a2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0JVUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJi
dXMiLCAiYnVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJCdXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9DT05TVFJVQ1RfT05M
WSB8IEdfUEFSQU1fUkVBRFdSSVRFKSkpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShva2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1BST1ZJREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX3BvaW50ZXIoInByb3ZpZGVyIiwgInByb3ZpZGVyIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm92aWRlciIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoR1BhcmFt
RmxhZ3MpIChHX1BBUkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9SRUFEV1JJVEUpKSk7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXZWJBdWRp
b1NyY1ByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9hdWRpb19zcmNfaW5p
dChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU3JjUHJpdmF0
ZSogcHJpdiA9IFdFQktJVF9XRUJfQVVESU9fU1JDX0dFVF9QUklWQVRFKHNyYyk7CisgICAgc3Jj
LT5wcml2ID0gcHJpdjsKKworICAgIEdzdFBhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZSA9IGdzdF9z
dGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpOworICAgIHByaXYtPnNyY3BhZCA9
IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBsYXRlKCJzcmMiLCBwYWRUZW1w
bGF0ZSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVChzcmMpLCBwcml2LT5z
cmNwYWQpOworCisgICAgcHJpdi0+cHJvdmlkZXIgPSAwOworICAgIHByaXYtPmJ1cyA9IDA7Cisg
ICAgcHJpdi0+b2Zmc2V0ID0gMDsKKworICAgIHByaXYtPm11dGV4ID0gZ19uZXcoR1N0YXRpY1Jl
Y011dGV4LCAxKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdChwcml2LT5tdXRleCk7CisK
KyAgICBwcml2LT50YXNrID0gZ3N0X3Rhc2tfY3JlYXRlKChHc3RUYXNrRnVuY3Rpb24pIHdlYktp
dFdlYkF1ZGlvU3JjTG9vcCwgc3JjKTsKKyAgICBnc3RfdGFza19zZXRfbG9jayhwcml2LT50YXNr
LCBwcml2LT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjQ29uc3Ry
dWN0ZWQoR09iamVjdCAqb2JqZWN0KQoreworICAgIFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBX
RUJLSVRfV0VCX0FVRElPX1NSQyhvYmplY3QpOworICAgIFdlYktpdFdlYkF1ZGlvU3JjUHJpdmF0
ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVChwcml2LT5idXMpOworICAgIEFTU0VS
VChwcml2LT5wcm92aWRlcik7CisgICAgQVNTRVJUKHByaXYtPnNhbXBsZVJhdGUpOworCisgICAg
cHJpdi0+aW50ZXJsZWF2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiaW50ZXJsZWF2ZSIs
IDApOworICAgIHByaXYtPndhdmVuYyA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgid2F2ZW5j
IiwgMCk7CisKKyAgICBpZiAoIXByaXYtPmludGVybGVhdmUpIHsKKyAgICAgICAgR1NUX0VSUk9S
X09CSkVDVChzcmMsICJGYWlsZWQgdG8gY3JlYXRlIGludGVybGVhdmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghcHJpdi0+d2F2ZW5jKSB7CisgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSB3YXZlbmMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGdzdF9vYmplY3RfcmVmX3NpbmsoR1NUX09CSkVDVChwcml2LT5pbnRl
cmxlYXZlKSk7CisgICAgZ3N0X29iamVjdF9yZWZfc2luayhHU1RfT0JKRUNUKHByaXYtPndhdmVu
YykpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHNyYyksIHByaXYtPmludGVybGVh
dmUsIHByaXYtPndhdmVuYywgTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwo
cHJpdi0+aW50ZXJsZWF2ZSwgInNyYyIsIHByaXYtPndhdmVuYywgInNpbmsiLCBHU1RfUEFEX0xJ
TktfQ0hFQ0tfTk9USElORyk7CisKKyAgICAvLyBGb3IgZWFjaCBjaGFubmVsIG9mIHRoZSBidXMg
Y3JlYXRlIGEgbmV3IHVwc3RyZWFtIGJyYW5jaCBmb3IgaW50ZXJsZWF2ZSwgbGlrZToKKyAgICAv
LyBxdWV1ZSAhIGNhcHNmaWx0ZXIgISBhdWRpb2NvbnZlcnQuIHdoaWNoIGlzIHBsdWdnZWQgdG8g
YSBuZXcgaW50ZXJsZWF2ZSByZXF1ZXN0IHNyY3BhZC4KKyAgICBmb3IgKHVuc2lnbmVkIGNoYW5u
ZWxJbmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IHByaXYtPmJ1cy0+bnVtYmVyT2ZDaGFubmVscygp
OyBjaGFubmVsSW5kZXgrKykgeworICAgICAgICBHc3RFbGVtZW50KiBxdWV1ZSA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCAwKTsKKyAgICAgICAgR3N0RWxlbWVudCogY2Fwc2Zp
bHRlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIDApOworICAgICAg
ICBHc3RFbGVtZW50KiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1
ZGlvY29udmVydCIsIDApOworCisgICAgICAgIEdzdENhcHMqIG1vbm9DYXBzID0gZ2V0R1N0cmVh
bWVyTW9ub0F1ZGlvQ2Fwcyhwcml2LT5zYW1wbGVSYXRlKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0
KGNhcHNmaWx0ZXIsICJjYXBzIiwgbW9ub0NhcHMsIE5VTEwpOworICAgICAgICBnc3RfY2Fwc191
bnJlZihtb25vQ2Fwcyk7CisKKyAgICAgICAgR3N0UGFkKiBwYWQgPSBnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChxdWV1ZSwgInNpbmsiKTsKKyAgICAgICAgcHJpdi0+cGFkcyA9IGdfc2xpc3Rf
cHJlcGVuZChwcml2LT5wYWRzLCBwYWQpOworCisgICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NU
X0JJTihzcmMpLCBxdWV1ZSwgY2Fwc2ZpbHRlciwgYXVkaW9jb252ZXJ0LCBOVUxMKTsKKyAgICAg
ICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwocXVldWUsICJzcmMiLCBjYXBzZmlsdGVyLCAi
c2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRf
bGlua19wYWRzX2Z1bGwoY2Fwc2ZpbHRlciwgInNyYyIsIGF1ZGlvY29udmVydCwgInNpbmsiLCBH
U1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisKKyAgICAgICAgR3N0UGFkKiBzcmNQYWQgPSBn
c3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChhdWRpb2NvbnZlcnQsICJzcmMiKTsKKyAgICAgICAg
R3N0UGFkKiBzaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKHByaXYtPmludGVy
bGVhdmUsICJzaW5rJWQiKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHNyY1BhZCwgc2lua1BhZCk7
CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChzcmNQYWQpKTsKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHNpbmtQYWQpKTsKKyAgICB9CisgICAgcHJpdi0+
cGFkcyA9IGdfc2xpc3RfcmV2ZXJzZShwcml2LT5wYWRzKTsKKworICAgIC8vIHdhdmVuYydzIHNy
YyBwYWQgaXMgdGhlIG9ubHkgdmlzaWJsZSBwYWQgb2Ygb3VyIGVsZW1lbnQuCisgICAgR3N0UGFk
KiB0YXJnZXRQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChwcml2LT53YXZlbmMsICJz
cmMiKTsKKyAgICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoR1NUX0dIT1NUX1BBRChwcml2LT5z
cmNwYWQpLCB0YXJnZXRQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYodGFyZ2V0UGFkKTsKK30K
Kworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3Qp
Cit7CisgICAgV2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9i
amVjdCk7CisgICAgV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2Owor
CisgICAgaWYgKHByaXYtPmludGVybGVhdmUpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NU
X09CSkVDVChwcml2LT5pbnRlcmxlYXZlKSk7CisgICAgaWYgKHByaXYtPndhdmVuYykKKyAgICAg
ICAgZ3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHByaXYtPndhdmVuYykpOworCisgICAgZ3N0
X29iamVjdF91bnJlZihwcml2LT50YXNrKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZShw
cml2LT5tdXRleCk7CisKKyAgICBnX3NsaXN0X2ZyZWVfZnVsbChwcml2LT5wYWRzLCByZWludGVy
cHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CisKKyAgICBHU1Rf
Q0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAoKEdPYmplY3QqICkoc3JjKSkp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19T
UkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnBy
aXY7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9SQVRFOgorICAgICAg
ICBwcml2LT5zYW1wbGVSYXRlID0gZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQlVTOgorICAgICAgICBwcml2LT5idXMgPSByZWludGVycHJl
dF9jYXN0PEF1ZGlvQnVzKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfUFJPVklERVI6CisgICAgICAgIHByaXYtPnByb3ZpZGVyID0g
cmVpbnRlcnByZXRfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyKj4oZ192YWx1ZV9nZXRfcG9pbnRl
cih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVD
VF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0dldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dF
Ql9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYg
PSBzcmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9SQVRF
OgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+c2FtcGxlUmF0ZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CVVM6CisgICAgICAgIGdfdmFsdWVfc2V0X3Bv
aW50ZXIodmFsdWUsIHByaXYtPmJ1cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
Uk9WSURFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgcHJpdi0+cHJvdmlk
ZXIpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJO
X0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0
V2ViQXVkaW9TcmMqIHNyYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYg
PSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBBU1NFUlQocHJpdi0+
cHJvdmlkZXIpOworICAgIGlmICghcHJpdi0+cHJvdmlkZXIgfHwgIXByaXYtPmJ1cykKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2l6ZV90IHJlcXVlc3RlZEZyYW1lcyA9IDEyODsKKyAgICBndWlu
dCBidWZmZXJTaXplID0gcmVxdWVzdGVkRnJhbWVzICogc2l6ZW9mKGZsb2F0KTsKKyAgICBwcml2
LT5wcm92aWRlci0+cHJvdmlkZUlucHV0KHByaXYtPmJ1cywgcmVxdWVzdGVkRnJhbWVzKTsKKwor
ICAgIGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IGdfc2xpc3RfbGVuZ3RoKHByaXYtPnBh
ZHMpOyBpbmRleCsrKSB7CisgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFk
Kj4oZ19zbGlzdF9udGhfZGF0YShwcml2LT5wYWRzLCBpbmRleCkpOworCisgICAgICAgIEdzdEJ1
ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsK
KyAgICAgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgICAgIG1lbWNweShHU1RfQlVGRkVSX0RBVEEo
YnVmZmVyKSwgcHJpdi0+YnVzLT5jaGFubmVsKGluZGV4KS0+ZGF0YSgpLCBidWZmZXJTaXplKTsK
KyAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9IHByaXYtPm9mZnNldDsKKyAgICAg
ICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKGJ1ZmZlcikgPSBwcml2LT5vZmZzZXQgKyByZXF1ZXN0
ZWRGcmFtZXM7CisKKyAgICAgICAgR3N0Q2FwcyogbW9ub0NhcHMgPSBnZXRHU3RyZWFtZXJNb25v
QXVkaW9DYXBzKHByaXYtPnNhbXBsZVJhdGUpOworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobW9ub0NhcHMsIDApOworICAgICAgICBnc3Rf
c3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwp
OworICAgICAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBjaGFubmVsUG9zaXRpb24gPSB3ZWJL
aXRXZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihpbmRleCk7CisgICAgICAgIGdzdF9h
dWRpb19zZXRfY2hhbm5lbF9wb3NpdGlvbnMoc3RydWN0dXJlLCAmY2hhbm5lbFBvc2l0aW9uKTsK
KyAgICAgICAgZ3N0X2J1ZmZlcl9zZXRfY2FwcyhidWZmZXIsIG1vbm9DYXBzKTsKKyAgICAgICAg
Z3N0X2NhcHNfdW5yZWYobW9ub0NhcHMpOworCisgICAgICAgIGdzdF9wYWRfY2hhaW4ocGFkLCBi
dWZmZXIpOworICAgIH0KKworICAgIHByaXYtPm9mZnNldCArPSByZXF1ZXN0ZWRGcmFtZXM7Cit9
CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0
YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7Cisg
ICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOwor
ICAgIFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhlbGVtZW50
KTsKKworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5H
RV9OVUxMX1RPX1JFQURZOgorICAgICAgICBpZiAoIXNyYy0+cHJpdi0+aW50ZXJsZWF2ZSkgewor
ICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdlX25l
dyhlbGVtZW50LCAiaW50ZXJsZWF2ZSIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9S
KHNyYywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBpbnRlcmxlYXZlIikpOworICAg
ICAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIXNyYy0+cHJpdi0+d2F2ZW5jKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9w
b3N0X21lc3NhZ2UoZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnc3RfbWlzc2luZ19lbGVtZW50X21lc3NhZ2VfbmV3KGVsZW1lbnQsICJ3YXZlbmMiKSk7Cisg
ICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIE1JU1NJTkdfUExVR0lOLCAo
MCksICgibm8gd2F2ZW5jIikpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0Vf
RkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xh
c3MpLT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CisgICAgaWYgKEdfVU5MSUtF
TFkocmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkpIHsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7CisgICAgICAgIHJldHVybiByZXQ7
CisgICAgfQorCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVf
Q0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJS
RUFEWS0+UEFVU0VEIik7CisgICAgICAgIGlmICghZ3N0X3Rhc2tfc3RhcnQoc3JjLT5wcml2LT50
YXNrKSkKKyAgICAgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIGlm
ICghZ3N0X3Rhc2tfam9pbihzcmMtPnByaXYtPnRhc2spKQorICAgICAgICAgICAgcmV0ID0gR1NU
X1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1
ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MDhmOTVhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5k
QGlnYWxpYS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdl
YktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0V2ViQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXJfaAorI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+
CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDICAg
ICAgICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJL
SVRfV0VCX0FVRElPX1NSQyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9D
QVNUICgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2ViQXVkaW9TcmMp
KQorI2RlZmluZSBXRUJLSVRfV0VCX0FVRElPX1NSQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDLCBXZWJL
aXRXZWJBdWRpb1NyY0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9BVURJT19TUkMob2Jq
KSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBF
X1dFQl9BVURJT19TUkMpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0FVRElPX1NSQ19DTEFTUyhr
bGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJf
QVVESU9fU1JDKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU3JjICAgICAgICBX
ZWJLaXRXZWJBdWRpb1NyYzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyY0NsYXNz
ICAgV2ViS2l0V2ViQXVkaW9TcmNDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRp
b1NyY1ByaXZhdGUgV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdl
YkF1ZGlvU3JjIHsKKyAgICBHc3RCaW4gcGFyZW50OworCisgICAgV2ViS2l0V2ViQXVkaW9TcmNQ
cml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyY0NsYXNzIHsKKyAg
ICBHc3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF93ZWJfYXVkaW9f
c3JjX2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUikKKyNlbmRpZgotLSAKMS43LjcuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114022</attachid>
            <date>2011-11-08 02:58:37 -0800</date>
            <delta_ts>2011-11-08 03:10:01 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>26185</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA1M2U4ZDE0ZTRmOGFmODRlZjE5MWFjZTFjMTU5YzhiZGVjNGYxZjUzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz
MiArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAg
fCAgICAyICsKIC4uLi9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5j
cHAgIHwgICA3OSArKysrCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAgICAgfCAgMzg2ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVhbWVy
L1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgNTIgKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDU1OSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwMjY2Njg4Li5jYmUzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTEtMTAtMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIFdlYkF1ZGlvIEF1ZGlvRGVzdGluYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODM1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IEdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBwdWxsaW5nIGRhdGEgZnJvbSB0aGUgQXVkaW9CdXMgYW5kCisgICAgICAg
IG91dHB1dGluZyBhdWRpbyBpbnRlcmxlYXZlZCBHc3RCdWZmZXJzIHN1aXRhYmxlIGZvciBwbGF5
YmFjay4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b25HU3RyZWFtZXJXYXZwYXJzZVBhZEFkZGVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6QXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyOjpwbHVnU2luayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uR1N0cmVhbWVyOjpzdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAg
ICAoZ2V0R1N0cmVhbWVyTW9ub0F1ZGlvQ2Fwcyk6CisgICAgICAgICh3ZWJLaXRXZWJBdWRpb0dT
dHJlYW1lckNoYW5uZWxQb3NpdGlvbik6CisgICAgICAgICh3ZWJraXRfd2ViX2F1ZGlvX3NyY19j
bGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2luaXQpOgorICAgICAg
ICAod2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJLaXRXZWJBdWRp
b1NyY0ZpbmFsaXplKToKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJvcGVydHkpOgor
ICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRX
ZWJBdWRpb1NyY0xvb3ApOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDExLTExLTA3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVy
eXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlZmFjdG9yIHNob3J0
Y3V0cyBhbmQgc2V0dGluZ3Mgc2NyZWVucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggY2E1MjUyMS4uY2VhZjAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00
Nzg3LDYgKzQ3ODcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNH
dGsuY3BwCiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNBdWRpb0J1ZmZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFt
ZXIuY3BwCmluZGV4IDk0M2Q4NGEuLjBmMzU3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5h
dGlvbkdTdHJlYW1lci5jcHAKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5jbHVkZSAiQXVkaW9DaGFu
bmVsLmgiCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkdPd25Q
dHIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5j
bHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwyNSArNDIsMTAwIEBAIGZsb2F0IEF1ZGlvRGVzdGlu
YXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCiAgICAgcmV0dXJuIDQ0MTAwOwogfQogCitzdGF0
aWMgdm9pZCBvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFjayhHc3RFbGVtZW50KiBl
bGVtZW50LCBHc3RQYWQqIHBhZCwgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lciogZGVzdGluYXRp
b24pCit7CisgICAgZGVzdGluYXRpb24tPnBsdWdTaW5rKHBhZCk7Cit9CisKIEF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIoQXVkaW9Tb3VyY2VQcm92
aWRlciYgcHJvdmlkZXIsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgOiBtX3Byb3ZpZGVyKHByb3Zp
ZGVyKQogICAgICwgbV9yZW5kZXJCdXMoMiwgMTI4LCB0cnVlKQogICAgICwgbV9zYW1wbGVSYXRl
KHNhbXBsZVJhdGUpCiAgICAgLCBtX2lzUGxheWluZyhmYWxzZSkKIHsKKyAgICBzdGF0aWMgYm9v
bCBnc3RJbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghZ3N0SW5pdGlhbGl6ZWQpCisgICAg
ICAgIGdzdEluaXRpYWxpemVkID0gZ3N0X2luaXRfY2hlY2soMCwgMCwgMCk7CisgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShnc3RJbml0aWFsaXplZCwgIkdTdHJlYW1lciBpbml0aWFsaXphdGlvbiBm
YWlsZWQiKTsKKworICAgIG1fcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3KCJwbGF5Iik7CisK
KyAgICBHc3RFbGVtZW50KiB3ZWJraXRBdWRpb1NyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0RWxl
bWVudCo+KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDLCAicmF0ZSIsIHN0
YXRpY19jYXN0PGdmbG9hdD4oc2FtcGxlUmF0ZSksICJidXMiLCBzdGF0aWNfY2FzdDxncG9pbnRl
cj4oJm1fcmVuZGVyQnVzKSwgInByb3ZpZGVyIiwgJm1fcHJvdmlkZXIsIE5VTEwpKTsKKworICAg
IEdzdEVsZW1lbnQqIHdhdnBhcnNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3YXZwYXJz
ZSIsIDApOworCisgICAgbV93YXZQYXJzZXJBdmFpbGFibGUgPSB3YXZwYXJzZTsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fd2F2UGFyc2VyQXZhaWxhYmxlLCAiRmFpbGVkIHRvIGNyZWF0ZSBH
U3RyZWFtZXIgd2F2cGFyc2UgZWxlbWVudCIpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2F2cGFyc2UsICJw
YWQtYWRkZWQiLCBHX0NBTExCQUNLKG9uR1N0cmVhbWVyV2F2cGFyc2VQYWRBZGRlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUpLCB3ZWJr
aXRBdWRpb1NyYywgd2F2cGFyc2UsIE5VTEwpOworICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19m
dWxsKHdlYmtpdEF1ZGlvU3JjLCAic3JjIiwgd2F2cGFyc2UsICJzaW5rIiwgR1NUX1BBRF9MSU5L
X0NIRUNLX05PVEhJTkcpOwogfQogCiBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+QXVkaW9E
ZXN0aW5hdGlvbkdTdHJlYW1lcigpCiB7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlw
ZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fcGlwZWxpbmUp
OworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnBsdWdTaW5rKEdzdFBhZCog
cGFkKQoreworICAgIEFTU0VSVChtX3dhdlBhcnNlckF2YWlsYWJsZSk7CisKKyAgICBHc3RFbGVt
ZW50KiBhdWRpb3NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3Npbmsi
LCAwKTsKKyAgICBtX2F1ZGlvU2lua0F2YWlsYWJsZSA9IGF1ZGlvc2luazsKKworICAgIGlmIChh
dWRpb3NpbmspIHsKKyAgICAgICAgLy8gQXV0b2F1ZGlvc2luayBkb2VzIHRoZSByZWFsIHNpbmsg
ZGV0ZWN0aW9uIGluIHRoZQorICAgICAgICAvLyBOVUxMLT5SRUFEWSB0cmFuc2l0aW9uIHNvIGl0
J3MgYmVzdCB0byByb2xsIGl0IHRvIFJFQURZIGFzCisgICAgICAgIC8vIHNvb24gYXMgcG9zc2li
bGUgdG8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtCisgICAgICAgIC8vIGF1ZGlvc2lu
ayB3YXMgbG9hZGVkIGNvcnJlY3RseS4KKyAgICAgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3Rh
dGVDaGFuZ2VSZXR1cm4gPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUoYXVkaW9zaW5rLCBHU1RfU1RB
VEVfUkVBRFkpOworICAgICAgICBpZiAoc3RhdGVDaGFuZ2VSZXR1cm4gPT0gR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoYXVkaW9z
aW5rLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgICAgICBtX2F1ZGlvU2lua0F2YWlsYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZihhdWRpb3NpbmspOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX2F1ZGlvU2lua0F2YWlsYWJsZSwgIkZhaWxlZCB0byBjcmVhdGUgR1N0cmVhbWVyIGF1dG9h
dWRpb3NpbmsgZWxlbWVudCIpOworICAgIGlmICghbV9hdWRpb1NpbmtBdmFpbGFibGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdzdEVsZW1lbnQqIGF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgMCk7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShH
U1RfQklOKG1fcGlwZWxpbmUpLCBhdWRpb2NvbnZlcnQsIGF1ZGlvc2luaywgTlVMTCk7CisKKyAg
ICAvLyBMaW5rIHdhdnBhcnNlJ3Mgc3JjIHBhZCB0byBhdWRpb2NvbnZlcnQgc2luayBwYWQuCisg
ICAgR3N0UGFkKiBzaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXVkaW9jb252
ZXJ0LCAic2luayIpOworICAgIGdzdF9wYWRfbGluayhwYWQsIHNpbmtQYWQpOworICAgIGdzdF9v
YmplY3RfdW5yZWYoR1NUX09CSkVDVChzaW5rUGFkKSk7CisKKyAgICAvLyBMaW5rIGF1ZGlvY29u
dmVydCB0byBhdWRpb3NpbmsgYW5kIHJvbGwgc3RhdGVzLgorICAgIGdzdF9lbGVtZW50X2xpbmtf
cGFkc19mdWxsKGF1ZGlvY29udmVydCwgInNyYyIsIGF1ZGlvc2luaywgInNpbmsiLCBHU1RfUEFE
X0xJTktfQ0hFQ0tfTk9USElORyk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3Bh
cmVudChhdWRpb2NvbnZlcnQpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQoYXVkaW9zaW5rKTsKIH0KIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpzdGFy
dCgpCiB7CisgICAgQVNTRVJUKG1fd2F2UGFyc2VyQXZhaWxhYmxlKTsKKyAgICBpZiAoIW1fd2F2
UGFyc2VyQXZhaWxhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgIG1faXNQbGF5aW5nID0g
dHJ1ZTsKIH0KIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpzdG9wKCkKIHsKKyAg
ICBBU1NFUlQobV93YXZQYXJzZXJBdmFpbGFibGUgJiYgbV9hdWRpb1NpbmtBdmFpbGFibGUpOwor
ICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFibGUgfHwgbV9hdWRpb1NpbmtBdmFpbGFibGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBH
U1RfU1RBVEVfUEFVU0VEKTsKICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5h
dGlvbkdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAppbmRleCA3Y2YzNzk4Li41MTBkNTg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0
aW5hdGlvbkdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmgKQEAgLTIyLDYgKzIyLDkgQEAKICNp
bmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKIAordHlw
ZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQ
YWQgR3N0UGFkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvRGVzdGluYXRp
b25HU3RyZWFtZXIgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CkBAIC0zNiwxMiArMzksMTcg
QEAgcHVibGljOgogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBs
ZVJhdGU7IH0KICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvdmlkZXI7IH0KIAorICAgIHZvaWQgcGx1Z1NpbmsoR3N0UGFkKik7CisK
IHByaXZhdGU6CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciYgbV9wcm92aWRlcjsKICAgICBBdWRp
b0J1cyBtX3JlbmRlckJ1czsKIAogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKICAgICBib29sIG1f
aXNQbGF5aW5nOworICAgIGJvb2wgbV93YXZQYXJzZXJBdmFpbGFibGU7CisgICAgYm9vbCBtX2F1
ZGlvU2lua0F2YWlsYWJsZTsKKyAgICBHc3RFbGVtZW50KiBtX3BpcGVsaW5lOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc0NTI0Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwzODYgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxp
YS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIkdPd25QdHIu
aCIKKworI2luY2x1ZGUgPGdzdC9hdWRpby9tdWx0aWNoYW5uZWwuaD4KKyNpbmNsdWRlIDxnc3Qv
cGJ1dGlscy9wYnV0aWxzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjZGVmaW5l
IFdFQktJVF9XRUJfQVVESU9fU1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2ViQXVk
aW9TcmNQcml2YXRlKSkKKworZW51bSB7CisgICAgUFJPUF9SQVRFID0gMSwKKyAgICBQUk9QX0JV
UyA9IDIsCisgICAgUFJPUF9QUk9WSURFUiA9IDMKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViQXVk
aW9TcmNQcml2YXRlIHsKKyAgICBnZmxvYXQgc2FtcGxlUmF0ZTsKKyAgICBBdWRpb0J1cyogYnVz
OworICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyOworCisgICAgZ3VpbnQ2NCBvZmZz
ZXQ7IC8vIGN1cnJlbnQgYnVmZmVyIG9mZnNldC4KKworICAgIEdzdEVsZW1lbnQqIGludGVybGVh
dmU7CisgICAgR3N0RWxlbWVudCogd2F2ZW5jOworCisgICAgR3N0VGFzayogdGFzazsKKyAgICBH
U3RhdGljUmVjTXV0ZXgqIG11dGV4OworCisgICAgR1NMaXN0KiBwYWRzOyAvLyBsaXN0IG9mIHF1
ZXVlIHNyYyBwYWRzLiBPbmUgcXVldWUgZm9yIGVhY2ggcGxhbmFyIGF1ZGlvIGNoYW5uZWwuCisg
ICAgR3N0UGFkKiBzcmNwYWQ7IC8vIHNyYyBwYWQgb2YgdGhlIGVsZW1lbnQsIGludGVybGVhdmVk
IHdhdiBkYXRhIGlzIHB1c2hlZCB0byBpdC4KK307CisKKworc3RhdGljIEdzdFN0YXRpY1BhZFRl
bXBsYXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyYyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHU1RfUEFEX1NSQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9QQURfQUxXQVlTLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NU
X1NUQVRJQ19DQVBTKCJhdWRpby94LXdhdiIpKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJ
Qyh3ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1ZworCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1Ny
Y0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjRmlu
YWxpemUoR09iamVjdCopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0
eShHT2JqZWN0KiwgZ3VpbnQsIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2
b2lkIHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50LCBHVmFsdWUq
LCBHUGFyYW1TcGVjKik7CitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViQXVk
aW9TcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UpOworc3RhdGljIHZv
aWQgd2ViS2l0V2ViQXVkaW9TcmNMb29wKFdlYktpdFdlYkF1ZGlvU3JjKik7CisKK3N0YXRpYyBH
c3RDYXBzKiBnZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBzKGZsb2F0IHNhbXBsZVJhdGUpCit7Cisg
ICAgcmV0dXJuIGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3LWZsb2F0IiwgInJhdGUi
LCBHX1RZUEVfSU5ULCBzdGF0aWNfY2FzdDxpbnQ+KHNhbXBsZVJhdGUpLCAiY2hhbm5lbHMiLCBH
X1RZUEVfSU5ULCAxLCAiZW5kaWFubmVzcyIsIEdfVFlQRV9JTlQsIEdfQllURV9PUkRFUiwgIndp
ZHRoIiwgR19UWVBFX0lOVCwgMzIsIE5VTEwpOworfQorCitzdGF0aWMgR3N0QXVkaW9DaGFubmVs
UG9zaXRpb24gd2ViS2l0V2ViQXVkaW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24oaW50IGNoYW5u
ZWxJbmRleCkKK3sKKyAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NpdGlvbjsKKworICAg
IHN3aXRjaCAoY2hhbm5lbEluZGV4KSB7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbExlZnQ6
CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVG
VDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0OgorICAg
ICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsQ2VudGVyOgorICAgICAg
ICAvLyBDZW50ZXIgYW5kIG1vbm8gYXJlIHRoZSBzYW1lLgorICAgICAgICBwb3NpdGlvbiA9IEdT
VF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX01PTk87CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxMRkU6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElP
X0NIQU5ORUxfUE9TSVRJT05fTEZFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVz
OjpDaGFubmVsU3Vycm91bmRMZWZ0OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFO
TkVMX1BPU0lUSU9OX1JFQVJfTEVGVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1
czo6Q2hhbm5lbFN1cnJvdW5kUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NI
QU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfTsKKworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworI2Rl
ZmluZSB3ZWJraXRfd2ViX2F1ZGlvX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRXZWJBdWRpb1NyYywgd2Via2l0X3dlYl9hdWRpb19z
cmMsIEdTVF9UWVBFX0JJTiwgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYl9hdWRp
b19zcmNfZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0d2ViYXVk
aW9zcmMiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ3ZWJhdWRpb3NyYyBlbGVtZW50IikpOworCitzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KFdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MqIGts
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2tsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3Mp
OworICAgIEdzdEVsZW1lbnRDbGFzcyogZWtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
OworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShla2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0
ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNf
c2ltcGxlKGVrbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGdjaGFyKikgIldlYktpdCBXZWJBdWRpbyBzb3VyY2UgZWxlbWVudCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2hhciopICJTb3VyY2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NoYXIqKSAiSGFuZGxlcyBXZWJBdWRp
byBkYXRhIGZyb20gV2ViQ29yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChnY2hhciopICJQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPiIp
OworCisgICAgb2tsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYktpdFdlYkF1ZGlvU3JjQ29uc3RydWN0
ZWQ7CisgICAgb2tsYXNzLT5maW5hbGl6ZSA9IHdlYktpdFdlYkF1ZGlvU3JjRmluYWxpemU7Cisg
ICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUgPSB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlOwor
CisgICAgb2tsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3BlcnR5
OworICAgIG9rbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0
eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SQVRFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KCJyYXRlIiwgInJhdGUiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJT
YW1wbGUgcmF0ZSIsIEdfTUlORE9VQkxFLCBHX01BWERPVUJMRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDEwMC4wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFn
cykgKEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1JFQURXUklURSkpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9CVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfcG9pbnRlcigiYnVzIiwgImJ1cyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChH
UGFyYW1GbGFncykgKEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1JFQURXUklURSkp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9QUk9WSURFUiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJwcm92aWRlciIs
ICJwcm92aWRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiUHJvdmlkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9DT05TVFJV
Q1RfT05MWSB8IEdfUEFSQU1fUkVBRFdSSVRFKSkpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2luaXQoV2ViS2l0V2ViQXVkaW9TcmMqIHNy
YykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0FV
RElPX1NSQ19HRVRfUFJJVkFURShzcmMpOworICAgIHNyYy0+cHJpdiA9IHByaXY7CisKKyAgICBH
c3RQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGUgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQo
JnNyY1RlbXBsYXRlKTsKKyAgICBwcml2LT5zcmNwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190
YXJnZXRfZnJvbV90ZW1wbGF0ZSgic3JjIiwgcGFkVGVtcGxhdGUpOworICAgIGdzdF9lbGVtZW50
X2FkZF9wYWQoR1NUX0VMRU1FTlQoc3JjKSwgcHJpdi0+c3JjcGFkKTsKKworICAgIHByaXYtPnBy
b3ZpZGVyID0gMDsKKyAgICBwcml2LT5idXMgPSAwOworICAgIHByaXYtPm9mZnNldCA9IDA7CisK
KyAgICBwcml2LT5tdXRleCA9IGdfbmV3KEdTdGF0aWNSZWNNdXRleCwgMSk7CisgICAgZ19zdGF0
aWNfcmVjX211dGV4X2luaXQocHJpdi0+bXV0ZXgpOworCisgICAgcHJpdi0+dGFzayA9IGdzdF90
YXNrX2NyZWF0ZSgoR3N0VGFza0Z1bmN0aW9uKSB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AsIHNyYyk7
CisgICAgZ3N0X3Rhc2tfc2V0X2xvY2socHJpdi0+dGFzaywgcHJpdi0+bXV0ZXgpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0cnVjdGVkKEdPYmplY3QgKm9iamVjdCkK
K3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2Jq
ZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisK
KyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBBU1NFUlQocHJpdi0+cHJvdmlkZXIpOworICAg
IEFTU0VSVChwcml2LT5zYW1wbGVSYXRlKTsKKworICAgIHByaXYtPmludGVybGVhdmUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImludGVybGVhdmUiLCAwKTsKKyAgICBwcml2LT53YXZlbmMg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdmVuYyIsIDApOworCisgICAgaWYgKCFwcml2
LT5pbnRlcmxlYXZlKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRv
IGNyZWF0ZSBpbnRlcmxlYXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IXByaXYtPndhdmVuYykgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0
byBjcmVhdGUgd2F2ZW5jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnc3Rfb2Jq
ZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1QocHJpdi0+aW50ZXJsZWF2ZSkpOworICAgIGdzdF9vYmpl
Y3RfcmVmX3NpbmsoR1NUX09CSkVDVChwcml2LT53YXZlbmMpKTsKKworICAgIGdzdF9iaW5fYWRk
X21hbnkoR1NUX0JJTihzcmMpLCBwcml2LT5pbnRlcmxlYXZlLCBwcml2LT53YXZlbmMsIE5VTEwp
OworICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHByaXYtPmludGVybGVhdmUsICJzcmMi
LCBwcml2LT53YXZlbmMsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworCisg
ICAgLy8gRm9yIGVhY2ggY2hhbm5lbCBvZiB0aGUgYnVzIGNyZWF0ZSBhIG5ldyB1cHN0cmVhbSBi
cmFuY2ggZm9yIGludGVybGVhdmUsIGxpa2U6CisgICAgLy8gcXVldWUgISBjYXBzZmlsdGVyICEg
YXVkaW9jb252ZXJ0LiB3aGljaCBpcyBwbHVnZ2VkIHRvIGEgbmV3IGludGVybGVhdmUgcmVxdWVz
dCBzcmNwYWQuCisgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5k
ZXggPCBwcml2LT5idXMtPm51bWJlck9mQ2hhbm5lbHMoKTsgY2hhbm5lbEluZGV4KyspIHsKKyAg
ICAgICAgR3N0RWxlbWVudCogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVl
IiwgMCk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImNhcHNmaWx0ZXIiLCAwKTsKKyAgICAgICAgR3N0RWxlbWVudCogYXVkaW9jb252
ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKworICAg
ICAgICBHc3RDYXBzKiBtb25vQ2FwcyA9IGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+
c2FtcGxlUmF0ZSk7CisgICAgICAgIGdfb2JqZWN0X3NldChjYXBzZmlsdGVyLCAiY2FwcyIsIG1v
bm9DYXBzLCBOVUxMKTsKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYobW9ub0NhcHMpOworCisgICAg
ICAgIC8vIENvbmZpZ3VyZSB0aGUgcXVldWUgZm9yIG1pbmltYWwgbGF0ZW5jeS4KKyAgICAgICAg
Z19vYmplY3Rfc2V0KHF1ZXVlLCAibWF4LXNpemUtYnVmZmVycyIsIHN0YXRpY19jYXN0PGd1aW50
PigyKSwgTlVMTCk7CisKKyAgICAgICAgR3N0UGFkKiBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChxdWV1ZSwgInNpbmsiKTsKKyAgICAgICAgcHJpdi0+cGFkcyA9IGdfc2xpc3RfcHJl
cGVuZChwcml2LT5wYWRzLCBwYWQpOworCisgICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
TihzcmMpLCBxdWV1ZSwgY2Fwc2ZpbHRlciwgYXVkaW9jb252ZXJ0LCBOVUxMKTsKKyAgICAgICAg
Z3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwocXVldWUsICJzcmMiLCBjYXBzZmlsdGVyLCAic2lu
ayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbGlu
a19wYWRzX2Z1bGwoY2Fwc2ZpbHRlciwgInNyYyIsIGF1ZGlvY29udmVydCwgInNpbmsiLCBHU1Rf
UEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisKKyAgICAgICAgR3N0UGFkKiBzcmNQYWQgPSBnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChhdWRpb2NvbnZlcnQsICJzcmMiKTsKKyAgICAgICAgR3N0
UGFkKiBzaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKHByaXYtPmludGVybGVh
dmUsICJzaW5rJWQiKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHNyY1BhZCwgc2lua1BhZCk7Cisg
ICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChzcmNQYWQpKTsKKyAgICAgICAgZ3N0
X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHNpbmtQYWQpKTsKKyAgICB9CisgICAgcHJpdi0+cGFk
cyA9IGdfc2xpc3RfcmV2ZXJzZShwcml2LT5wYWRzKTsKKworICAgIC8vIHdhdmVuYydzIHNyYyBw
YWQgaXMgdGhlIG9ubHkgdmlzaWJsZSBwYWQgb2Ygb3VyIGVsZW1lbnQuCisgICAgR3N0UGFkKiB0
YXJnZXRQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChwcml2LT53YXZlbmMsICJzcmMi
KTsKKyAgICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoR1NUX0dIT1NUX1BBRChwcml2LT5zcmNw
YWQpLCB0YXJnZXRQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYodGFyZ2V0UGFkKTsKK30KKwor
c3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVj
dCk7CisgICAgV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisg
ICAgaWYgKHByaXYtPmludGVybGVhdmUpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09C
SkVDVChwcml2LT5pbnRlcmxlYXZlKSk7CisgICAgaWYgKHByaXYtPndhdmVuYykKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHByaXYtPndhdmVuYykpOworCisgICAgZ3N0X29i
amVjdF91bnJlZihwcml2LT50YXNrKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZShwcml2
LT5tdXRleCk7CisKKyAgICBnX3NsaXN0X2ZyZWVfZnVsbChwcml2LT5wYWRzLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CisKKyAgICBHU1RfQ0FM
TF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAoKEdPYmplY3QqICkoc3JjKSkpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMo
b2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7
CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9SQVRFOgorICAgICAgICBw
cml2LT5zYW1wbGVSYXRlID0gZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQlVTOgorICAgICAgICBwcml2LT5idXMgPSByZWludGVycHJldF9j
YXN0PEF1ZGlvQnVzKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUFJPVklERVI6CisgICAgICAgIHByaXYtPnByb3ZpZGVyID0gcmVp
bnRlcnByZXRfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0dldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9B
VURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9SQVRFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+c2FtcGxlUmF0ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CVVM6CisgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50
ZXIodmFsdWUsIHByaXYtPmJ1cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9W
SURFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgcHJpdi0+cHJvdmlkZXIp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2Vi
QXVkaW9TcmMqIHNyYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CisKKyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBBU1NFUlQocHJpdi0+cHJv
dmlkZXIpOworICAgIGlmICghcHJpdi0+cHJvdmlkZXIgfHwgIXByaXYtPmJ1cykKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2l6ZV90IHJlcXVlc3RlZEZyYW1lcyA9IDEyODsKKyAgICBndWludCBi
dWZmZXJTaXplID0gcmVxdWVzdGVkRnJhbWVzICogc2l6ZW9mKGZsb2F0KTsKKyAgICBwcml2LT5w
cm92aWRlci0+cHJvdmlkZUlucHV0KHByaXYtPmJ1cywgcmVxdWVzdGVkRnJhbWVzKTsKKworICAg
IGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IGdfc2xpc3RfbGVuZ3RoKHByaXYtPnBhZHMp
OyBpbmRleCsrKSB7CisgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4o
Z19zbGlzdF9udGhfZGF0YShwcml2LT5wYWRzLCBpbmRleCkpOworCisgICAgICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyAg
ICAgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgICAgIG1lbWNweShHU1RfQlVGRkVSX0RBVEEoYnVm
ZmVyKSwgcHJpdi0+YnVzLT5jaGFubmVsKGluZGV4KS0+ZGF0YSgpLCBidWZmZXJTaXplKTsKKyAg
ICAgICAgR1NUX0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9IHByaXYtPm9mZnNldDsKKyAgICAgICAg
R1NUX0JVRkZFUl9PRkZTRVRfRU5EKGJ1ZmZlcikgPSBwcml2LT5vZmZzZXQgKyByZXF1ZXN0ZWRG
cmFtZXM7CisKKyAgICAgICAgR3N0Q2FwcyogbW9ub0NhcHMgPSBnZXRHU3RyZWFtZXJNb25vQXVk
aW9DYXBzKHByaXYtPnNhbXBsZVJhdGUpOworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobW9ub0NhcHMsIDApOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwor
ICAgICAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBjaGFubmVsUG9zaXRpb24gPSB3ZWJLaXRX
ZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihpbmRleCk7CisgICAgICAgIGdzdF9hdWRp
b19zZXRfY2hhbm5lbF9wb3NpdGlvbnMoc3RydWN0dXJlLCAmY2hhbm5lbFBvc2l0aW9uKTsKKyAg
ICAgICAgZ3N0X2J1ZmZlcl9zZXRfY2FwcyhidWZmZXIsIG1vbm9DYXBzKTsKKyAgICAgICAgZ3N0
X2NhcHNfdW5yZWYobW9ub0NhcHMpOworCisgICAgICAgIGdzdF9wYWRfY2hhaW4ocGFkLCBidWZm
ZXIpOworICAgIH0KKworICAgIHByaXYtPm9mZnNldCArPSByZXF1ZXN0ZWRGcmFtZXM7Cit9CisK
K3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRl
KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgICAg
R3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOworICAg
IFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhlbGVtZW50KTsK
KworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9O
VUxMX1RPX1JFQURZOgorICAgICAgICBpZiAoIXNyYy0+cHJpdi0+aW50ZXJsZWF2ZSkgeworICAg
ICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdlX25ldyhl
bGVtZW50LCAiaW50ZXJsZWF2ZSIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNy
YywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBpbnRlcmxlYXZlIikpOworICAgICAg
ICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXNyYy0+cHJpdi0+d2F2ZW5jKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0
X21lc3NhZ2UoZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
c3RfbWlzc2luZ19lbGVtZW50X21lc3NhZ2VfbmV3KGVsZW1lbnQsICJ3YXZlbmMiKSk7CisgICAg
ICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIE1JU1NJTkdfUExVR0lOLCAoMCks
ICgibm8gd2F2ZW5jIikpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJ
TFVSRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3Mp
LT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CisgICAgaWYgKEdfVU5MSUtFTFko
cmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7CisgICAgICAgIHJldHVybiByZXQ7Cisg
ICAgfQorCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hB
TkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFE
WS0+UEFVU0VEIik7CisgICAgICAgIGlmICghZ3N0X3Rhc2tfc3RhcnQoc3JjLT5wcml2LT50YXNr
KSkKKyAgICAgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIGlmICgh
Z3N0X3Rhc2tfam9pbihzcmMtPnByaXYtPnRhc2spKQorICAgICAgICAgICAgcmV0ID0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlv
U291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhm
OTVhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGln
YWxpYS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0V2ViQXVkaW9Tb3VyY2VH
U3RyZWFtZXJfaAorI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDICAgICAg
ICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRf
V0VCX0FVRElPX1NSQyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
ICgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2ViQXVkaW9TcmMpKQor
I2RlZmluZSBXRUJLSVRfV0VCX0FVRElPX1NSQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDLCBXZWJLaXRX
ZWJBdWRpb1NyY0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9BVURJT19TUkMob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1dF
Ql9BVURJT19TUkMpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0FVRElPX1NSQ19DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfQVVE
SU9fU1JDKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU3JjICAgICAgICBXZWJL
aXRXZWJBdWRpb1NyYzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyY0NsYXNzICAg
V2ViS2l0V2ViQXVkaW9TcmNDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRpb1Ny
Y1ByaXZhdGUgV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYkF1
ZGlvU3JjIHsKKyAgICBHc3RCaW4gcGFyZW50OworCisgICAgV2ViS2l0V2ViQXVkaW9TcmNQcml2
YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyY0NsYXNzIHsKKyAgICBH
c3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF93ZWJfYXVkaW9fc3Jj
X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
UikKKyNlbmRpZgotLSAKMS43LjcuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114025</attachid>
            <date>2011-11-08 03:10:01 -0800</date>
            <delta_ts>2011-11-10 06:38:06 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>26185</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAzOWJmMTYxN2NkZjVhMDllNjYyMDVmNWM5Y2E4M2NkZWIyOGY1ZjM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAz
MiArKwogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSAgICAgICAgICAgICAgICAg
fCAgICAyICsKIC4uLi9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5j
cHAgIHwgICA3OSArKysrCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAgICAgfCAgMzg2ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVhbWVy
L1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgNTIgKysrCiA2IGZpbGVz
IGNoYW5nZWQsIDU1OSBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCAwMjY2Njg4Li5jYmUzYmY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTEtMTAtMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIFdlYkF1ZGlvIEF1ZGlvRGVzdGluYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODM1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IEdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBwdWxsaW5nIGRhdGEgZnJvbSB0aGUgQXVkaW9CdXMgYW5kCisgICAgICAg
IG91dHB1dGluZyBhdWRpbyBpbnRlcmxlYXZlZCBHc3RCdWZmZXJzIHN1aXRhYmxlIGZvciBwbGF5
YmFjay4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6b25HU3RyZWFtZXJXYXZwYXJzZVBhZEFkZGVkQ2FsbGJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6QXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyOjpwbHVnU2luayk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyOjpzdGFydCk6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uR1N0cmVhbWVyOjpzdG9wKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAg
ICAoZ2V0R1N0cmVhbWVyTW9ub0F1ZGlvQ2Fwcyk6CisgICAgICAgICh3ZWJLaXRXZWJBdWRpb0dT
dHJlYW1lckNoYW5uZWxQb3NpdGlvbik6CisgICAgICAgICh3ZWJraXRfd2ViX2F1ZGlvX3NyY19j
bGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2luaXQpOgorICAgICAg
ICAod2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZCk6CisgICAgICAgICh3ZWJLaXRXZWJBdWRp
b1NyY0ZpbmFsaXplKToKKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJvcGVydHkpOgor
ICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJLaXRX
ZWJBdWRpb1NyY0xvb3ApOgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZSk6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDExLTExLTA3ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVy
eXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHJlZmFjdG9yIHNob3J0
Y3V0cyBhbmQgc2V0dGluZ3Mgc2NyZWVucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5k
ZXggY2E1MjUyMS4uY2VhZjAyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00
Nzg3LDYgKzQ3ODcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgXAorCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNH
dGsuY3BwCiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNv
cmUvSlNBdWRpb0J1ZmZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFt
ZXIuY3BwCmluZGV4IDk0M2Q4NGEuLjBmMzU3M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5h
dGlvbkdTdHJlYW1lci5jcHAKQEAgLTI1LDYgKzI1LDEwIEBACiAjaW5jbHVkZSAiQXVkaW9DaGFu
bmVsLmgiCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkdPd25Q
dHIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5j
bHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOCwyNSArNDIsMTAwIEBAIGZsb2F0IEF1ZGlvRGVzdGlu
YXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCiAgICAgcmV0dXJuIDQ0MTAwOwogfQogCitzdGF0
aWMgdm9pZCBvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFjayhHc3RFbGVtZW50KiBl
bGVtZW50LCBHc3RQYWQqIHBhZCwgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lciogZGVzdGluYXRp
b24pCit7CisgICAgZGVzdGluYXRpb24tPnBsdWdTaW5rKHBhZCk7Cit9CisKIEF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIoQXVkaW9Tb3VyY2VQcm92
aWRlciYgcHJvdmlkZXIsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAgOiBtX3Byb3ZpZGVyKHByb3Zp
ZGVyKQogICAgICwgbV9yZW5kZXJCdXMoMiwgMTI4LCB0cnVlKQogICAgICwgbV9zYW1wbGVSYXRl
KHNhbXBsZVJhdGUpCiAgICAgLCBtX2lzUGxheWluZyhmYWxzZSkKIHsKKyAgICBzdGF0aWMgYm9v
bCBnc3RJbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghZ3N0SW5pdGlhbGl6ZWQpCisgICAg
ICAgIGdzdEluaXRpYWxpemVkID0gZ3N0X2luaXRfY2hlY2soMCwgMCwgMCk7CisgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShnc3RJbml0aWFsaXplZCwgIkdTdHJlYW1lciBpbml0aWFsaXphdGlvbiBm
YWlsZWQiKTsKKworICAgIG1fcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3KCJwbGF5Iik7CisK
KyAgICBHc3RFbGVtZW50KiB3ZWJraXRBdWRpb1NyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0RWxl
bWVudCo+KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDLCAicmF0ZSIsIHN0
YXRpY19jYXN0PGdmbG9hdD4oc2FtcGxlUmF0ZSksICJidXMiLCBzdGF0aWNfY2FzdDxncG9pbnRl
cj4oJm1fcmVuZGVyQnVzKSwgInByb3ZpZGVyIiwgJm1fcHJvdmlkZXIsIE5VTEwpKTsKKworICAg
IEdzdEVsZW1lbnQqIHdhdnBhcnNlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3YXZwYXJz
ZSIsIDApOworCisgICAgbV93YXZQYXJzZXJBdmFpbGFibGUgPSB3YXZwYXJzZTsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fd2F2UGFyc2VyQXZhaWxhYmxlLCAiRmFpbGVkIHRvIGNyZWF0ZSBH
U3RyZWFtZXIgd2F2cGFyc2UgZWxlbWVudCIpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2F2cGFyc2UsICJw
YWQtYWRkZWQiLCBHX0NBTExCQUNLKG9uR1N0cmVhbWVyV2F2cGFyc2VQYWRBZGRlZENhbGxiYWNr
KSwgdGhpcyk7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUpLCB3ZWJr
aXRBdWRpb1NyYywgd2F2cGFyc2UsIE5VTEwpOworICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19m
dWxsKHdlYmtpdEF1ZGlvU3JjLCAic3JjIiwgd2F2cGFyc2UsICJzaW5rIiwgR1NUX1BBRF9MSU5L
X0NIRUNLX05PVEhJTkcpOwogfQogCiBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+QXVkaW9E
ZXN0aW5hdGlvbkdTdHJlYW1lcigpCiB7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlw
ZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fcGlwZWxpbmUp
OworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnBsdWdTaW5rKEdzdFBhZCog
cGFkKQoreworICAgIEFTU0VSVChtX3dhdlBhcnNlckF2YWlsYWJsZSk7CisKKyAgICBHc3RFbGVt
ZW50KiBhdWRpb3NpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3Npbmsi
LCAwKTsKKyAgICBtX2F1ZGlvU2lua0F2YWlsYWJsZSA9IGF1ZGlvc2luazsKKworICAgIGlmIChh
dWRpb3NpbmspIHsKKyAgICAgICAgLy8gQXV0b2F1ZGlvc2luayBkb2VzIHRoZSByZWFsIHNpbmsg
ZGV0ZWN0aW9uIGluIHRoZQorICAgICAgICAvLyBOVUxMLT5SRUFEWSB0cmFuc2l0aW9uIHNvIGl0
J3MgYmVzdCB0byByb2xsIGl0IHRvIFJFQURZIGFzCisgICAgICAgIC8vIHNvb24gYXMgcG9zc2li
bGUgdG8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtCisgICAgICAgIC8vIGF1ZGlvc2lu
ayB3YXMgbG9hZGVkIGNvcnJlY3RseS4KKyAgICAgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3Rh
dGVDaGFuZ2VSZXR1cm4gPSBnc3RfZWxlbWVudF9zZXRfc3RhdGUoYXVkaW9zaW5rLCBHU1RfU1RB
VEVfUkVBRFkpOworICAgICAgICBpZiAoc3RhdGVDaGFuZ2VSZXR1cm4gPT0gR1NUX1NUQVRFX0NI
QU5HRV9GQUlMVVJFKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoYXVkaW9z
aW5rLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgICAgICBtX2F1ZGlvU2lua0F2YWlsYWJsZSA9
IGZhbHNlOworICAgICAgICAgICAgZ3N0X29iamVjdF91bnJlZihhdWRpb3NpbmspOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RShtX2F1ZGlvU2lua0F2YWlsYWJsZSwgIkZhaWxlZCB0byBjcmVhdGUgR1N0cmVhbWVyIGF1dG9h
dWRpb3NpbmsgZWxlbWVudCIpOworICAgIGlmICghbV9hdWRpb1NpbmtBdmFpbGFibGUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdzdEVsZW1lbnQqIGF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgMCk7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShH
U1RfQklOKG1fcGlwZWxpbmUpLCBhdWRpb2NvbnZlcnQsIGF1ZGlvc2luaywgTlVMTCk7CisKKyAg
ICAvLyBMaW5rIHdhdnBhcnNlJ3Mgc3JjIHBhZCB0byBhdWRpb2NvbnZlcnQgc2luayBwYWQuCisg
ICAgR3N0UGFkKiBzaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXVkaW9jb252
ZXJ0LCAic2luayIpOworICAgIGdzdF9wYWRfbGluayhwYWQsIHNpbmtQYWQpOworICAgIGdzdF9v
YmplY3RfdW5yZWYoR1NUX09CSkVDVChzaW5rUGFkKSk7CisKKyAgICAvLyBMaW5rIGF1ZGlvY29u
dmVydCB0byBhdWRpb3NpbmsgYW5kIHJvbGwgc3RhdGVzLgorICAgIGdzdF9lbGVtZW50X2xpbmtf
cGFkc19mdWxsKGF1ZGlvY29udmVydCwgInNyYyIsIGF1ZGlvc2luaywgInNpbmsiLCBHU1RfUEFE
X0xJTktfQ0hFQ0tfTk9USElORyk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3Bh
cmVudChhdWRpb2NvbnZlcnQpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQoYXVkaW9zaW5rKTsKIH0KIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpzdGFy
dCgpCiB7CisgICAgQVNTRVJUKG1fd2F2UGFyc2VyQXZhaWxhYmxlKTsKKyAgICBpZiAoIW1fd2F2
UGFyc2VyQXZhaWxhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgIG1faXNQbGF5aW5nID0g
dHJ1ZTsKIH0KIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpzdG9wKCkKIHsKKyAg
ICBBU1NFUlQobV93YXZQYXJzZXJBdmFpbGFibGUgJiYgbV9hdWRpb1NpbmtBdmFpbGFibGUpOwor
ICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFibGUgfHwgbV9hdWRpb1NpbmtBdmFpbGFibGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBH
U1RfU1RBVEVfUEFVU0VEKTsKICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5h
dGlvbkdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAppbmRleCA3Y2YzNzk4Li41MTBkNTg2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0
aW5hdGlvbkdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmgKQEAgLTIyLDYgKzIyLDkgQEAKICNp
bmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKIAordHlw
ZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQ
YWQgR3N0UGFkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1ZGlvRGVzdGluYXRp
b25HU3RyZWFtZXIgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CkBAIC0zNiwxMiArMzksMTcg
QEAgcHVibGljOgogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBs
ZVJhdGU7IH0KICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92aWRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvdmlkZXI7IH0KIAorICAgIHZvaWQgcGx1Z1NpbmsoR3N0UGFkKik7CisK
IHByaXZhdGU6CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciYgbV9wcm92aWRlcjsKICAgICBBdWRp
b0J1cyBtX3JlbmRlckJ1czsKIAogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKICAgICBib29sIG1f
aXNQbGF5aW5nOworICAgIGJvb2wgbV93YXZQYXJzZXJBdmFpbGFibGU7CisgICAgYm9vbCBtX2F1
ZGlvU2lua0F2YWlsYWJsZTsKKyAgICBHc3RFbGVtZW50KiBtX3BpcGVsaW5lOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg3Y2QxMAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwzODYgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGlnYWxp
YS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkF1ZGlvQnVz
LmgiCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIkdPd25QdHIu
aCIKKworI2luY2x1ZGUgPGdzdC9hdWRpby9tdWx0aWNoYW5uZWwuaD4KKyNpbmNsdWRlIDxnc3Qv
cGJ1dGlscy9wYnV0aWxzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisjZGVmaW5l
IFdFQktJVF9XRUJfQVVESU9fU1JDX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNUQU5DRV9H
RVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2ViQXVk
aW9TcmNQcml2YXRlKSkKKworZW51bSB7CisgICAgUFJPUF9SQVRFID0gMSwKKyAgICBQUk9QX0JV
UyA9IDIsCisgICAgUFJPUF9QUk9WSURFUiA9IDMKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViQXVk
aW9TcmNQcml2YXRlIHsKKyAgICBnZmxvYXQgc2FtcGxlUmF0ZTsKKyAgICBBdWRpb0J1cyogYnVz
OworICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyOworCisgICAgZ3VpbnQ2NCBvZmZz
ZXQ7IC8vIGN1cnJlbnQgYnVmZmVyIG9mZnNldC4KKworICAgIEdzdEVsZW1lbnQqIGludGVybGVh
dmU7CisgICAgR3N0RWxlbWVudCogd2F2ZW5jOworCisgICAgR3N0VGFzayogdGFzazsKKyAgICBH
U3RhdGljUmVjTXV0ZXgqIG11dGV4OworCisgICAgR1NMaXN0KiBwYWRzOyAvLyBsaXN0IG9mIHF1
ZXVlIHNyYyBwYWRzLiBPbmUgcXVldWUgZm9yIGVhY2ggcGxhbmFyIGF1ZGlvIGNoYW5uZWwuCisg
ICAgR3N0UGFkKiBzcmNwYWQ7IC8vIHNyYyBwYWQgb2YgdGhlIGVsZW1lbnQsIGludGVybGVhdmVk
IHdhdiBkYXRhIGlzIHB1c2hlZCB0byBpdC4KK307CisKKworc3RhdGljIEdzdFN0YXRpY1BhZFRl
bXBsYXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInNyYyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHU1RfUEFEX1NSQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9QQURfQUxXQVlTLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NU
X1NUQVRJQ19DQVBTKCJhdWRpby94LXdhdiIpKTsKKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJ
Qyh3ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1ZworCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1Ny
Y0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjRmlu
YWxpemUoR09iamVjdCopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0
eShHT2JqZWN0KiwgZ3VpbnQsIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2
b2lkIHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50LCBHVmFsdWUq
LCBHUGFyYW1TcGVjKik7CitzdGF0aWMgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViQXVk
aW9TcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0U3RhdGVDaGFuZ2UpOworc3RhdGljIHZv
aWQgd2ViS2l0V2ViQXVkaW9TcmNMb29wKFdlYktpdFdlYkF1ZGlvU3JjKik7CisKK3N0YXRpYyBH
c3RDYXBzKiBnZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBzKGZsb2F0IHNhbXBsZVJhdGUpCit7Cisg
ICAgcmV0dXJuIGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3LWZsb2F0IiwgInJhdGUi
LCBHX1RZUEVfSU5ULCBzdGF0aWNfY2FzdDxpbnQ+KHNhbXBsZVJhdGUpLCAiY2hhbm5lbHMiLCBH
X1RZUEVfSU5ULCAxLCAiZW5kaWFubmVzcyIsIEdfVFlQRV9JTlQsIEdfQllURV9PUkRFUiwgIndp
ZHRoIiwgR19UWVBFX0lOVCwgMzIsIE5VTEwpOworfQorCitzdGF0aWMgR3N0QXVkaW9DaGFubmVs
UG9zaXRpb24gd2ViS2l0V2ViQXVkaW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24oaW50IGNoYW5u
ZWxJbmRleCkKK3sKKyAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NpdGlvbjsKKworICAg
IHN3aXRjaCAoY2hhbm5lbEluZGV4KSB7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbExlZnQ6
CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTEVG
VDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0OgorICAg
ICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJR0hUOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsQ2VudGVyOgorICAgICAg
ICAvLyBDZW50ZXIgYW5kIG1vbm8gYXJlIHRoZSBzYW1lLgorICAgICAgICBwb3NpdGlvbiA9IEdT
VF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX01PTk87CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxMRkU6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElP
X0NIQU5ORUxfUE9TSVRJT05fTEZFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVz
OjpDaGFubmVsU3Vycm91bmRMZWZ0OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFO
TkVMX1BPU0lUSU9OX1JFQVJfTEVGVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1
czo6Q2hhbm5lbFN1cnJvdW5kUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NI
QU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgYnJlYWs7CisgICAgfTsKKworICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworI2Rl
ZmluZSB3ZWJraXRfd2ViX2F1ZGlvX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNzCitHX0RF
RklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRXZWJBdWRpb1NyYywgd2Via2l0X3dlYl9hdWRpb19z
cmMsIEdTVF9UWVBFX0JJTiwgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYl9hdWRp
b19zcmNfZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0d2ViYXVk
aW9zcmMiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgXAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJ3ZWJhdWRpb3NyYyBlbGVtZW50IikpOworCitzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KFdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MqIGts
YXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2tsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3Mp
OworICAgIEdzdEVsZW1lbnRDbGFzcyogZWtsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Moa2xhc3Mp
OworCisgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShla2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0
ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2RldGFpbHNf
c2ltcGxlKGVrbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGdjaGFyKikgIldlYktpdCBXZWJBdWRpbyBzb3VyY2UgZWxlbWVudCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChnY2hhciopICJTb3VyY2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZ2NoYXIqKSAiSGFuZGxlcyBXZWJBdWRp
byBkYXRhIGZyb20gV2ViQ29yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChnY2hhciopICJQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPiIp
OworCisgICAgb2tsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYktpdFdlYkF1ZGlvU3JjQ29uc3RydWN0
ZWQ7CisgICAgb2tsYXNzLT5maW5hbGl6ZSA9IHdlYktpdFdlYkF1ZGlvU3JjRmluYWxpemU7Cisg
ICAgZWtsYXNzLT5jaGFuZ2Vfc3RhdGUgPSB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlOwor
CisgICAgb2tsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3BlcnR5
OworICAgIG9rbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0
eTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SQVRFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KCJyYXRlIiwgInJhdGUiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJT
YW1wbGUgcmF0ZSIsIEdfTUlORE9VQkxFLCBHX01BWERPVUJMRSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDEwMC4wLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChHUGFyYW1GbGFn
cykgKEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1JFQURXUklURSkpKTsKKworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9CVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3BhcmFtX3NwZWNfcG9pbnRlcigiYnVzIiwgImJ1cyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVzIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChH
UGFyYW1GbGFncykgKEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BBUkFNX1JFQURXUklURSkp
KTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9QUk9WSURFUiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJwcm92aWRlciIs
ICJwcm92aWRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiUHJvdmlkZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdQYXJhbUZsYWdzKSAoR19QQVJBTV9DT05TVFJV
Q1RfT05MWSB8IEdfUEFSQU1fUkVBRFdSSVRFKSkpOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9w
cml2YXRlKGtsYXNzLCBzaXplb2YoV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlKSk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2luaXQoV2ViS2l0V2ViQXVkaW9TcmMqIHNy
YykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCX0FV
RElPX1NSQ19HRVRfUFJJVkFURShzcmMpOworICAgIHNyYy0+cHJpdiA9IHByaXY7CisKKyAgICBH
c3RQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGUgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQo
JnNyY1RlbXBsYXRlKTsKKyAgICBwcml2LT5zcmNwYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190
YXJnZXRfZnJvbV90ZW1wbGF0ZSgic3JjIiwgcGFkVGVtcGxhdGUpOworICAgIGdzdF9lbGVtZW50
X2FkZF9wYWQoR1NUX0VMRU1FTlQoc3JjKSwgcHJpdi0+c3JjcGFkKTsKKworICAgIHByaXYtPnBy
b3ZpZGVyID0gMDsKKyAgICBwcml2LT5idXMgPSAwOworICAgIHByaXYtPm9mZnNldCA9IDA7CisK
KyAgICBwcml2LT5tdXRleCA9IGdfbmV3KEdTdGF0aWNSZWNNdXRleCwgMSk7CisgICAgZ19zdGF0
aWNfcmVjX211dGV4X2luaXQocHJpdi0+bXV0ZXgpOworCisgICAgcHJpdi0+dGFzayA9IGdzdF90
YXNrX2NyZWF0ZSgoR3N0VGFza0Z1bmN0aW9uKSB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AsIHNyYyk7
CisgICAgZ3N0X3Rhc2tfc2V0X2xvY2socHJpdi0+dGFzaywgcHJpdi0+bXV0ZXgpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0cnVjdGVkKEdPYmplY3QgKm9iamVjdCkK
K3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2Jq
ZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisK
KyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBBU1NFUlQocHJpdi0+cHJvdmlkZXIpOworICAg
IEFTU0VSVChwcml2LT5zYW1wbGVSYXRlKTsKKworICAgIHByaXYtPmludGVybGVhdmUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImludGVybGVhdmUiLCAwKTsKKyAgICBwcml2LT53YXZlbmMg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdmVuYyIsIDApOworCisgICAgaWYgKCFwcml2
LT5pbnRlcmxlYXZlKSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRv
IGNyZWF0ZSBpbnRlcmxlYXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
IXByaXYtPndhdmVuYykgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0
byBjcmVhdGUgd2F2ZW5jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBnc3Rfb2Jq
ZWN0X3JlZl9zaW5rKEdTVF9PQkpFQ1QocHJpdi0+aW50ZXJsZWF2ZSkpOworICAgIGdzdF9vYmpl
Y3RfcmVmX3NpbmsoR1NUX09CSkVDVChwcml2LT53YXZlbmMpKTsKKworICAgIGdzdF9iaW5fYWRk
X21hbnkoR1NUX0JJTihzcmMpLCBwcml2LT5pbnRlcmxlYXZlLCBwcml2LT53YXZlbmMsIE5VTEwp
OworICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHByaXYtPmludGVybGVhdmUsICJzcmMi
LCBwcml2LT53YXZlbmMsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworCisg
ICAgLy8gRm9yIGVhY2ggY2hhbm5lbCBvZiB0aGUgYnVzIGNyZWF0ZSBhIG5ldyB1cHN0cmVhbSBi
cmFuY2ggZm9yIGludGVybGVhdmUsIGxpa2U6CisgICAgLy8gcXVldWUgISBjYXBzZmlsdGVyICEg
YXVkaW9jb252ZXJ0LiB3aGljaCBpcyBwbHVnZ2VkIHRvIGEgbmV3IGludGVybGVhdmUgcmVxdWVz
dCBzcmNwYWQuCisgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5k
ZXggPCBwcml2LT5idXMtPm51bWJlck9mQ2hhbm5lbHMoKTsgY2hhbm5lbEluZGV4KyspIHsKKyAg
ICAgICAgR3N0RWxlbWVudCogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVl
IiwgMCk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImNhcHNmaWx0ZXIiLCAwKTsKKyAgICAgICAgR3N0RWxlbWVudCogYXVkaW9jb252
ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKworICAg
ICAgICBHc3RDYXBzKiBtb25vQ2FwcyA9IGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+
c2FtcGxlUmF0ZSk7CisgICAgICAgIGdfb2JqZWN0X3NldChjYXBzZmlsdGVyLCAiY2FwcyIsIG1v
bm9DYXBzLCBOVUxMKTsKKyAgICAgICAgZ3N0X2NhcHNfdW5yZWYobW9ub0NhcHMpOworCisgICAg
ICAgIC8vIENvbmZpZ3VyZSB0aGUgcXVldWUgZm9yIG1pbmltYWwgbGF0ZW5jeS4KKyAgICAgICAg
Z19vYmplY3Rfc2V0KHF1ZXVlLCAibWF4LXNpemUtYnVmZmVycyIsIHN0YXRpY19jYXN0PGd1aW50
PigxKSwgTlVMTCk7CisKKyAgICAgICAgR3N0UGFkKiBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChxdWV1ZSwgInNpbmsiKTsKKyAgICAgICAgcHJpdi0+cGFkcyA9IGdfc2xpc3RfcHJl
cGVuZChwcml2LT5wYWRzLCBwYWQpOworCisgICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
TihzcmMpLCBxdWV1ZSwgY2Fwc2ZpbHRlciwgYXVkaW9jb252ZXJ0LCBOVUxMKTsKKyAgICAgICAg
Z3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwocXVldWUsICJzcmMiLCBjYXBzZmlsdGVyLCAic2lu
ayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbGlu
a19wYWRzX2Z1bGwoY2Fwc2ZpbHRlciwgInNyYyIsIGF1ZGlvY29udmVydCwgInNpbmsiLCBHU1Rf
UEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisKKyAgICAgICAgR3N0UGFkKiBzcmNQYWQgPSBnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChhdWRpb2NvbnZlcnQsICJzcmMiKTsKKyAgICAgICAgR3N0
UGFkKiBzaW5rUGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3JlcXVlc3RfcGFkKHByaXYtPmludGVybGVh
dmUsICJzaW5rJWQiKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHNyY1BhZCwgc2lua1BhZCk7Cisg
ICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09CSkVDVChzcmNQYWQpKTsKKyAgICAgICAgZ3N0
X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHNpbmtQYWQpKTsKKyAgICB9CisgICAgcHJpdi0+cGFk
cyA9IGdfc2xpc3RfcmV2ZXJzZShwcml2LT5wYWRzKTsKKworICAgIC8vIHdhdmVuYydzIHNyYyBw
YWQgaXMgdGhlIG9ubHkgdmlzaWJsZSBwYWQgb2Ygb3VyIGVsZW1lbnQuCisgICAgR3N0UGFkKiB0
YXJnZXRQYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChwcml2LT53YXZlbmMsICJzcmMi
KTsKKyAgICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoR1NUX0dIT1NUX1BBRChwcml2LT5zcmNw
YWQpLCB0YXJnZXRQYWQpOworICAgIGdzdF9vYmplY3RfdW5yZWYodGFyZ2V0UGFkKTsKK30KKwor
c3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVj
dCk7CisgICAgV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisg
ICAgaWYgKHByaXYtPmludGVybGVhdmUpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoR1NUX09C
SkVDVChwcml2LT5pbnRlcmxlYXZlKSk7CisgICAgaWYgKHByaXYtPndhdmVuYykKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZihHU1RfT0JKRUNUKHByaXYtPndhdmVuYykpOworCisgICAgZ3N0X29i
amVjdF91bnJlZihwcml2LT50YXNrKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfZnJlZShwcml2
LT5tdXRleCk7CisKKyAgICBnX3NsaXN0X2ZyZWVfZnVsbChwcml2LT5wYWRzLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CisKKyAgICBHU1RfQ0FM
TF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1MsIGZpbmFsaXplLCAoKEdPYmplY3QqICkoc3JjKSkpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3BlcnR5KEdPYmplY3QqIG9i
amVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3Bl
YykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMo
b2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7
CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9SQVRFOgorICAgICAgICBw
cml2LT5zYW1wbGVSYXRlID0gZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQlVTOgorICAgICAgICBwcml2LT5idXMgPSByZWludGVycHJldF9j
YXN0PEF1ZGlvQnVzKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUFJPVklERVI6CisgICAgICAgIHByaXYtPnByb3ZpZGVyID0gcmVp
bnRlcnByZXRfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9X
QVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0dldFByb3Bl
cnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1T
cGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9B
VURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9SQVRFOgor
ICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+c2FtcGxlUmF0ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CVVM6CisgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50
ZXIodmFsdWUsIHByaXYtPmJ1cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9W
SURFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgcHJpdi0+cHJvdmlkZXIp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2Vi
QXVkaW9TcmMqIHNyYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyY1ByaXZhdGUqIHByaXYgPSBz
cmMtPnByaXY7CisKKyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBBU1NFUlQocHJpdi0+cHJv
dmlkZXIpOworICAgIGlmICghcHJpdi0+cHJvdmlkZXIgfHwgIXByaXYtPmJ1cykKKyAgICAgICAg
cmV0dXJuOworCisgICAgc2l6ZV90IHJlcXVlc3RlZEZyYW1lcyA9IDEyODsKKyAgICBndWludCBi
dWZmZXJTaXplID0gcmVxdWVzdGVkRnJhbWVzICogc2l6ZW9mKGZsb2F0KTsKKyAgICBwcml2LT5w
cm92aWRlci0+cHJvdmlkZUlucHV0KHByaXYtPmJ1cywgcmVxdWVzdGVkRnJhbWVzKTsKKworICAg
IGZvciAoZ3VpbnQgaW5kZXggPSAwOyBpbmRleCA8IGdfc2xpc3RfbGVuZ3RoKHByaXYtPnBhZHMp
OyBpbmRleCsrKSB7CisgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4o
Z19zbGlzdF9udGhfZGF0YShwcml2LT5wYWRzLCBpbmRleCkpOworCisgICAgICAgIEdzdEJ1ZmZl
ciogYnVmZmVyID0gZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyAg
ICAgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgICAgIG1lbWNweShHU1RfQlVGRkVSX0RBVEEoYnVm
ZmVyKSwgcHJpdi0+YnVzLT5jaGFubmVsKGluZGV4KS0+ZGF0YSgpLCBidWZmZXJTaXplKTsKKyAg
ICAgICAgR1NUX0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9IHByaXYtPm9mZnNldDsKKyAgICAgICAg
R1NUX0JVRkZFUl9PRkZTRVRfRU5EKGJ1ZmZlcikgPSBwcml2LT5vZmZzZXQgKyByZXF1ZXN0ZWRG
cmFtZXM7CisKKyAgICAgICAgR3N0Q2FwcyogbW9ub0NhcHMgPSBnZXRHU3RyZWFtZXJNb25vQXVk
aW9DYXBzKHByaXYtPnNhbXBsZVJhdGUpOworICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobW9ub0NhcHMsIDApOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsIDEsIE5VTEwpOwor
ICAgICAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBjaGFubmVsUG9zaXRpb24gPSB3ZWJLaXRX
ZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihpbmRleCk7CisgICAgICAgIGdzdF9hdWRp
b19zZXRfY2hhbm5lbF9wb3NpdGlvbnMoc3RydWN0dXJlLCAmY2hhbm5lbFBvc2l0aW9uKTsKKyAg
ICAgICAgZ3N0X2J1ZmZlcl9zZXRfY2FwcyhidWZmZXIsIG1vbm9DYXBzKTsKKyAgICAgICAgZ3N0
X2NhcHNfdW5yZWYobW9ub0NhcHMpOworCisgICAgICAgIGdzdF9wYWRfY2hhaW4ocGFkLCBidWZm
ZXIpOworICAgIH0KKworICAgIHByaXYtPm9mZnNldCArPSByZXF1ZXN0ZWRGcmFtZXM7Cit9CisK
K3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRl
KEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgICAg
R3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0ID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOworICAg
IFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhlbGVtZW50KTsK
KworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9O
VUxMX1RPX1JFQURZOgorICAgICAgICBpZiAoIXNyYy0+cHJpdi0+aW50ZXJsZWF2ZSkgeworICAg
ICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdlX25ldyhl
bGVtZW50LCAiaW50ZXJsZWF2ZSIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNy
YywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBpbnRlcmxlYXZlIikpOworICAgICAg
ICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXNyYy0+cHJpdi0+d2F2ZW5jKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0
X21lc3NhZ2UoZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
c3RfbWlzc2luZ19lbGVtZW50X21lc3NhZ2VfbmV3KGVsZW1lbnQsICJ3YXZlbmMiKSk7CisgICAg
ICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihzcmMsIENPUkUsIE1JU1NJTkdfUExVR0lOLCAoMCks
ICgibm8gd2F2ZW5jIikpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJ
TFVSRTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXQgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3Mp
LT5jaGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CisgICAgaWYgKEdfVU5MSUtFTFko
cmV0ID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChzcmMsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7CisgICAgICAgIHJldHVybiByZXQ7Cisg
ICAgfQorCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hB
TkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFE
WS0+UEFVU0VEIik7CisgICAgICAgIGlmICghZ3N0X3Rhc2tfc3RhcnQoc3JjLT5wcml2LT50YXNr
KSkKKyAgICAgICAgICAgIHJldCA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIGlmICgh
Z3N0X3Rhc2tfam9pbihzcmMtPnByaXYtPnRhc2spKQorICAgICAgICAgICAgcmV0ID0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlv
U291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhm
OTVhYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFBoaWxpcHBlIE5vcm1hbmQgPHBub3JtYW5kQGln
YWxpYS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0V2ViQXVkaW9Tb3VyY2VH
U3RyZWFtZXJfaAorI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisK
K0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDICAgICAg
ICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2dldF90eXBlICgpKQorI2RlZmluZSBXRUJLSVRf
V0VCX0FVRElPX1NSQyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNU
ICgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2ViQXVkaW9TcmMpKQor
I2RlZmluZSBXRUJLSVRfV0VCX0FVRElPX1NSQ19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDLCBXZWJLaXRX
ZWJBdWRpb1NyY0NsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9BVURJT19TUkMob2JqKSAg
ICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSAoKG9iaiksIFdFQktJVF9UWVBFX1dF
Ql9BVURJT19TUkMpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX0FVRElPX1NSQ19DTEFTUyhrbGFz
cykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFICgoa2xhc3MpLCBXRUJLSVRfVFlQRV9XRUJfQVVE
SU9fU1JDKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU3JjICAgICAgICBXZWJL
aXRXZWJBdWRpb1NyYzsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyY0NsYXNzICAg
V2ViS2l0V2ViQXVkaW9TcmNDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRpb1Ny
Y1ByaXZhdGUgV2ViS2l0V2ViQXVkaW9TcmNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFdlYkF1
ZGlvU3JjIHsKKyAgICBHc3RCaW4gcGFyZW50OworCisgICAgV2ViS2l0V2ViQXVkaW9TcmNQcml2
YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyY0NsYXNzIHsKKyAgICBH
c3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKK307CisKK0dUeXBlIHdlYmtpdF93ZWJfYXVkaW9fc3Jj
X2dldF90eXBlKHZvaWQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
UikKKyNlbmRpZgotLSAKMS43LjcuMQ==
</data>
<flag name="review"
          id="112571"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114487</attachid>
            <date>2011-11-10 06:38:06 -0800</date>
            <delta_ts>2011-11-11 03:05:09 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>27794</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA1OThmYTM0MDQ0MzUzZGRkNWJmMTVmNWE1ZGJmM2JiZTc2NDY3MTM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1
MSArKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAg
IHwgICAgMiArCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
Y3BwICB8ICAgODEgKysrKwogLi4uL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyLmggICAgfCAgICA4ICsKIC4uLi9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuY3BwICAgIHwgIDM5OSArKysrKysrKysrKysrKysrKysrKwogLi4uL2dzdHJlYW1l
ci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oICAgICAgfCAgIDMzICsrCiA2IGZpbGVz
IGNoYW5nZWQsIDU3NCBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA4NzVkODcyLi5lMjgzNmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
NTQgQEAKKzIwMTEtMTAtMjcgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHU3RyZWFtZXJdIFdlYkF1ZGlvIEF1ZGlvRGVzdGluYXRpb24KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5ODM1CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IEdTdHJlYW1lciBz
b3VyY2UgZWxlbWVudCBwdWxsaW5nIGRhdGEgZnJvbSB0aGUgQXVkaW9CdXMgYW5kCisgICAgICAg
IG91dHB1dGluZyBhdWRpbyBpbnRlcmxlYXZlZCBHc3RCdWZmZXJzIHN1aXRhYmxlIGZvciBwbGF5
YmFjay4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IEFkZGVkIHRoZSBuZXcgR1N0
cmVhbWVyIFdlYkF1ZGlvIGVsZW1lbnQKKyAgICAgICAgc291cmNlIGZpbGVzIHRvIHRoZSBidWls
ZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRk
ZWRDYWxsYmFjayk6IEZ1bmN0aW9uIGNhbGxlZAorICAgICAgICB3aGVuIHRoZSBwbGF5YmFjayBw
aXBlbGluZSBzdWNjZXNzZnVsbHkgcGFyc2VkIHRoZSBhdWRpbyBzb3VyY2UKKyAgICAgICAgaW50
byBhIFdBViBzdHJlYW0uCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVh
bWVyOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgQ29uZmlndXJlIHRoZSBp
bml0aWFsIHBsYXliYWNrIHBpcGVsaW5lIHVwIHRvIHRoZSBXQVYgcGFyc2VyLiBUaGUKKyAgICAg
ICAgYXVkaW8gc2luayBpcyBhZGRlZCBvbmx5IGFmdGVyIHRoZSBXQVYgcGFyc2VyIHdhcyBjb25m
aWd1cmVkLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6fkF1
ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIpOgorICAgICAgICBSZXNldCB0aGUgcGxheWJhY2sgcGlw
ZWxpbmUgYW5kIGRlbGV0ZSBpdC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXI6OnBsdWdTaW5rKTogTWV0aG9kIHRvIGFkZCB0aGUKKyAgICAgICAgYXVkaW8gc2lu
ayB0byB0aGUgcGlwZWxpbmUgYW5kIGxpbmsgaXQgdG8gdGhlIFdBViBwYXJzZXIuCisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpzdGFydCk6IFNldCBwaXBlbGlu
ZSB0bworICAgICAgICBQTEFZSU5HLCBhdCB0aGUgZmlyc3QgcnVuIGl0IHdpbGwgdHJpZ2dlciB0
aGUgV0FWIHBhcnNlciBhbmQgaGVuY2UKKyAgICAgICAgdGhlIGF1ZGlvLXNpbmsgcGx1Z2dpbmcu
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpzdG9wKTogUGF1
c2UgdGhlIHBpcGVsaW5lLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRp
b0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChn
ZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBzKTogVXRpbGl0eSBmdW5jdGlvbiB0byBnZW5lcmF0ZQor
ICAgICAgICBHU3RyZWFtZXIgY2FwcyByZXByZXNlbnRpbmcgYSBzaW5nbGUgYXVkaW8gY2hhbm5l
bCBmb3IgYSBnaXZlbgorICAgICAgICBzYW1wbGUgcmF0ZS4KKyAgICAgICAgKHdlYktpdFdlYkF1
ZGlvR1N0cmVhbWVyQ2hhbm5lbFBvc2l0aW9uKTogVXRpbGl0eSBmdW5jdGlvbiB0bworICAgICAg
ICBjb252ZXJ0IEF1ZGlvQnVzIGNoYW5uZWwgcmVwcmVzZW50YXRpb25zIHRvIEdTdHJlYW1lciBw
b3NpdGlvbmFsCisgICAgICAgIGF1ZGlvIGNoYW5uZWwgdmFsdWVzLgorICAgICAgICAod2Via2l0
X3dlYl9hdWRpb19zcmNfY2xhc3NfaW5pdCk6IEdPYmplY3QgY29uZmlndXJhdGlvbiBvZiB0aGUK
KyAgICAgICAgR1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50LgorICAgICAgICAod2Via2l0X3dlYl9h
dWRpb19zcmNfaW5pdCk6IEluaXRpYWxpemF0aW9uIG9mIHRoZSBwcml2YXRlIGRhdGEgb2YKKyAg
ICAgICAgdGhlIGVsZW1lbnQuCisgICAgICAgICh3ZWJLaXRXZWJBdWRpb1NvdXJjZUNvbnN0cnVj
dGVkKTogQ29uZmlndXJlIHRoZSBHc3RCaW4gZWxlbWVudHMKKyAgICAgICAgZGVwZW5kaW5nIG9u
IHRoZSBBdWRpb0J1cyBsYXlvdXQuCisgICAgICAgICh3ZWJLaXRXZWJBdWRpb1NvdXJjZUZpbmFs
aXplKTogQ2xlYW4gdXAgdGhlIEdzdEJpbiBhbmQgZnJlZSBwcml2YXRlCisgICAgICAgIGRhdGEg
b2YgdGhlIGVsZW1lbnQuCisgICAgICAgICh3ZWJLaXRXZWJBdWRpb1NvdXJjZVNldFByb3BlcnR5
KTogR09iamVjdCBwcm9wZXJ0eSBzZXR0ZXIuCisgICAgICAgICh3ZWJLaXRXZWJBdWRpb1NvdXJj
ZUdldFByb3BlcnR5KTogR09iamVjdCBwcm9wZXJ0eSBnZXR0ZXIuCisgICAgICAgICh3ZWJLaXRX
ZWJBdWRpb1NvdXJjZUxvb3ApOiBHc3RUYXNrIHVzZWQgdG8gcHVsbCBkYXRhIGZyb20gdGhlCisg
ICAgICAgIEF1ZGlvQnVzIGFuZCBwdXNoIGl0IGFzIEdzdEJ1ZmZlcnMgdG8gdGhlIHNyYyBwYWQg
b2YgdGhlIGVsZW1lbnQuCisgICAgICAgICh3ZWJLaXRXZWJBdWRpb1NvdXJjZUNoYW5nZVN0YXRl
KTogU3RhcnQgb3Igc3RvcCB0aGUgYWJvdmUgR3N0VGFzaworICAgICAgICBkZXBlbmRpbmcgb24g
dGhlIGFza2VkIHN0YXRlIHRyYW5zaXRpb24uCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorCiAyMDExLTEx
LTEwICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVt
XSBTY3JvbGwgZGVsdGFzIGFyZSBjbGVhcmVkIGR1cmluZyBjb21taXQgdG8gdGhlIG1haW4gdGhy
ZWFkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiZjM0Y2M5Li4yZDZjZDBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ3OTYsNiArNDc5Niw4IEBAIHdlYmNv
cmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVhbWVy
LmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdl
YkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggXAogCVNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAKIHdlYmNvcmVfYnVpbHRf
c291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0F1ZGlvQnVmZmVyLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVk
aW9EZXN0aW5hdGlvbkdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5jcHAKaW5kZXggOTQzZDg0YS4u
NmVkMGIxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcApAQCAt
MjUsOSArMjUsMTUgQEAKICNpbmNsdWRlICJBdWRpb0NoYW5uZWwuaCIKICNpbmNsdWRlICJBdWRp
b1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkdSZWZQ
dHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5o
IgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgdW5zaWduZWQgZnJhbWVzVG9QdWxsID0g
MTI4OworCiBQYXNzT3duUHRyPEF1ZGlvRGVzdGluYXRpb24+IEF1ZGlvRGVzdGluYXRpb246OmNy
ZWF0ZShBdWRpb1NvdXJjZVByb3ZpZGVyJiBwcm92aWRlciwgZmxvYXQgc2FtcGxlUmF0ZSkKIHsK
ICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIocHJvdmlk
ZXIsIHNhbXBsZVJhdGUpKTsKQEAgLTM4LDI1ICs0NCwxMDAgQEAgZmxvYXQgQXVkaW9EZXN0aW5h
dGlvbjo6aGFyZHdhcmVTYW1wbGVSYXRlKCkKICAgICByZXR1cm4gNDQxMDA7CiB9CiAKK3N0YXRp
YyB2b2lkIG9uR1N0cmVhbWVyV2F2cGFyc2VQYWRBZGRlZENhbGxiYWNrKEdzdEVsZW1lbnQqIGVs
ZW1lbnQsIEdzdFBhZCogcGFkLCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKiBkZXN0aW5hdGlv
bikKK3sKKyAgICBkZXN0aW5hdGlvbi0+cGx1Z1NpbmsocGFkKTsKK30KKwogQXVkaW9EZXN0aW5h
dGlvbkdTdHJlYW1lcjo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcihBdWRpb1NvdXJjZVByb3Zp
ZGVyJiBwcm92aWRlciwgZmxvYXQgc2FtcGxlUmF0ZSkKICAgICA6IG1fcHJvdmlkZXIocHJvdmlk
ZXIpCiAgICAgLCBtX3JlbmRlckJ1cygyLCAxMjgsIHRydWUpCiAgICAgLCBtX3NhbXBsZVJhdGUo
c2FtcGxlUmF0ZSkKICAgICAsIG1faXNQbGF5aW5nKGZhbHNlKQogeworICAgIHN0YXRpYyBib29s
IGdzdEluaXRpYWxpemVkID0gZmFsc2U7CisgICAgaWYgKCFnc3RJbml0aWFsaXplZCkKKyAgICAg
ICAgZ3N0SW5pdGlhbGl6ZWQgPSBnc3RfaW5pdF9jaGVjaygwLCAwLCAwKTsKKyAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGdzdEluaXRpYWxpemVkLCAiR1N0cmVhbWVyIGluaXRpYWxpemF0aW9uIGZh
aWxlZCIpOworCisgICAgbV9waXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcoInBsYXkiKTsKKwor
ICAgIEdzdEVsZW1lbnQqIHdlYmtpdEF1ZGlvU3JjID0gcmVpbnRlcnByZXRfY2FzdDxHc3RFbGVt
ZW50Kj4oZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQl9BVURJT19TUkMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJhdGUiLCBzYW1wbGVSYXRlLCAiYnVzIiwgJm1fcmVuZGVyQnVzLCAicHJvdmlk
ZXIiLCAmbV9wcm92aWRlciwgImZyYW1lcyIsIGZyYW1lc1RvUHVsbCwgTlVMTCkpOworCisgICAg
R3N0RWxlbWVudCogd2F2UGFyc2VyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3YXZwYXJz
ZSIsIDApOworCisgICAgbV93YXZQYXJzZXJBdmFpbGFibGUgPSB3YXZQYXJzZXI7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShtX3dhdlBhcnNlckF2YWlsYWJsZSwgIkZhaWxlZCB0byBjcmVhdGUg
R1N0cmVhbWVyIHdhdnBhcnNlIGVsZW1lbnQiKTsKKyAgICBpZiAoIW1fd2F2UGFyc2VyQXZhaWxh
YmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHdhdlBhcnNlciwg
InBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0sob25HU3RyZWFtZXJXYXZwYXJzZVBhZEFkZGVkQ2FsbGJh
Y2spLCB0aGlzKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIHdl
YmtpdEF1ZGlvU3JjLCB3YXZQYXJzZXIsIE5VTEwpOworICAgIGdzdF9lbGVtZW50X2xpbmtfcGFk
c19mdWxsKHdlYmtpdEF1ZGlvU3JjLCAic3JjIiwgd2F2UGFyc2VyLCAic2luayIsIEdTVF9QQURf
TElOS19DSEVDS19OT1RISU5HKTsKIH0KIAogQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6fkF1
ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIoKQogeworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BpcGVsaW5lLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X29iamVjdF91bnJlZihtX3BpcGVs
aW5lKTsKK30KKwordm9pZCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpwbHVnU2luayhHc3RQ
YWQqIHBhZCkKK3sKKyAgICBBU1NFUlQobV93YXZQYXJzZXJBdmFpbGFibGUpOworCisgICAgR3N0
RWxlbWVudCogYXVkaW9zaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdXRvYXVkaW9z
aW5rIiwgMCk7CisgICAgbV9hdWRpb1NpbmtBdmFpbGFibGUgPSBhdWRpb3Npbms7CisKKyAgICBp
ZiAoYXVkaW9zaW5rKSB7CisgICAgICAgIC8vIEF1dG9hdWRpb3NpbmsgZG9lcyB0aGUgcmVhbCBz
aW5rIGRldGVjdGlvbiBpbiB0aGUKKyAgICAgICAgLy8gR1NUX1NUQVRFX05VTEwtPlJFQURZIHRy
YW5zaXRpb24gc28gaXQncyBiZXN0IHRvIHJvbGwgaXQgdG8gUkVBRFkgYXMKKyAgICAgICAgLy8g
c29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0KKyAgICAg
ICAgLy8gYXVkaW9zaW5rIHdhcyBsb2FkZWQgY29ycmVjdGx5LgorICAgICAgICBHc3RTdGF0ZUNo
YW5nZVJldHVybiBzdGF0ZUNoYW5nZVJldHVybiA9IGdzdF9lbGVtZW50X3NldF9zdGF0ZShhdWRp
b3NpbmssIEdTVF9TVEFURV9SRUFEWSk7CisgICAgICAgIGlmIChzdGF0ZUNoYW5nZVJldHVybiA9
PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3Nl
dF9zdGF0ZShhdWRpb3NpbmssIEdTVF9TVEFURV9OVUxMKTsKKyAgICAgICAgICAgIG1fYXVkaW9T
aW5rQXZhaWxhYmxlID0gZmFsc2U7CisgICAgICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKGF1ZGlv
c2luayk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fYXVkaW9TaW5rQXZhaWxhYmxlLCAiRmFpbGVkIHRvIGNyZWF0ZSBH
U3RyZWFtZXIgYXV0b2F1ZGlvc2luayBlbGVtZW50Iik7CisgICAgaWYgKCFtX2F1ZGlvU2lua0F2
YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0RWxlbWVudCogYXVkaW9jb252ZXJ0
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKyAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU4obV9waXBlbGluZSksIGF1ZGlvY29udmVydCwgYXVkaW9zaW5r
LCBOVUxMKTsKKworICAgIC8vIExpbmsgd2F2cGFyc2UncyBzcmMgcGFkIHRvIGF1ZGlvY29udmVy
dCBzaW5rIHBhZC4KKyAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1BhZChnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChhdWRpb2NvbnZlcnQsICJzaW5rIikpOworICAgIGdzdF9wYWRfbGluayhwYWQs
IHNpbmtQYWQuZ2V0KCkpOworCisgICAgLy8gTGluayBhdWRpb2NvbnZlcnQgdG8gYXVkaW9zaW5r
IGFuZCByb2xsIHN0YXRlcy4KKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChhdWRpb2Nv
bnZlcnQsICJzcmMiLCBhdWRpb3NpbmssICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJ
TkcpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoYXVkaW9jb252ZXJ0
KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGF1ZGlvc2luayk7CiB9
CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6c3RhcnQoKQogeworICAgIEFTU0VS
VChtX3dhdlBhcnNlckF2YWlsYWJsZSk7CisgICAgaWYgKCFtX3dhdlBhcnNlckF2YWlsYWJsZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUs
IEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICBtX2lzUGxheWluZyA9IHRydWU7CiB9CiAKIHZvaWQg
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6c3RvcCgpCiB7CisgICAgQVNTRVJUKG1fd2F2UGFy
c2VyQXZhaWxhYmxlICYmIG1fYXVkaW9TaW5rQXZhaWxhYmxlKTsKKyAgICBpZiAoIW1fd2F2UGFy
c2VyQXZhaWxhYmxlIHx8IG1fYXVkaW9TaW5rQXZhaWxhYmxlKQorICAgICAgICByZXR1cm47CisK
KyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX1BBVVNFRCk7
CiAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9u
R1N0cmVhbWVyLmgKaW5kZXggN2NmMzc5OC4uNTEwZDU4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0
aW5hdGlvbkdTdHJlYW1lci5oCkBAIC0yMiw2ICsyMiw5IEBACiAjaW5jbHVkZSAiQXVkaW9CdXMu
aCIKICNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgiCiAKK3R5cGVkZWYgc3RydWN0IF9Hc3RF
bGVtZW50IEdzdEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGFkIEdzdFBhZDsKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyIDogcHVi
bGljIEF1ZGlvRGVzdGluYXRpb24gewpAQCAtMzYsMTIgKzM5LDE3IEBAIHB1YmxpYzoKICAgICBm
bG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRlOyB9CiAgICAgQXVk
aW9Tb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIoKSBjb25zdCB7IHJldHVybiBtX3Byb3Zp
ZGVyOyB9CiAKKyAgICB2b2lkIHBsdWdTaW5rKEdzdFBhZCopOworCiBwcml2YXRlOgogICAgIEF1
ZGlvU291cmNlUHJvdmlkZXImIG1fcHJvdmlkZXI7CiAgICAgQXVkaW9CdXMgbV9yZW5kZXJCdXM7
CiAKICAgICBmbG9hdCBtX3NhbXBsZVJhdGU7CiAgICAgYm9vbCBtX2lzUGxheWluZzsKKyAgICBi
b29sIG1fd2F2UGFyc2VyQXZhaWxhYmxlOworICAgIGJvb2wgbV9hdWRpb1NpbmtBdmFpbGFibGU7
CisgICAgR3N0RWxlbWVudCogbV9waXBlbGluZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9X
ZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZmIxMGUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9T
b3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxMSBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
V2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8p
ICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1
ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9hdWRpby9tdWx0aWNoYW5uZWwuaD4KKyNp
bmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQXVkaW9TcmNDbGFzcyAgIFdlYktpdFdlYkF1
ZGlvU3JjQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRl
IFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJBdWRpb1Ny
YyB7CisgICAgR3N0QmluIHBhcmVudDsKKworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0
ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViQXVkaW9TcmNDbGFzcyB7CisgICAgR3N0
QmluQ2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU291cmNl
UHJpdmF0ZSB7CisgICAgZ2Zsb2F0IHNhbXBsZVJhdGU7CisgICAgQXVkaW9CdXMqIGJ1czsKKyAg
ICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlcjsKKyAgICBndWludCBmcmFtZXNUb1B1bGw7
CisgICAgZ3VpbnQ2NCBjdXJyZW50QnVmZmVyT2Zmc2V0OworCisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBpbnRlcmxlYXZlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gd2F2RW5jb2RlcjsKKwor
ICAgIEdzdFRhc2sqIHRhc2s7CisgICAgR1N0YXRpY1JlY011dGV4KiBtdXRleDsKKworICAgIEdT
TGlzdCogcGFkczsgLy8gTGlzdCBvZiBxdWV1ZSBzcmMgcGFkcy4gT25lIHF1ZXVlIGZvciBlYWNo
IHBsYW5hciBhdWRpbyBjaGFubmVsLgorICAgIEdzdFBhZCogc291cmNlUGFkOyAvLyBzcmMgcGFk
IG9mIHRoZSBlbGVtZW50LCBpbnRlcmxlYXZlZCB3YXYgZGF0YSBpcyBwdXNoZWQgdG8gaXQuCit9
OworCitlbnVtIHsKKyAgICBQUk9QX1JBVEUgPSAxLAorICAgIFBST1BfQlVTID0gMiwKKyAgICBQ
Uk9QX1BST1ZJREVSID0gMywKKyAgICBQUk9QX0ZSQU1FUyA9IDQKK307CisKK3N0YXRpYyBHc3RT
dGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJz
cmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1NUX1BBRF9TUkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfUEFEX0FMV0FZUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC13YXYiKSk7CisKK0dTVF9ERUJVR19DQVRF
R09SWV9TVEFUSUMod2Via2l0X3dlYl9hdWRpb19zcmNfZGVidWcpOworI2RlZmluZSBHU1RfQ0FU
X0RFRkFVTFQgd2Via2l0X3dlYl9hdWRpb19zcmNfZGVidWcKKworc3RhdGljIHZvaWQgd2ViS2l0
V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZChHT2JqZWN0Kik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJB
dWRpb1NyY0ZpbmFsaXplKEdPYmplY3QqKTsKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3Jj
U2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSosIEdQ
YXJhbVNwZWMqKTsKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHkoR09i
amVjdCosIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyBH
c3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1l
bnQqLCBHc3RTdGF0ZUNoYW5nZSk7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3Ao
V2ViS2l0V2ViQXVkaW9TcmMqKTsKKworc3RhdGljIEdzdENhcHMqIGdldEdTdHJlYW1lck1vbm9B
dWRpb0NhcHMoZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICByZXR1cm4gZ3N0X2NhcHNfbmV3X3Np
bXBsZSgiYXVkaW8veC1yYXctZmxvYXQiLCAicmF0ZSIsIEdfVFlQRV9JTlQsIHN0YXRpY19jYXN0
PGludD4oc2FtcGxlUmF0ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYW5u
ZWxzIiwgR19UWVBFX0lOVCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5k
aWFubmVzcyIsIEdfVFlQRV9JTlQsIEdfQllURV9PUkRFUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAzMiwgTlVMTCk7Cit9CisKK3N0YXRpYyBH
c3RBdWRpb0NoYW5uZWxQb3NpdGlvbiB3ZWJLaXRXZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQb3Np
dGlvbihpbnQgY2hhbm5lbEluZGV4KQoreworICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBv
c2l0aW9uOworCisgICAgc3dpdGNoIChjaGFubmVsSW5kZXgpIHsKKyAgICBjYXNlIEF1ZGlvQnVz
OjpDaGFubmVsTGVmdDoKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJ
VElPTl9GUk9OVF9MRUZUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFu
bmVsUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05f
RlJPTlRfUklHSFQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxD
ZW50ZXI6CisgICAgICAgIC8vIENlbnRlciBhbmQgbW9ubyBhcmUgdGhlIHNhbWUuCisgICAgICAg
IHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfTU9OTzsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbExGRToKKyAgICAgICAgcG9zaXRp
b24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkU7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxTdXJyb3VuZExlZnQ6CisgICAgICAgIHBvc2l0aW9uID0g
R1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZUOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsU3Vycm91bmRSaWdodDoKKyAgICAgICAgcG9zaXRpb24g
PSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJR0hUOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9OworCisgICAgcmV0dXJuIHBvc2l0
aW9uOworfQorCisjZGVmaW5lIHdlYmtpdF93ZWJfYXVkaW9fc3JjX3BhcmVudF9jbGFzcyBwYXJl
bnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdlYktpdFdlYkF1ZGlvU3JjLCB3ZWJr
aXRfd2ViX2F1ZGlvX3NyYywgR1NUX1RZUEVfQklOLCBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3
ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1ZywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJ3ZWJraXR3ZWJhdWRpb3NyYyIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmF1ZGlvc3JjIGVsZW1lbnQiKSk7CisK
K3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2NsYXNzX2luaXQoV2ViS2l0V2ViQXVk
aW9TcmNDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBva2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhrbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBla2xhc3MgPSBHU1RfRUxFTUVO
VF9DTEFTUyhrbGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRl
KGVrbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOworICAg
IGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZShla2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJLaXQgV2ViQXVkaW8gc291cmNlIGVs
ZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU291cmNl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhhbmRsZXMgV2Vi
QXVkaW8gZGF0YSBmcm9tIFdlYkNvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4iKTsKKwor
ICAgIG9rbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0cnVjdGVkOwor
ICAgIG9rbGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRXZWJBdWRpb1NyY0ZpbmFsaXplOworICAgIGVr
bGFzcy0+Y2hhbmdlX3N0YXRlID0gd2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZTsKKworICAg
IG9rbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2ViS2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0eTsKKyAg
ICBva2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHk7CisK
KyAgICBHUGFyYW1GbGFncyBmbGFncyA9IHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFN
X0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9SRUFEV1JJVEUpOworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkob2tsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9SQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2Zsb2F0KCJyYXRlIiwgInJhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGUgcmF0ZSIsIEdfTUlORE9VQkxF
LCBHX01BWERPVUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA0NDEwMC4wLCBmbGFncykpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShva2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0JVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19wb2ludGVyKCJidXMiLCAiYnVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdXMiLCBmbGFncykpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShva2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1BST1ZJREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3BvaW50ZXIoInByb3ZpZGVyIiwgInByb3ZpZGVyIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQ
cm92aWRlciIsIGZsYWdzKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9rbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfRlJBTUVT
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQo
ImZyYW1lcyIsICJmcmFtZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIk51bWJlciBvZiBhdWRpbyBmcmFtZXMgdG8gcHVsbCBhdCBlYWNo
IGl0ZXJhdGlvbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBHX01BWFVJTlQ4LCAxMjgsIGZsYWdzKSk7CisKKyAgICBnX3R5cGVfY2xh
c3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihXZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUp
KTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9hdWRpb19zcmNfaW5pdChXZWJLaXRXZWJB
dWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdiA9
IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzcmMsIFdFQktJVF9UWVBFX1dFQl9BVURJT19T
UkMsIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSk7CisgICAgc3JjLT5wcml2ID0gcHJpdjsK
KyAgICBuZXcgKHByaXYpIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSgpOworCisgICAgR3N0
UGFkVGVtcGxhdGUqIHBhZFRlbXBsYXRlID0gZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZz
cmNUZW1wbGF0ZSk7CisgICAgcHJpdi0+c291cmNlUGFkID0gZ3N0X2dob3N0X3BhZF9uZXdfbm9f
dGFyZ2V0X2Zyb21fdGVtcGxhdGUoInNyYyIsIHBhZFRlbXBsYXRlKTsKKyAgICBnc3RfZWxlbWVu
dF9hZGRfcGFkKEdTVF9FTEVNRU5UKHNyYyksIHByaXYtPnNvdXJjZVBhZCk7CisKKyAgICBwcml2
LT5wcm92aWRlciA9IDA7CisgICAgcHJpdi0+YnVzID0gMDsKKyAgICBwcml2LT5jdXJyZW50QnVm
ZmVyT2Zmc2V0ID0gMDsKKworICAgIHByaXYtPm11dGV4ID0gZ19uZXcoR1N0YXRpY1JlY011dGV4
LCAxKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdChwcml2LT5tdXRleCk7CisKKyAgICBw
cml2LT50YXNrID0gZ3N0X3Rhc2tfY3JlYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8R3N0VGFza0Z1bmN0
aW9uPih3ZWJLaXRXZWJBdWRpb1NyY0xvb3ApLCBzcmMpOworICAgIGdzdF90YXNrX3NldF9sb2Nr
KHByaXYtPnRhc2ssIHByaXYtPm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVk
aW9TcmNDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViQXVkaW9T
cmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVjdCk7CisgICAgV2ViS2l0V2ViQXVk
aW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgQVNTRVJUKHByaXYtPmJ1
cyk7CisgICAgQVNTRVJUKHByaXYtPnByb3ZpZGVyKTsKKyAgICBBU1NFUlQocHJpdi0+c2FtcGxl
UmF0ZSk7CisKKyAgICBwcml2LT5pbnRlcmxlYXZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJpbnRlcmxlYXZlIiwgMCk7CisgICAgcHJpdi0+d2F2RW5jb2RlciA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgid2F2ZW5jIiwgMCk7CisKKyAgICBpZiAoIXByaXYtPmludGVybGVhdmUpIHsK
KyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJGYWlsZWQgdG8gY3JlYXRlIGludGVybGVh
dmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcHJpdi0+d2F2RW5jb2Rl
cikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBjcmVhdGUgd2F2
ZW5jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBnc3Rfb2JqZWN0X3JlZl9z
aW5rKEdTVF9PQkpFQ1QocHJpdi0+aW50ZXJsZWF2ZSkpOworICAgIC8vIGdzdF9vYmplY3RfcmVm
X3NpbmsoR1NUX09CSkVDVChwcml2LT53YXZFbmNvZGVyKSk7CisKKyAgICBnc3RfYmluX2FkZF9t
YW55KEdTVF9CSU4oc3JjKSwgcHJpdi0+aW50ZXJsZWF2ZS5nZXQoKSwgcHJpdi0+d2F2RW5jb2Rl
ci5nZXQoKSwgTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwocHJpdi0+aW50
ZXJsZWF2ZS5nZXQoKSwgInNyYyIsIHByaXYtPndhdkVuY29kZXIuZ2V0KCksICJzaW5rIiwgR1NU
X1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworCisgICAgLy8gRm9yIGVhY2ggY2hhbm5lbCBvZiB0
aGUgYnVzIGNyZWF0ZSBhIG5ldyB1cHN0cmVhbSBicmFuY2ggZm9yIGludGVybGVhdmUsIGxpa2U6
CisgICAgLy8gcXVldWUgISBjYXBzZmlsdGVyICEgYXVkaW9jb252ZXJ0LiB3aGljaCBpcyBwbHVn
Z2VkIHRvIGEgbmV3IGludGVybGVhdmUgcmVxdWVzdCBzcmNwYWQuCisgICAgZm9yICh1bnNpZ25l
ZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXggPCBwcml2LT5idXMtPm51bWJlck9mQ2hh
bm5lbHMoKTsgY2hhbm5lbEluZGV4KyspIHsKKyAgICAgICAgR3N0RWxlbWVudCogcXVldWUgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgMCk7CisgICAgICAgIEdzdEVsZW1lbnQq
IGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCAwKTsK
KyAgICAgICAgR3N0RWxlbWVudCogYXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IG1vbm9D
YXBzKGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+c2FtcGxlUmF0ZSkpOworICAgICAg
ICBnX29iamVjdF9zZXQoY2Fwc2ZpbHRlciwgImNhcHMiLCBtb25vQ2Fwcy5nZXQoKSwgTlVMTCk7
CisKKyAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBxdWV1ZSBmb3IgbWluaW1hbCBsYXRlbmN5Lgor
ICAgICAgICBnX29iamVjdF9zZXQocXVldWUsICJtYXgtc2l6ZS1idWZmZXJzIiwgc3RhdGljX2Nh
c3Q8Z3VpbnQ+KDEpLCBOVUxMKTsKKworICAgICAgICBHc3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKHF1ZXVlLCAic2luayIpOworICAgICAgICBwcml2LT5wYWRzID0gZ19z
bGlzdF9wcmVwZW5kKHByaXYtPnBhZHMsIHBhZCk7CisKKyAgICAgICAgZ3N0X2Jpbl9hZGRfbWFu
eShHU1RfQklOKHNyYyksIHF1ZXVlLCBjYXBzZmlsdGVyLCBhdWRpb2NvbnZlcnQsIE5VTEwpOwor
ICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChxdWV1ZSwgInNyYyIsIGNhcHNmaWx0
ZXIsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworICAgICAgICBnc3RfZWxl
bWVudF9saW5rX3BhZHNfZnVsbChjYXBzZmlsdGVyLCAic3JjIiwgYXVkaW9jb252ZXJ0LCAic2lu
ayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5HKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBh
ZD4gc3JjUGFkKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGF1ZGlvY29udmVydCwgInNyYyIp
KTsKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtQYWQoZ3N0X2VsZW1lbnRfZ2V0X3JlcXVl
c3RfcGFkKHByaXYtPmludGVybGVhdmUuZ2V0KCksICJzaW5rJWQiKSk7CisgICAgICAgIGdzdF9w
YWRfbGluayhzcmNQYWQuZ2V0KCksIHNpbmtQYWQuZ2V0KCkpOworICAgIH0KKyAgICBwcml2LT5w
YWRzID0gZ19zbGlzdF9yZXZlcnNlKHByaXYtPnBhZHMpOworCisgICAgLy8gd2F2ZW5jJ3Mgc3Jj
IHBhZCBpcyB0aGUgb25seSB2aXNpYmxlIHBhZCBvZiBvdXIgZWxlbWVudC4KKyAgICBHUmVmUHRy
PEdzdFBhZD4gdGFyZ2V0UGFkKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHByaXYtPndhdkVu
Y29kZXIuZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KEdTVF9H
SE9TVF9QQUQocHJpdi0+c291cmNlUGFkKSwgdGFyZ2V0UGFkLmdldCgpKTsKK30KKworc3RhdGlj
IHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAg
V2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVjdCk7Cisg
ICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAg
Z3N0X29iamVjdF91bnJlZihwcml2LT50YXNrKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfZnJl
ZShwcml2LT5tdXRleCk7CisKKyAgICBnX3NsaXN0X2ZyZWVfZnVsbChwcml2LT5wYWRzLCByZWlu
dGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7CisKKyAgICBw
cml2LT5+V2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKCk7CisgICAgR1NUX0NBTExfUEFSRU5U
KEdfT0JKRUNUX0NMQVNTLCBmaW5hbGl6ZSwgKChHT2JqZWN0KiApKHNyYykpKTsKK30KKworc3Rh
dGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQor
eworICAgIFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhvYmpl
Y3QpOworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsK
KworICAgIHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9SQVRFOgorICAgICAg
ICBwcml2LT5zYW1wbGVSYXRlID0gZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQlVTOgorICAgICAgICBwcml2LT5idXMgPSBzdGF0aWNfY2Fz
dDxBdWRpb0J1cyo+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX1BST1ZJREVSOgorICAgICAgICBwcml2LT5wcm92aWRlciA9IHN0YXRp
Y19jYXN0PEF1ZGlvU291cmNlUHJvdmlkZXIqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9GUkFNRVM6CisgICAgICAgIHByaXYtPmZy
YW1lc1RvUHVsbCA9IGdfdmFsdWVfZ2V0X3VpbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1
aW50IHByb3BlcnR5SWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAg
IFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhvYmplY3QpOwor
ICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAg
IHN3aXRjaCAocHJvcGVydHlJZCkgeworICAgIGNhc2UgUFJPUF9SQVRFOgorICAgICAgICBnX3Zh
bHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+c2FtcGxlUmF0ZSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9CVVM6CisgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIodmFsdWUsIHBy
aXYtPmJ1cyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9WSURFUjoKKyAgICAg
ICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgcHJpdi0+cHJvdmlkZXIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfRlJBTUVTOgorICAgICAgICBnX3ZhbHVlX3NldF91aW50KHZh
bHVlLCBwcml2LT5mcmFtZXNUb1B1bGwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0
eUlkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
S2l0V2ViQXVkaW9TcmNMb29wKFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMpCit7CisgICAgV2ViS2l0
V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgQVNTRVJUKHBy
aXYtPmJ1cyk7CisgICAgQVNTRVJUKHByaXYtPnByb3ZpZGVyKTsKKyAgICBpZiAoIXByaXYtPnBy
b3ZpZGVyIHx8ICFwcml2LT5idXMpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIGJ1
ZmZlclNpemUgPSBwcml2LT5mcmFtZXNUb1B1bGwgKiBzaXplb2YoZmxvYXQpOworICAgIHByaXYt
PnByb3ZpZGVyLT5wcm92aWRlSW5wdXQocHJpdi0+YnVzLCBwcml2LT5mcmFtZXNUb1B1bGwpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgZ19zbGlzdF9sZW5ndGgocHJp
di0+cGFkcyk7IGluZGV4KyspIHsKKyAgICAgICAgR3N0UGFkKiBwYWQgPSBzdGF0aWNfY2FzdDxH
c3RQYWQqPihnX3NsaXN0X250aF9kYXRhKHByaXYtPnBhZHMsIGluZGV4KSk7CisKKyAgICAgICAg
R3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVmZmVyX3RyeV9uZXdfYW5kX2FsbG9jKGJ1ZmZlclNp
emUpOworICAgICAgICBBU1NFUlQoYnVmZmVyKTsKKyAgICAgICAgbWVtY3B5KEdTVF9CVUZGRVJf
REFUQShidWZmZXIpLCBwcml2LT5idXMtPmNoYW5uZWwoaW5kZXgpLT5kYXRhKCksIGJ1ZmZlclNp
emUpOworICAgICAgICBHU1RfQlVGRkVSX09GRlNFVChidWZmZXIpID0gcHJpdi0+Y3VycmVudEJ1
ZmZlck9mZnNldDsKKyAgICAgICAgR1NUX0JVRkZFUl9PRkZTRVRfRU5EKGJ1ZmZlcikgPSBwcml2
LT5jdXJyZW50QnVmZmVyT2Zmc2V0ICsgcHJpdi0+ZnJhbWVzVG9QdWxsOworCisgICAgICAgIEdz
dENhcHMqIG1vbm9DYXBzID0gZ2V0R1N0cmVhbWVyTW9ub0F1ZGlvQ2Fwcyhwcml2LT5zYW1wbGVS
YXRlKTsKKyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3Ry
dWN0dXJlKG1vbm9DYXBzLCAwKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJl
LCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLCBOVUxMKTsKKyAgICAgICAgR3N0QXVkaW9DaGFu
bmVsUG9zaXRpb24gY2hhbm5lbFBvc2l0aW9uID0gd2ViS2l0V2ViQXVkaW9HU3RyZWFtZXJDaGFu
bmVsUG9zaXRpb24oaW5kZXgpOworICAgICAgICBnc3RfYXVkaW9fc2V0X2NoYW5uZWxfcG9zaXRp
b25zKHN0cnVjdHVyZSwgJmNoYW5uZWxQb3NpdGlvbik7CisgICAgICAgIGdzdF9idWZmZXJfc2V0
X2NhcHMoYnVmZmVyLCBtb25vQ2Fwcyk7CisKKyAgICAgICAgZ3N0X3BhZF9jaGFpbihwYWQsIGJ1
ZmZlcik7CisgICAgICAgIGdzdF9jYXBzX3VucmVmKG1vbm9DYXBzKTsKKyAgICB9CisKKyAgICBw
cml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0ICs9IHByaXYtPmZyYW1lc1RvUHVsbDsKK30KKworc3Rh
dGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYkF1ZGlvU3JjQ2hhbmdlU3RhdGUoR3N0
RWxlbWVudCogZWxlbWVudCwgR3N0U3RhdGVDaGFuZ2UgdHJhbnNpdGlvbikKK3sKKyAgICBHc3RT
dGF0ZUNoYW5nZVJldHVybiByZXR1cm5WYWx1ZSA9IEdTVF9TVEFURV9DSEFOR0VfU1VDQ0VTUzsK
KyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMoZWxlbWVu
dCk7CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFO
R0VfTlVMTF9UT19SRUFEWToKKyAgICAgICAgaWYgKCFzcmMtPnByaXYtPmludGVybGVhdmUpIHsK
KyAgICAgICAgICAgIGdzdF9lbGVtZW50X3Bvc3RfbWVzc2FnZShlbGVtZW50LCBnc3RfbWlzc2lu
Z19lbGVtZW50X21lc3NhZ2VfbmV3KGVsZW1lbnQsICJpbnRlcmxlYXZlIikpOworICAgICAgICAg
ICAgR1NUX0VMRU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBNSVNTSU5HX1BMVUdJTiwgKDApLCAoIm5v
IGludGVybGVhdmUiKSk7CisgICAgICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlM
VVJFOworICAgICAgICB9CisgICAgICAgIGlmICghc3JjLT5wcml2LT53YXZFbmNvZGVyKSB7Cisg
ICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoZWxlbWVudCwgZ3N0X21pc3Npbmdf
ZWxlbWVudF9tZXNzYWdlX25ldyhlbGVtZW50LCAid2F2ZW5jIikpOworICAgICAgICAgICAgR1NU
X0VMRU1FTlRfRVJST1Ioc3JjLCBDT1JFLCBNSVNTSU5HX1BMVUdJTiwgKDApLCAoIm5vIHdhdmVu
YyIpKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAg
ICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAg
fQorCisgICAgcmV0dXJuVmFsdWUgPSBHU1RfRUxFTUVOVF9DTEFTUyhwYXJlbnRfY2xhc3MpLT5j
aGFuZ2Vfc3RhdGUoZWxlbWVudCwgdHJhbnNpdGlvbik7CisgICAgaWYgKFVOTElLRUxZKHJldHVy
blZhbHVlID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkpIHsKKyAgICAgICAgR1NUX0RFQlVH
X09CSkVDVChzcmMsICJTdGF0ZSBjaGFuZ2UgZmFpbGVkIik7CisgICAgICAgIHJldHVybiByZXR1
cm5WYWx1ZTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKKyAgICBjYXNlIEdT
VF9TVEFURV9DSEFOR0VfUkVBRFlfVE9fUEFVU0VEOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlJFQURZLT5QQVVTRUQiKTsKKyAgICAgICAgaWYgKCFnc3RfdGFza19zdGFydChzcmMt
PnByaXYtPnRhc2spKQorICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBHU1RfU1RBVEVfQ0hBTkdF
X0ZBSUxVUkU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9QQVVT
RURfVE9fUkVBRFk6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUEFVU0VELT5SRUFE
WSIpOworICAgICAgICBpZiAoIWdzdF90YXNrX2pvaW4oc3JjLT5wcml2LT50YXNrKSkKKyAgICAg
ICAgICAgIHJldHVyblZhbHVlID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
cmV0dXJuVmFsdWU7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKSAmJiBVU0UoR1NU
UkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDlkZmNkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlv
U291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTEgUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFt
ZXJfaAorI2RlZmluZSBXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lcl9oCisjaWYgVVNFKEdT
VFJFQU1FUikKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2RlZmluZSBXRUJLSVRfVFlQRV9X
RUJfQVVESU9fU1JDICh3ZWJraXRfd2ViX2F1ZGlvX3NyY19nZXRfdHlwZSgpKQorI2RlZmluZSBX
RUJLSVRfV0VCX0FVRElPX1NSQyhvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2Jq
KSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2ViQXVkaW9TcmMpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0V2ViQXVkaW9TcmMgICAgICAgIFdlYktpdFdlYkF1ZGlvU3JjOwor
CitHVHlwZSB3ZWJraXRfd2ViX2F1ZGlvX3NyY19nZXRfdHlwZSh2b2lkKTsKKworI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVIpCisjZW5kaWYKLS0gCjEuNy43LjE=
</data>
<flag name="review"
          id="113148"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114658</attachid>
            <date>2011-11-11 03:05:09 -0800</date>
            <delta_ts>2011-11-15 01:08:22 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>28166</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBmNTgwMWIzYTg5MzE2NzdjOWNiYjJkNjliMmQ3ZjI3NTIxNjIzZDBlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1
MSArKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAg
IHwgICAgMiArCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
Y3BwICB8ICAgODggKysrKystCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAgICAgfCAgMzk2ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgMzMgKysKIDYgZmls
ZXMgY2hhbmdlZCwgNTc3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdl
YkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGZkZjg3ZWIuLmMxNWVjMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1NCBAQAorMjAxMS0xMC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gV2ViQXVkaW8gQXVkaW9EZXN0aW5hdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgR1N0cmVhbWVy
IHNvdXJjZSBlbGVtZW50IHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBBdWRpb0J1cyBhbmQKKyAgICAg
ICAgb3V0cHV0aW5nIGF1ZGlvIGludGVybGVhdmVkIEdzdEJ1ZmZlcnMgc3VpdGFibGUgZm9yIHBs
YXliYWNrLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgdGhlIG5ldyBH
U3RyZWFtZXIgV2ViQXVkaW8gZWxlbWVudAorICAgICAgICBzb3VyY2UgZmlsZXMgdG8gdGhlIGJ1
aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9u
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9uR1N0cmVhbWVyV2F2cGFyc2VQYWRB
ZGRlZENhbGxiYWNrKTogRnVuY3Rpb24gY2FsbGVkCisgICAgICAgIHdoZW4gdGhlIHBsYXliYWNr
IHBpcGVsaW5lIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIGF1ZGlvIHNvdXJjZQorICAgICAgICBp
bnRvIGEgV0FWIHN0cmVhbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXI6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIpOgorICAgICAgICBDb25maWd1cmUgdGhl
IGluaXRpYWwgcGxheWJhY2sgcGlwZWxpbmUgdXAgdG8gdGhlIFdBViBwYXJzZXIuIFRoZQorICAg
ICAgICBhdWRpbyBzaW5rIGlzIGFkZGVkIG9ubHkgYWZ0ZXIgdGhlIFdBViBwYXJzZXIgd2FzIGNv
bmZpZ3VyZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIFJlc2V0IHRoZSBwbGF5YmFjayBw
aXBlbGluZSBhbmQgZGVsZXRlIGl0LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bkdTdHJlYW1lcjo6cGx1Z1NpbmspOiBNZXRob2QgdG8gYWRkIHRoZQorICAgICAgICBhdWRpbyBz
aW5rIHRvIHRoZSBwaXBlbGluZSBhbmQgbGluayBpdCB0byB0aGUgV0FWIHBhcnNlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0YXJ0KTogU2V0IHBpcGVs
aW5lIHRvCisgICAgICAgIFBMQVlJTkcsIGF0IHRoZSBmaXJzdCBydW4gaXQgd2lsbCB0cmlnZ2Vy
IHRoZSBXQVYgcGFyc2VyIGFuZCBoZW5jZQorICAgICAgICB0aGUgYXVkaW8tc2luayBwbHVnZ2lu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0b3ApOiBQ
YXVzZSB0aGUgcGlwZWxpbmUuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMpOiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdlbmVyYXRl
CisgICAgICAgIEdTdHJlYW1lciBjYXBzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBhdWRpbyBjaGFu
bmVsIGZvciBhIGdpdmVuCisgICAgICAgIHNhbXBsZSByYXRlLgorICAgICAgICAod2ViS2l0V2Vi
QXVkaW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24pOiBVdGlsaXR5IGZ1bmN0aW9uIHRvCisgICAg
ICAgIGNvbnZlcnQgQXVkaW9CdXMgY2hhbm5lbCByZXByZXNlbnRhdGlvbnMgdG8gR1N0cmVhbWVy
IHBvc2l0aW9uYWwKKyAgICAgICAgYXVkaW8gY2hhbm5lbCB2YWx1ZXMuCisgICAgICAgICh3ZWJr
aXRfd2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KTogR09iamVjdCBjb25maWd1cmF0aW9uIG9mIHRo
ZQorICAgICAgICBHU3RyZWFtZXIgc291cmNlIGVsZW1lbnQuCisgICAgICAgICh3ZWJraXRfd2Vi
X2F1ZGlvX3NyY19pbml0KTogSW5pdGlhbGl6YXRpb24gb2YgdGhlIHByaXZhdGUgZGF0YSBvZgor
ICAgICAgICB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ29uc3Ry
dWN0ZWQpOiBDb25maWd1cmUgdGhlIEdzdEJpbiBlbGVtZW50cworICAgICAgICBkZXBlbmRpbmcg
b24gdGhlIEF1ZGlvQnVzIGxheW91dC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlRmlu
YWxpemUpOiBDbGVhbiB1cCB0aGUgR3N0QmluIGFuZCBmcmVlIHByaXZhdGUKKyAgICAgICAgZGF0
YSBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlU2V0UHJvcGVy
dHkpOiBHT2JqZWN0IHByb3BlcnR5IHNldHRlci4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291
cmNlR2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAgKHdlYktp
dFdlYkF1ZGlvU291cmNlTG9vcCk6IEdzdFRhc2sgdXNlZCB0byBwdWxsIGRhdGEgZnJvbSB0aGUK
KyAgICAgICAgQXVkaW9CdXMgYW5kIHB1c2ggaXQgYXMgR3N0QnVmZmVycyB0byB0aGUgc3JjIHBh
ZCBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ2hhbmdlU3Rh
dGUpOiBTdGFydCBvciBzdG9wIHRoZSBhYm92ZSBHc3RUYXNrCisgICAgICAgIGRlcGVuZGluZyBv
biB0aGUgYXNrZWQgc3RhdGUgdHJhbnNpdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9n
c3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisKIDIwMTEt
MTAtMjggIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAg
IEhSVEYgRGF0YWJhc2UgY29uc29saWRhdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggN2U5ZGFmZi4uNzhjZjY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFr
ZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBA
IC00Nzk4LDYgKzQ3OTgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRp
b25HU3RyZWFtZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L0F1ZGlvRmlsZVJlYWRlckdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgXAorCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9C
dXNHdGsuY3BwCiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvSlNBdWRpb0J1ZmZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXIuY3BwCmluZGV4IDk0M2Q4NGEuLjdkYWE2NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0
aW5hdGlvbkdTdHJlYW1lci5jcHAKQEAgLTI1LDkgKzI1LDE3IEBACiAjaW5jbHVkZSAiQXVkaW9D
aGFubmVsLmgiCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkdP
d25QdHIuaCIKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2ViS2l0
V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVk
ZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFNp
emUgb2YgdGhlIEF1ZGlvQnVzIGZvciBwbGF5YmFjay4gVGhlIHdlYmtpdHdlYmF1ZGlvc3JjIGVs
ZW1lbnQKKy8vIG5lZWRzIHRvIGhhbmRsZSB0aGlzIG51bWJlciBvZiBmcmFtZXMgcGVyIGN5Y2xl
IGFzIHdlbGwuCitjb25zdCB1bnNpZ25lZCBmcmFtZXNUb1B1bGwgPSAxMjg7CisKIFBhc3NPd25Q
dHI8QXVkaW9EZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvU291cmNl
UHJvdmlkZXImIHByb3ZpZGVyLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIHJldHVybiBhZG9w
dFB0cihuZXcgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcihwcm92aWRlciwgc2FtcGxlUmF0ZSkp
OwpAQCAtMzgsMjUgKzQ2LDEwMyBAQCBmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNh
bXBsZVJhdGUoKQogICAgIHJldHVybiA0NDEwMDsKIH0KIAorc3RhdGljIHZvaWQgb25HU3RyZWFt
ZXJXYXZwYXJzZVBhZEFkZGVkQ2FsbGJhY2soR3N0RWxlbWVudCogZWxlbWVudCwgR3N0UGFkKiBw
YWQsIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3Rp
bmF0aW9uLT5wbHVnU2luayhwYWQpOworfQorCiBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpB
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKEF1ZGlvU291cmNlUHJvdmlkZXImIHByb3ZpZGVyLCBm
bG9hdCBzYW1wbGVSYXRlKQogICAgIDogbV9wcm92aWRlcihwcm92aWRlcikKLSAgICAsIG1fcmVu
ZGVyQnVzKDIsIDEyOCwgdHJ1ZSkKKyAgICAsIG1fcmVuZGVyQnVzKDIsIGZyYW1lc1RvUHVsbCwg
dHJ1ZSkKICAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogICAgICwgbV9pc1BsYXlpbmco
ZmFsc2UpCiB7CisgICAgc3RhdGljIGJvb2wgZ3N0SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBp
ZiAoIWdzdEluaXRpYWxpemVkKQorICAgICAgICBnc3RJbml0aWFsaXplZCA9IGdzdF9pbml0X2No
ZWNrKDAsIDAsIDApOworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZ3N0SW5pdGlhbGl6ZWQsICJH
U3RyZWFtZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisKKyAgICBtX3BpcGVsaW5lID0gZ3N0
X3BpcGVsaW5lX25ldygicGxheSIpOworCisgICAgR3N0RWxlbWVudCogd2Via2l0QXVkaW9TcmMg
PSByZWludGVycHJldF9jYXN0PEdzdEVsZW1lbnQqPihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVf
V0VCX0FVRElPX1NSQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmF0ZSIsIHNhbXBsZVJhdGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImJ1cyIsICZtX3JlbmRlckJ1cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAicHJvdmlkZXIiLCAmbV9wcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZnJhbWVzIiwg
ZnJhbWVzVG9QdWxsLCBOVUxMKSk7CisKKyAgICBHc3RFbGVtZW50KiB3YXZQYXJzZXIgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdnBhcnNlIiwgMCk7CisKKyAgICBtX3dhdlBhcnNlckF2
YWlsYWJsZSA9IHdhdlBhcnNlcjsKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKG1fd2F2UGFyc2Vy
QXZhaWxhYmxlLCAiRmFpbGVkIHRvIGNyZWF0ZSBHU3RyZWFtZXIgd2F2cGFyc2UgZWxlbWVudCIp
OworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGdfc2lnbmFsX2Nvbm5lY3Qod2F2UGFyc2VyLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSyhvbkdT
dHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdzdF9iaW5fYWRk
X21hbnkoR1NUX0JJTihtX3BpcGVsaW5lKSwgd2Via2l0QXVkaW9TcmMsIHdhdlBhcnNlciwgTlVM
TCk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwod2Via2l0QXVkaW9TcmMsICJzcmMi
LCB3YXZQYXJzZXIsICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOwogfQogCiBB
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcigpCiB7
CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsK
KyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fcGlwZWxpbmUpOworfQorCit2b2lkIEF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OnBsdWdTaW5rKEdzdFBhZCogcGFkKQoreworICAgIEFTU0VSVChtX3dh
dlBhcnNlckF2YWlsYWJsZSk7CisKKyAgICBHc3RFbGVtZW50KiBhdWRpb3NpbmsgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3NpbmsiLCAwKTsKKyAgICBtX2F1ZGlvU2lua0F2
YWlsYWJsZSA9IGF1ZGlvc2luazsKKworICAgIGlmIChhdWRpb3NpbmspIHsKKyAgICAgICAgLy8g
QXV0b2F1ZGlvc2luayBkb2VzIHRoZSByZWFsIHNpbmsgZGV0ZWN0aW9uIGluIHRoZQorICAgICAg
ICAvLyBHU1RfU1RBVEVfTlVMTC0+UkVBRFkgdHJhbnNpdGlvbiBzbyBpdCdzIGJlc3QgdG8gcm9s
bCBpdCB0byBSRUFEWSBhcworICAgICAgICAvLyBzb29uIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0
aGUgdW5kZXJseWluZyBwbGF0Zm9ybQorICAgICAgICAvLyBhdWRpb3Npbmsgd2FzIGxvYWRlZCBj
b3JyZWN0bHkuCisgICAgICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlQ2hhbmdlUmV0dXJu
ID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGF1ZGlvc2luaywgR1NUX1NUQVRFX1JFQURZKTsKKyAg
ICAgICAgaWYgKHN0YXRlQ2hhbmdlUmV0dXJuID09IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRSkg
eworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGF1ZGlvc2luaywgR1NUX1NUQVRF
X05VTEwpOworICAgICAgICAgICAgbV9hdWRpb1NpbmtBdmFpbGFibGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGdzdF9vYmplY3RfdW5yZWYoYXVkaW9zaW5rKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9hdWRpb1NpbmtB
dmFpbGFibGUsICJGYWlsZWQgdG8gY3JlYXRlIEdTdHJlYW1lciBhdXRvYXVkaW9zaW5rIGVsZW1l
bnQiKTsKKyAgICBpZiAoIW1fYXVkaW9TaW5rQXZhaWxhYmxlKQorICAgICAgICByZXR1cm47CisK
KyAgICBHc3RFbGVtZW50KiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
ImF1ZGlvY29udmVydCIsIDApOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVs
aW5lKSwgYXVkaW9jb252ZXJ0LCBhdWRpb3NpbmssIE5VTEwpOworCisgICAgLy8gTGluayB3YXZw
YXJzZSdzIHNyYyBwYWQgdG8gYXVkaW9jb252ZXJ0IHNpbmsgcGFkLgorICAgIEdSZWZQdHI8R3N0
UGFkPiBzaW5rUGFkKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGF1ZGlvY29udmVydCwgInNp
bmsiKSk7CisgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1BhZC5nZXQoKSk7CisKKyAgICAvLyBM
aW5rIGF1ZGlvY29udmVydCB0byBhdWRpb3NpbmsgYW5kIHJvbGwgc3RhdGVzLgorICAgIGdzdF9l
bGVtZW50X2xpbmtfcGFkc19mdWxsKGF1ZGlvY29udmVydCwgInNyYyIsIGF1ZGlvc2luaywgInNp
bmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19z
dGF0ZV93aXRoX3BhcmVudChhdWRpb2NvbnZlcnQpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3Rh
dGVfd2l0aF9wYXJlbnQoYXVkaW9zaW5rKTsKIH0KIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyOjpzdGFydCgpCiB7CisgICAgQVNTRVJUKG1fd2F2UGFyc2VyQXZhaWxhYmxlKTsKKyAg
ICBpZiAoIW1fd2F2UGFyc2VyQXZhaWxhYmxlKQorICAgICAgICByZXR1cm47CisKKyAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX1BMQVlJTkcpOwogICAgIG1f
aXNQbGF5aW5nID0gdHJ1ZTsKIH0KIAogdm9pZCBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpz
dG9wKCkKIHsKKyAgICBBU1NFUlQobV93YXZQYXJzZXJBdmFpbGFibGUgJiYgbV9hdWRpb1NpbmtB
dmFpbGFibGUpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFibGUgfHwgbV9hdWRpb1NpbmtB
dmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKICAgICBtX2lzUGxheWluZyA9IGZhbHNlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAppbmRleCA3Y2YzNzk4Li41
MTBkNTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmgKQEAgLTIyLDYg
KzIyLDkgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1ZGUgIkF1ZGlvRGVzdGluYXRp
b24uaCIKIAordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0RWxlbWVudDsKK3R5cGVkZWYg
c3RydWN0IF9Hc3RQYWQgR3N0UGFkOworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF1
ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIgOiBwdWJsaWMgQXVkaW9EZXN0aW5hdGlvbiB7CkBAIC0z
NiwxMiArMzksMTcgQEAgcHVibGljOgogICAgIGZsb2F0IHNhbXBsZVJhdGUoKSBjb25zdCB7IHJl
dHVybiBtX3NhbXBsZVJhdGU7IH0KICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBzb3VyY2VQcm92
aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXI7IH0KIAorICAgIHZvaWQgcGx1Z1Npbmso
R3N0UGFkKik7CisKIHByaXZhdGU6CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciYgbV9wcm92aWRl
cjsKICAgICBBdWRpb0J1cyBtX3JlbmRlckJ1czsKIAogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsK
ICAgICBib29sIG1faXNQbGF5aW5nOworICAgIGJvb2wgbV93YXZQYXJzZXJBdmFpbGFibGU7Cisg
ICAgYm9vbCBtX2F1ZGlvU2lua0F2YWlsYWJsZTsKKyAgICBHc3RFbGVtZW50KiBtX3BpcGVsaW5l
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMWY3YjVlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCAr
MSwzOTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFBoaWxpcHBlIE5vcm1hbmQgPHBu
b3JtYW5kQGlnYWxpYS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIgorCisjaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1
ZGUgIkF1ZGlvQnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1
ZGUgIkdPd25QdHIuaCIKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8
Z3N0L2F1ZGlvL211bHRpY2hhbm5lbC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRX
ZWJBdWRpb1NyY0NsYXNzICAgV2ViS2l0V2ViQXVkaW9TcmNDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9XZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRl
OworCitzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU3JjIHsKKyAgICBHc3RCaW4gcGFyZW50OworCisg
ICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJL
aXRXZWJBdWRpb1NyY0NsYXNzIHsKKyAgICBHc3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKK307CisK
K3N0cnVjdCBfV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlIHsKKyAgICBnZmxvYXQgc2FtcGxl
UmF0ZTsKKyAgICBBdWRpb0J1cyogYnVzOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3Zp
ZGVyOworICAgIGd1aW50IGZyYW1lc1RvUHVsbDsKKyAgICBndWludDY0IGN1cnJlbnRCdWZmZXJP
ZmZzZXQ7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGludGVybGVhdmU7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiB3YXZFbmNvZGVyOworCisgICAgR3N0VGFzayogdGFzazsKKyAgICBHU3Rh
dGljUmVjTXV0ZXgqIG11dGV4OworCisgICAgR1NMaXN0KiBwYWRzOyAvLyBMaXN0IG9mIHF1ZXVl
IHNyYyBwYWRzLiBPbmUgcXVldWUgZm9yIGVhY2ggcGxhbmFyIGF1ZGlvIGNoYW5uZWwuCisgICAg
R3N0UGFkKiBzb3VyY2VQYWQ7IC8vIHNyYyBwYWQgb2YgdGhlIGVsZW1lbnQsIGludGVybGVhdmVk
IHdhdiBkYXRhIGlzIHB1c2hlZCB0byBpdC4KK307CisKK2VudW0geworICAgIFBST1BfUkFURSA9
IDEsCisgICAgUFJPUF9CVVMsCisgICAgUFJPUF9QUk9WSURFUiwKKyAgICBQUk9QX0ZSQU1FUwor
fTsKKworc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHNyY1RlbXBsYXRlID0gR1NUX1NUQVRJ
Q19QQURfVEVNUExBVEUoInNyYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHU1RfUEFEX1NSQywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdT
VF9QQURfQUxXQVlTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1NUQVRJQ19DQVBTKCJhdWRpby94LXdhdiIpKTsK
KworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1Zyk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1ZworCitz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0cnVjdGVkKEdPYmplY3QqKTsKK3N0YXRp
YyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjRmluYWxpemUoR09iamVjdCopOworc3RhdGljIHZvaWQg
d2ViS2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwg
Y29uc3QgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9T
cmNHZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcGVydHlJZCwgR1ZhbHVlKiwgR1BhcmFt
U3BlYyopOworc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHdlYktpdFdlYkF1ZGlvU3JjQ2hh
bmdlU3RhdGUoR3N0RWxlbWVudCosIEdzdFN0YXRlQ2hhbmdlKTsKK3N0YXRpYyB2b2lkIHdlYktp
dFdlYkF1ZGlvU3JjTG9vcChXZWJLaXRXZWJBdWRpb1NyYyopOworCitzdGF0aWMgR3N0Q2Fwcyog
Z2V0R1N0cmVhbWVyTW9ub0F1ZGlvQ2FwcyhmbG9hdCBzYW1wbGVSYXRlKQoreworICAgIHJldHVy
biBnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdy1mbG9hdCIsICJyYXRlIiwgR19UWVBF
X0lOVCwgc3RhdGljX2Nhc3Q8aW50PihzYW1wbGVSYXRlKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJlbmRpYW5uZXNzIiwgR19UWVBFX0lOVCwgR19CWVRFX09SREVSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCIsIEdfVFlQRV9JTlQsIDMyLCBOVUxM
KTsKK30KKworc3RhdGljIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHdlYktpdFdlYkF1ZGlvR1N0
cmVhbWVyQ2hhbm5lbFBvc2l0aW9uKGludCBjaGFubmVsSW5kZXgpCit7CisgICAgR3N0QXVkaW9D
aGFubmVsUG9zaXRpb24gcG9zaXRpb247CisKKyAgICBzd2l0Y2ggKGNoYW5uZWxJbmRleCkgewor
ICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxMZWZ0OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9B
VURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX0xFRlQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXVkaW9CdXM6OkNoYW5uZWxSaWdodDoKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9f
Q0hBTk5FTF9QT1NJVElPTl9GUk9OVF9SSUdIVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
dWRpb0J1czo6Q2hhbm5lbENlbnRlcjoKKyAgICAgICAgLy8gQ2VudGVyIGFuZCBtb25vIGFyZSB0
aGUgc2FtZS4KKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9G
Uk9OVF9NT05POworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsTEZF
OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0xGRTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbFN1cnJvdW5kTGVmdDoKKyAg
ICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX0xFRlQ7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxTdXJyb3VuZFJpZ2h0Ogor
ICAgICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfUklHSFQ7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH07CisK
KyAgICByZXR1cm4gcG9zaXRpb247Cit9CisKKyNkZWZpbmUgd2Via2l0X3dlYl9hdWRpb19zcmNf
cGFyZW50X2NsYXNzIHBhcmVudF9jbGFzcworR19ERUZJTkVfVFlQRV9XSVRIX0NPREUoV2ViS2l0
V2ViQXVkaW9TcmMsIHdlYmtpdF93ZWJfYXVkaW9fc3JjLCBHU1RfVFlQRV9CSU4sIEdTVF9ERUJV
R19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnLCBcCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIndlYmtpdHdlYmF1ZGlvc3JjIiwgXAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2ViYXVkaW9z
cmMgZWxlbWVudCIpKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9hdWRpb19zcmNfY2xhc3Nf
aW5pdChXZWJLaXRXZWJBdWRpb1NyY0NsYXNzKiB3ZWJLaXRXZWJBdWRpb1NyY0NsYXNzKQorewor
ICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJLaXRXZWJB
dWRpb1NyY0NsYXNzKTsKKyAgICBHc3RFbGVtZW50Q2xhc3MqIGVsZW1lbnRDbGFzcyA9IEdTVF9F
TEVNRU5UX0NMQVNTKHdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MpOworCisgICAgZ3N0X2VsZW1lbnRf
Y2xhc3NfYWRkX3BhZF90ZW1wbGF0ZShlbGVtZW50Q2xhc3MsIGdzdF9zdGF0aWNfcGFkX3RlbXBs
YXRlX2dldCgmc3JjVGVtcGxhdGUpKTsKKyAgICBnc3RfZWxlbWVudF9jbGFzc19zZXRfZGV0YWls
c19zaW1wbGUoZWxlbWVudENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiV2ViS2l0IFdlYkF1ZGlvIHNvdXJjZSBlbGVtZW50IiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvdXJjZSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJIYW5kbGVzIFdlYkF1ZGlvIGRhdGEgZnJvbSBXZWJDb3Jl
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBoaWxpcHBlIE5v
cm1hbmQgPHBub3JtYW5kQGlnYWxpYS5jb20+Iik7CisKKyAgICBvYmplY3RDbGFzcy0+Y29uc3Ry
dWN0ZWQgPSB3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0cnVjdGVkOworICAgIG9iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYktpdFdlYkF1ZGlvU3JjRmluYWxpemU7CisgICAgZWxlbWVudENsYXNzLT5j
aGFuZ2Vfc3RhdGUgPSB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlOworCisgICAgb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJvcGVydHk7CisgICAg
b2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHk7
CisKKyAgICBHUGFyYW1GbGFncyBmbGFncyA9IHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BB
UkFNX0NPTlNUUlVDVF9PTkxZIHwgR19QQVJBTV9SRUFEV1JJVEUpOworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1JBVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoInJhdGUiLCAicmF0ZSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNhbXBsZSByYXRlIiwgR19N
SU5ET1VCTEUsIEdfTUFYRE9VQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDQ0MTAwLjAsIGZsYWdzKSk7CisKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9CVVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfcG9pbnRlcigiYnVzIiwgImJ1cyIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQnVzIiwgZmxhZ3MpKTsK
KworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1BST1ZJREVSLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3BvaW50ZXIoInByb3ZpZGVy
IiwgInByb3ZpZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJQcm92aWRlciIsIGZsYWdzKSk7CisKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9GUkFNRVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfdWludCgiZnJhbWVzIiwgImZyYW1lcyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTnVtYmVyIG9mIGF1ZGlv
IGZyYW1lcyB0byBwdWxsIGF0IGVhY2ggaXRlcmF0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdfTUFYVUlOVDgsIDEyOCwgZmxh
Z3MpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZSh3ZWJLaXRXZWJBdWRpb1NyY0Ns
YXNzLCBzaXplb2YoV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2luaXQoV2ViS2l0V2ViQXVkaW9TcmMqIHNyYykKK3sK
KyAgICBXZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUqIHByaXYgPSBHX1RZUEVfSU5TVEFOQ0Vf
R0VUX1BSSVZBVEUoc3JjLCBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDLCBXZWJLaXRXZWJBdWRp
b1NvdXJjZVByaXZhdGUpOworICAgIHNyYy0+cHJpdiA9IHByaXY7CisgICAgbmV3IChwcml2KSBX
ZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUoKTsKKworICAgIEdzdFBhZFRlbXBsYXRlKiBwYWRU
ZW1wbGF0ZSA9IGdzdF9zdGF0aWNfcGFkX3RlbXBsYXRlX2dldCgmc3JjVGVtcGxhdGUpOworICAg
IHByaXYtPnNvdXJjZVBhZCA9IGdzdF9naG9zdF9wYWRfbmV3X25vX3RhcmdldF9mcm9tX3RlbXBs
YXRlKCJzcmMiLCBwYWRUZW1wbGF0ZSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxF
TUVOVChzcmMpLCBwcml2LT5zb3VyY2VQYWQpOworCisgICAgcHJpdi0+cHJvdmlkZXIgPSAwOwor
ICAgIHByaXYtPmJ1cyA9IDA7CisgICAgcHJpdi0+Y3VycmVudEJ1ZmZlck9mZnNldCA9IDA7CisK
KyAgICBwcml2LT5tdXRleCA9IGdfbmV3KEdTdGF0aWNSZWNNdXRleCwgMSk7CisgICAgZ19zdGF0
aWNfcmVjX211dGV4X2luaXQocHJpdi0+bXV0ZXgpOworCisgICAgcHJpdi0+dGFzayA9IGdzdF90
YXNrX2NyZWF0ZShyZWludGVycHJldF9jYXN0PEdzdFRhc2tGdW5jdGlvbj4od2ViS2l0V2ViQXVk
aW9TcmNMb29wKSwgc3JjKTsKKyAgICBnc3RfdGFza19zZXRfbG9jayhwcml2LT50YXNrLCBwcml2
LT5tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjQ29uc3RydWN0ZWQo
R09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMgPSBXRUJLSVRf
V0VCX0FVRElPX1NSQyhvYmplY3QpOworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVChwcml2LT5idXMpOworICAgIEFTU0VSVChw
cml2LT5wcm92aWRlcik7CisgICAgQVNTRVJUKHByaXYtPnNhbXBsZVJhdGUpOworCisgICAgcHJp
di0+aW50ZXJsZWF2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiaW50ZXJsZWF2ZSIsIDAp
OworICAgIHByaXYtPndhdkVuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdmVu
YyIsIDApOworCisgICAgaWYgKCFwcml2LT5pbnRlcmxlYXZlKSB7CisgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSBpbnRlcmxlYXZlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIXByaXYtPndhdkVuY29kZXIpIHsKKyAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChzcmMsICJGYWlsZWQgdG8gY3JlYXRlIHdhdmVuYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHNyYyksIHByaXYt
PmludGVybGVhdmUuZ2V0KCksIHByaXYtPndhdkVuY29kZXIuZ2V0KCksIE5VTEwpOworICAgIGdz
dF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHByaXYtPmludGVybGVhdmUuZ2V0KCksICJzcmMiLCBw
cml2LT53YXZFbmNvZGVyLmdldCgpLCAic2luayIsIEdTVF9QQURfTElOS19DSEVDS19OT1RISU5H
KTsKKworICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2YgdGhlIGJ1cyBjcmVhdGUgYSBuZXcgdXBz
dHJlYW0gYnJhbmNoIGZvciBpbnRlcmxlYXZlLCBsaWtlOgorICAgIC8vIHF1ZXVlICEgY2Fwc2Zp
bHRlciAhIGF1ZGlvY29udmVydC4gd2hpY2ggaXMgcGx1Z2dlZCB0byBhIG5ldyBpbnRlcmxlYXZl
IHJlcXVlc3Qgc3JjcGFkLgorICAgIGZvciAodW5zaWduZWQgY2hhbm5lbEluZGV4ID0gMDsgY2hh
bm5lbEluZGV4IDwgcHJpdi0+YnVzLT5udW1iZXJPZkNoYW5uZWxzKCk7IGNoYW5uZWxJbmRleCsr
KSB7CisgICAgICAgIEdzdEVsZW1lbnQqIHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJxdWV1ZSIsIDApOworICAgICAgICBHc3RFbGVtZW50KiBjYXBzZmlsdGVyID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJjYXBzZmlsdGVyIiwgMCk7CisgICAgICAgIEdzdEVsZW1lbnQqIGF1
ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgMCk7
CisKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBtb25vQ2FwcyhnZXRHU3RyZWFtZXJNb25vQXVk
aW9DYXBzKHByaXYtPnNhbXBsZVJhdGUpKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0KGNhcHNmaWx0
ZXIsICJjYXBzIiwgbW9ub0NhcHMuZ2V0KCksIE5VTEwpOworCisgICAgICAgIC8vIENvbmZpZ3Vy
ZSB0aGUgcXVldWUgZm9yIG1pbmltYWwgbGF0ZW5jeS4KKyAgICAgICAgZ19vYmplY3Rfc2V0KHF1
ZXVlLCAibWF4LXNpemUtYnVmZmVycyIsIHN0YXRpY19jYXN0PGd1aW50PigxKSwgTlVMTCk7CisK
KyAgICAgICAgR3N0UGFkKiBwYWQgPSBnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChxdWV1ZSwg
InNpbmsiKTsKKyAgICAgICAgcHJpdi0+cGFkcyA9IGdfc2xpc3RfcHJlcGVuZChwcml2LT5wYWRz
LCBwYWQpOworCisgICAgICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihzcmMpLCBxdWV1ZSwg
Y2Fwc2ZpbHRlciwgYXVkaW9jb252ZXJ0LCBOVUxMKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbGlu
a19wYWRzX2Z1bGwocXVldWUsICJzcmMiLCBjYXBzZmlsdGVyLCAic2luayIsIEdTVF9QQURfTElO
S19DSEVDS19OT1RISU5HKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwoY2Fw
c2ZpbHRlciwgInNyYyIsIGF1ZGlvY29udmVydCwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tf
Tk9USElORyk7CisKKyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNyY1BhZChnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChhdWRpb2NvbnZlcnQsICJzcmMiKSk7CisgICAgICAgIEdSZWZQdHI8R3N0
UGFkPiBzaW5rUGFkKGdzdF9lbGVtZW50X2dldF9yZXF1ZXN0X3BhZChwcml2LT5pbnRlcmxlYXZl
LmdldCgpLCAic2luayVkIikpOworICAgICAgICBnc3RfcGFkX2xpbmsoc3JjUGFkLmdldCgpLCBz
aW5rUGFkLmdldCgpKTsKKyAgICB9CisgICAgcHJpdi0+cGFkcyA9IGdfc2xpc3RfcmV2ZXJzZShw
cml2LT5wYWRzKTsKKworICAgIC8vIHdhdmVuYydzIHNyYyBwYWQgaXMgdGhlIG9ubHkgdmlzaWJs
ZSBwYWQgb2Ygb3VyIGVsZW1lbnQuCisgICAgR1JlZlB0cjxHc3RQYWQ+IHRhcmdldFBhZChnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChwcml2LT53YXZFbmNvZGVyLmdldCgpLCAic3JjIikpOwor
ICAgIGdzdF9naG9zdF9wYWRfc2V0X3RhcmdldChHU1RfR0hPU1RfUEFEKHByaXYtPnNvdXJjZVBh
ZCksIHRhcmdldFBhZC5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3Jj
RmluYWxpemUoR09iamVjdCogb2JqZWN0KQoreworICAgIFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMg
PSBXRUJLSVRfV0VCX0FVRElPX1NSQyhvYmplY3QpOworICAgIFdlYktpdFdlYkF1ZGlvU291cmNl
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIGdzdF9vYmplY3RfdW5yZWYocHJpdi0+
dGFzayk7CisgICAgZ19zdGF0aWNfcmVjX211dGV4X2ZyZWUocHJpdi0+bXV0ZXgpOworCisgICAg
Z19zbGlzdF9mcmVlX2Z1bGwocHJpdi0+cGFkcywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5v
dGlmeT4oZ3N0X29iamVjdF91bnJlZikpOworCisgICAgcHJpdi0+fldlYktpdFdlYkF1ZGlvU291
cmNlUHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxp
emUsICgoR09iamVjdCogKShzcmMpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlv
U3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1Ny
Yyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRp
b1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfUkFURToKKyAgICAgICAgcHJpdi0+c2FtcGxlUmF0ZSA9IGdf
dmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JV
UzoKKyAgICAgICAgcHJpdi0+YnVzID0gc3RhdGljX2Nhc3Q8QXVkaW9CdXMqPihnX3ZhbHVlX2dl
dF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9WSURF
UjoKKyAgICAgICAgcHJpdi0+cHJvdmlkZXIgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3Zp
ZGVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfRlJBTUVTOgorICAgICAgICBwcml2LT5mcmFtZXNUb1B1bGwgPSBnX3ZhbHVlX2dl
dF91aW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19P
QkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlv
U3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3Jj
ID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJj
ZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsK
KyAgICBjYXNlIFBST1BfUkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHBy
aXYtPnNhbXBsZVJhdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQlVTOgorICAg
ICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZhbHVlLCBwcml2LT5idXMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfUFJPVklERVI6CisgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIo
dmFsdWUsIHByaXYtPnByb3ZpZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZS
QU1FUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgcHJpdi0+ZnJhbWVzVG9QdWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjTG9vcChXZWJL
aXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSog
cHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVChwcml2LT5idXMpOworICAgIEFTU0VSVChw
cml2LT5wcm92aWRlcik7CisgICAgaWYgKCFwcml2LT5wcm92aWRlciB8fCAhcHJpdi0+YnVzKQor
ICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gcHJpdi0+ZnJhbWVz
VG9QdWxsICogc2l6ZW9mKGZsb2F0KTsKKyAgICBwcml2LT5wcm92aWRlci0+cHJvdmlkZUlucHV0
KHByaXYtPmJ1cywgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKKworICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGdfc2xpc3RfbGVuZ3RoKHByaXYtPnBhZHMpOyBpbmRleCsrKSB7Cisg
ICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ19zbGlzdF9udGhfZGF0
YShwcml2LT5wYWRzLCBpbmRleCkpOworCisgICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0
X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyAgICAgICAgQVNTRVJUKGJ1
ZmZlcik7CisgICAgICAgIG1lbWNweShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwgcHJpdi0+YnVz
LT5jaGFubmVsKGluZGV4KS0+ZGF0YSgpLCBidWZmZXJTaXplKTsKKyAgICAgICAgR1NUX0JVRkZF
Ul9PRkZTRVQoYnVmZmVyKSA9IHByaXYtPmN1cnJlbnRCdWZmZXJPZmZzZXQ7CisgICAgICAgIEdT
VF9CVUZGRVJfT0ZGU0VUX0VORChidWZmZXIpID0gcHJpdi0+Y3VycmVudEJ1ZmZlck9mZnNldCAr
IHByaXYtPmZyYW1lc1RvUHVsbDsKKworICAgICAgICBHc3RDYXBzKiBtb25vQ2FwcyA9IGdldEdT
dHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+c2FtcGxlUmF0ZSk7CisgICAgICAgIEdzdFN0cnVj
dHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtb25vQ2FwcywgMCk7Cisg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNoYW5uZWxzIiwgR19UWVBFX0lO
VCwgMSwgTlVMTCk7CisgICAgICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGNoYW5uZWxQb3Np
dGlvbiA9IHdlYktpdFdlYkF1ZGlvR1N0cmVhbWVyQ2hhbm5lbFBvc2l0aW9uKGluZGV4KTsKKyAg
ICAgICAgZ3N0X2F1ZGlvX3NldF9jaGFubmVsX3Bvc2l0aW9ucyhzdHJ1Y3R1cmUsICZjaGFubmVs
UG9zaXRpb24pOworICAgICAgICBnc3RfYnVmZmVyX3NldF9jYXBzKGJ1ZmZlciwgbW9ub0NhcHMp
OworCisgICAgICAgIGdzdF9wYWRfY2hhaW4ocGFkLCBidWZmZXIpOworICAgICAgICBnc3RfY2Fw
c191bnJlZihtb25vQ2Fwcyk7CisgICAgfQorCisgICAgcHJpdi0+Y3VycmVudEJ1ZmZlck9mZnNl
dCArPSBwcml2LT5mcmFtZXNUb1B1bGw7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVy
biB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0
YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0dXJu
VmFsdWUgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgICAgV2ViS2l0V2ViQXVkaW9TcmMq
IHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKGVsZW1lbnQpOworCisgICAgc3dpdGNoICh0cmFu
c2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6CisgICAg
ICAgIGlmICghc3JjLT5wcml2LT5pbnRlcmxlYXZlKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVu
dF9wb3N0X21lc3NhZ2UoZWxlbWVudCwgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdlX25ldyhl
bGVtZW50LCAiaW50ZXJsZWF2ZSIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNy
YywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBpbnRlcmxlYXZlIikpOworICAgICAg
ICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIXNyYy0+cHJpdi0+d2F2RW5jb2RlcikgeworICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
cG9zdF9tZXNzYWdlKGVsZW1lbnQsIGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2FnZV9uZXcoZWxl
bWVudCwgIndhdmVuYyIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09S
RSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyB3YXZlbmMiKSk7CisgICAgICAgICAgICByZXR1
cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVyblZhbHVlID0g
R1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRy
YW5zaXRpb24pOworICAgIGlmIChVTkxJS0VMWShyZXR1cm5WYWx1ZSA9PSBHU1RfU1RBVEVfQ0hB
TkdFX0ZBSUxVUkUpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RhdGUgY2hh
bmdlIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAg
c3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RP
X1BBVVNFRDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFVU0VEIik7
CisgICAgICAgIGlmICghZ3N0X3Rhc2tfc3RhcnQoc3JjLT5wcml2LT50YXNrKSkKKyAgICAgICAg
ICAgIHJldHVyblZhbHVlID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKKyAgICAgICAgaWYgKCFnc3Rf
dGFza19qb2luKHNyYy0+cHJpdi0+dGFzaykpCisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IEdT
VF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dl
YktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNmM0MWMyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0w
LDAgKzEsMzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIFBoaWxpcHBlIE5vcm1hbmQg
PHBub3JtYW5kQGlnYWxpYS5jb20+CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aWZuZGVmIFdlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0V2Vi
QXVkaW9Tb3VyY2VHU3RyZWFtZXJfaAorI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDxn
c3QvZ3N0Lmg+CisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQyAod2Via2l0X3dl
Yl9hdWRpb19zcmNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9BVURJT19TUkMob2Jq
KSAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9BVURJ
T19TUkMsIFdlYktpdFdlYkF1ZGlvU3JjKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkF1
ZGlvU3JjICAgICAgICBXZWJLaXRXZWJBdWRpb1NyYzsKKworR1R5cGUgd2Via2l0X3dlYl9hdWRp
b19zcmNfZ2V0X3R5cGUoKTsKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCisjZW5kaWYKLS0g
CjEuNy43LjE=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115118</attachid>
            <date>2011-11-15 01:08:22 -0800</date>
            <delta_ts>2011-11-21 09:11:50 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>28145</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAzNzJjM2EyMTMzMWIyY2UyODM3ZWJjMjRmYjIzODQ4MjdiNThlNjkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1
MSArKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAg
IHwgICAgMiArCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
Y3BwICB8ICAgODggKysrKystCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAgICAgfCAgMzk2ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgMzMgKysKIDYgZmls
ZXMgY2hhbmdlZCwgNTc3IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9k
ZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdl
YkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IDU4YzNlMmMuLjg1NDFhOGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSw1NCBAQAorMjAxMS0xMC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gV2ViQXVkaW8gQXVkaW9EZXN0aW5hdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4MzUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgR1N0cmVhbWVy
IHNvdXJjZSBlbGVtZW50IHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBBdWRpb0J1cyBhbmQKKyAgICAg
ICAgb3V0cHV0aW5nIGF1ZGlvIGludGVybGVhdmVkIEdzdEJ1ZmZlcnMgc3VpdGFibGUgZm9yIHBs
YXliYWNrLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgdGhlIG5ldyBH
U3RyZWFtZXIgV2ViQXVkaW8gZWxlbWVudAorICAgICAgICBzb3VyY2UgZmlsZXMgdG8gdGhlIGJ1
aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9u
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9uR1N0cmVhbWVyV2F2cGFyc2VQYWRB
ZGRlZENhbGxiYWNrKTogRnVuY3Rpb24gY2FsbGVkCisgICAgICAgIHdoZW4gdGhlIHBsYXliYWNr
IHBpcGVsaW5lIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIGF1ZGlvIHNvdXJjZQorICAgICAgICBp
bnRvIGEgV0FWIHN0cmVhbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXI6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIpOgorICAgICAgICBDb25maWd1cmUgdGhl
IGluaXRpYWwgcGxheWJhY2sgcGlwZWxpbmUgdXAgdG8gdGhlIFdBViBwYXJzZXIuIFRoZQorICAg
ICAgICBhdWRpbyBzaW5rIGlzIGFkZGVkIG9ubHkgYWZ0ZXIgdGhlIFdBViBwYXJzZXIgd2FzIGNv
bmZpZ3VyZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIFJlc2V0IHRoZSBwbGF5YmFjayBw
aXBlbGluZSBhbmQgZGVsZXRlIGl0LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlv
bkdTdHJlYW1lcjo6cGx1Z1NpbmspOiBNZXRob2QgdG8gYWRkIHRoZQorICAgICAgICBhdWRpbyBz
aW5rIHRvIHRoZSBwaXBlbGluZSBhbmQgbGluayBpdCB0byB0aGUgV0FWIHBhcnNlci4KKyAgICAg
ICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0YXJ0KTogU2V0IHBpcGVs
aW5lIHRvCisgICAgICAgIFBMQVlJTkcsIGF0IHRoZSBmaXJzdCBydW4gaXQgd2lsbCB0cmlnZ2Vy
IHRoZSBXQVYgcGFyc2VyIGFuZCBoZW5jZQorICAgICAgICB0aGUgYXVkaW8tc2luayBwbHVnZ2lu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0b3ApOiBQ
YXVzZSB0aGUgcGlwZWxpbmUuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMpOiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdlbmVyYXRl
CisgICAgICAgIEdTdHJlYW1lciBjYXBzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBhdWRpbyBjaGFu
bmVsIGZvciBhIGdpdmVuCisgICAgICAgIHNhbXBsZSByYXRlLgorICAgICAgICAod2ViS2l0V2Vi
QXVkaW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24pOiBVdGlsaXR5IGZ1bmN0aW9uIHRvCisgICAg
ICAgIGNvbnZlcnQgQXVkaW9CdXMgY2hhbm5lbCByZXByZXNlbnRhdGlvbnMgdG8gR1N0cmVhbWVy
IHBvc2l0aW9uYWwKKyAgICAgICAgYXVkaW8gY2hhbm5lbCB2YWx1ZXMuCisgICAgICAgICh3ZWJr
aXRfd2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KTogR09iamVjdCBjb25maWd1cmF0aW9uIG9mIHRo
ZQorICAgICAgICBHU3RyZWFtZXIgc291cmNlIGVsZW1lbnQuCisgICAgICAgICh3ZWJraXRfd2Vi
X2F1ZGlvX3NyY19pbml0KTogSW5pdGlhbGl6YXRpb24gb2YgdGhlIHByaXZhdGUgZGF0YSBvZgor
ICAgICAgICB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ29uc3Ry
dWN0ZWQpOiBDb25maWd1cmUgdGhlIEdzdEJpbiBlbGVtZW50cworICAgICAgICBkZXBlbmRpbmcg
b24gdGhlIEF1ZGlvQnVzIGxheW91dC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlRmlu
YWxpemUpOiBDbGVhbiB1cCB0aGUgR3N0QmluIGFuZCBmcmVlIHByaXZhdGUKKyAgICAgICAgZGF0
YSBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlU2V0UHJvcGVy
dHkpOiBHT2JqZWN0IHByb3BlcnR5IHNldHRlci4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291
cmNlR2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAgKHdlYktp
dFdlYkF1ZGlvU291cmNlTG9vcCk6IEdzdFRhc2sgdXNlZCB0byBwdWxsIGRhdGEgZnJvbSB0aGUK
KyAgICAgICAgQXVkaW9CdXMgYW5kIHB1c2ggaXQgYXMgR3N0QnVmZmVycyB0byB0aGUgc3JjIHBh
ZCBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ2hhbmdlU3Rh
dGUpOiBTdGFydCBvciBzdG9wIHRoZSBhYm92ZSBHc3RUYXNrCisgICAgICAgIGRlcGVuZGluZyBv
biB0aGUgYXNrZWQgc3RhdGUgdHJhbnNpdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9n
c3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisKIDIwMTEt
MTEtMTUgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0g
Rml4IGluY29ycmVjdCBoYW5kbGluZyBvZiBKYXZhU2NyaXB0IHByb3BlcnRpZXMgaW4gRE9NU3Ry
aW5nTWFwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBiNzE4YzEwLi4xMTQ0Mzcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQ4MTEsNiArNDgxMSw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9GaWxlUmVhZGVyR1N0cmVh
bWVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktp
dFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2d0ay9BdWRpb0J1c0d0ay5jcHAKIHdlYmNvcmVfYnVp
bHRfc291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9KU0F1ZGlvQnVmZmVyLmNw
cCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5jcHAKaW5kZXggOTQzZDg0
YS4uN2RhYTY0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcApA
QCAtMjUsOSArMjUsMTcgQEAKICNpbmNsdWRlICJBdWRpb0NoYW5uZWwuaCIKICNpbmNsdWRlICJB
dWRpb1NvdXJjZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxz
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gU2l6ZSBvZiB0aGUgQXVkaW9CdXMgZm9y
IHBsYXliYWNrLiBUaGUgd2Via2l0d2ViYXVkaW9zcmMgZWxlbWVudAorLy8gbmVlZHMgdG8gaGFu
ZGxlIHRoaXMgbnVtYmVyIG9mIGZyYW1lcyBwZXIgY3ljbGUgYXMgd2VsbC4KK2NvbnN0IHVuc2ln
bmVkIGZyYW1lc1RvUHVsbCA9IDEyODsKKwogUGFzc093blB0cjxBdWRpb0Rlc3RpbmF0aW9uPiBB
dWRpb0Rlc3RpbmF0aW9uOjpjcmVhdGUoQXVkaW9Tb3VyY2VQcm92aWRlciYgcHJvdmlkZXIsIGZs
b2F0IHNhbXBsZVJhdGUpCiB7CiAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBBdWRpb0Rlc3RpbmF0
aW9uR1N0cmVhbWVyKHByb3ZpZGVyLCBzYW1wbGVSYXRlKSk7CkBAIC0zOCwyNSArNDYsMTAzIEBA
IGZsb2F0IEF1ZGlvRGVzdGluYXRpb246OmhhcmR3YXJlU2FtcGxlUmF0ZSgpCiAgICAgcmV0dXJu
IDQ0MTAwOwogfQogCitzdGF0aWMgdm9pZCBvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxs
YmFjayhHc3RFbGVtZW50KiBlbGVtZW50LCBHc3RQYWQqIHBhZCwgQXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lciogZGVzdGluYXRpb24pCit7CisgICAgZGVzdGluYXRpb24tPnBsdWdTaW5rKHBhZCk7
Cit9CisKIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFt
ZXIoQXVkaW9Tb3VyY2VQcm92aWRlciYgcHJvdmlkZXIsIGZsb2F0IHNhbXBsZVJhdGUpCiAgICAg
OiBtX3Byb3ZpZGVyKHByb3ZpZGVyKQotICAgICwgbV9yZW5kZXJCdXMoMiwgMTI4LCB0cnVlKQor
ICAgICwgbV9yZW5kZXJCdXMoMiwgZnJhbWVzVG9QdWxsLCB0cnVlKQogICAgICwgbV9zYW1wbGVS
YXRlKHNhbXBsZVJhdGUpCiAgICAgLCBtX2lzUGxheWluZyhmYWxzZSkKIHsKKyAgICBzdGF0aWMg
Ym9vbCBnc3RJbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmICghZ3N0SW5pdGlhbGl6ZWQpCisg
ICAgICAgIGdzdEluaXRpYWxpemVkID0gZ3N0X2luaXRfY2hlY2soMCwgMCwgMCk7CisgICAgQVNT
RVJUX1dJVEhfTUVTU0FHRShnc3RJbml0aWFsaXplZCwgIkdTdHJlYW1lciBpbml0aWFsaXphdGlv
biBmYWlsZWQiKTsKKworICAgIG1fcGlwZWxpbmUgPSBnc3RfcGlwZWxpbmVfbmV3KCJwbGF5Iik7
CisKKyAgICBHc3RFbGVtZW50KiB3ZWJraXRBdWRpb1NyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8R3N0
RWxlbWVudCo+KGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJyYXRlIiwgc2FtcGxlUmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVz
IiwgJm1fcmVuZGVyQnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcm92aWRlciIsICZtX3Byb3Zp
ZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJmcmFtZXMiLCBmcmFtZXNUb1B1bGwsIE5VTEwpKTsK
KworICAgIEdzdEVsZW1lbnQqIHdhdlBhcnNlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgi
d2F2cGFyc2UiLCAwKTsKKworICAgIG1fd2F2UGFyc2VyQXZhaWxhYmxlID0gd2F2UGFyc2VyOwor
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV93YXZQYXJzZXJBdmFpbGFibGUsICJGYWlsZWQgdG8g
Y3JlYXRlIEdTdHJlYW1lciB3YXZwYXJzZSBlbGVtZW50Iik7CisgICAgaWYgKCFtX3dhdlBhcnNl
ckF2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19zaWduYWxfY29ubmVjdCh3YXZQ
YXJzZXIsICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKG9uR1N0cmVhbWVyV2F2cGFyc2VQYWRBZGRl
ZENhbGxiYWNrKSwgdGhpcyk7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxp
bmUpLCB3ZWJraXRBdWRpb1NyYywgd2F2UGFyc2VyLCBOVUxMKTsKKyAgICBnc3RfZWxlbWVudF9s
aW5rX3BhZHNfZnVsbCh3ZWJraXRBdWRpb1NyYywgInNyYyIsIHdhdlBhcnNlciwgInNpbmsiLCBH
U1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CiB9CiAKIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFt
ZXI6On5BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKCkKIHsKKyAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9vYmplY3RfdW5yZWYo
bV9waXBlbGluZSk7Cit9CisKK3ZvaWQgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6cGx1Z1Np
bmsoR3N0UGFkKiBwYWQpCit7CisgICAgQVNTRVJUKG1fd2F2UGFyc2VyQXZhaWxhYmxlKTsKKwor
ICAgIEdzdEVsZW1lbnQqIGF1ZGlvc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0
b2F1ZGlvc2luayIsIDApOworICAgIG1fYXVkaW9TaW5rQXZhaWxhYmxlID0gYXVkaW9zaW5rOwor
CisgICAgaWYgKGF1ZGlvc2luaykgeworICAgICAgICAvLyBBdXRvYXVkaW9zaW5rIGRvZXMgdGhl
IHJlYWwgc2luayBkZXRlY3Rpb24gaW4gdGhlCisgICAgICAgIC8vIEdTVF9TVEFURV9OVUxMLT5S
RUFEWSB0cmFuc2l0aW9uIHNvIGl0J3MgYmVzdCB0byByb2xsIGl0IHRvIFJFQURZIGFzCisgICAg
ICAgIC8vIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3Jt
CisgICAgICAgIC8vIGF1ZGlvc2luayB3YXMgbG9hZGVkIGNvcnJlY3RseS4KKyAgICAgICAgR3N0
U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVDaGFuZ2VSZXR1cm4gPSBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUoYXVkaW9zaW5rLCBHU1RfU1RBVEVfUkVBRFkpOworICAgICAgICBpZiAoc3RhdGVDaGFuZ2VS
ZXR1cm4gPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CisgICAgICAgICAgICBnc3RfZWxl
bWVudF9zZXRfc3RhdGUoYXVkaW9zaW5rLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgICAgICAgICBt
X2F1ZGlvU2lua0F2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICAgICAgZ3N0X29iamVjdF91bnJl
ZihhdWRpb3NpbmspOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisg
ICAgQVNTRVJUX1dJVEhfTUVTU0FHRShtX2F1ZGlvU2lua0F2YWlsYWJsZSwgIkZhaWxlZCB0byBj
cmVhdGUgR1N0cmVhbWVyIGF1dG9hdWRpb3NpbmsgZWxlbWVudCIpOworICAgIGlmICghbV9hdWRp
b1NpbmtBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdEVsZW1lbnQqIGF1ZGlv
Y29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgMCk7Cisg
ICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKG1fcGlwZWxpbmUpLCBhdWRpb2NvbnZlcnQsIGF1
ZGlvc2luaywgTlVMTCk7CisKKyAgICAvLyBMaW5rIHdhdnBhcnNlJ3Mgc3JjIHBhZCB0byBhdWRp
b2NvbnZlcnQgc2luayBwYWQuCisgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtQYWQoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQoYXVkaW9jb252ZXJ0LCAic2luayIpKTsKKyAgICBnc3RfcGFkX2xp
bmsocGFkLCBzaW5rUGFkLmdldCgpKTsKKworICAgIC8vIExpbmsgYXVkaW9jb252ZXJ0IHRvIGF1
ZGlvc2luayBhbmQgcm9sbCBzdGF0ZXMuCisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRzX2Z1bGwo
YXVkaW9jb252ZXJ0LCAic3JjIiwgYXVkaW9zaW5rLCAic2luayIsIEdTVF9QQURfTElOS19DSEVD
S19OT1RISU5HKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGF1ZGlv
Y29udmVydCk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChhdWRpb3Np
bmspOwogfQogCiB2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0YXJ0KCkKIHsKKyAg
ICBBU1NFUlQobV93YXZQYXJzZXJBdmFpbGFibGUpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFp
bGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3Bp
cGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CiAgICAgbV9pc1BsYXlpbmcgPSB0cnVlOwogfQog
CiB2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0b3AoKQogeworICAgIEFTU0VSVCht
X3dhdlBhcnNlckF2YWlsYWJsZSAmJiBtX2F1ZGlvU2lua0F2YWlsYWJsZSk7CisgICAgaWYgKCFt
X3dhdlBhcnNlckF2YWlsYWJsZSB8fCBtX2F1ZGlvU2lua0F2YWlsYWJsZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUsIEdTVF9TVEFURV9Q
QVVTRUQpOwogICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVh
bWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0
aW5hdGlvbkdTdHJlYW1lci5oCmluZGV4IDdjZjM3OTguLjUxMGQ1ODYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaApAQCAtMjIsNiArMjIsOSBAQAogI2luY2x1ZGUgIkF1
ZGlvQnVzLmgiCiAjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgogCit0eXBlZGVmIHN0cnVj
dCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1l
ciA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uIHsKQEAgLTM2LDEyICszOSwxNyBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxlUmF0ZTsgfQog
ICAgIEF1ZGlvU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKCkgY29uc3QgeyByZXR1cm4g
bV9wcm92aWRlcjsgfQogCisgICAgdm9pZCBwbHVnU2luayhHc3RQYWQqKTsKKwogcHJpdmF0ZToK
ICAgICBBdWRpb1NvdXJjZVByb3ZpZGVyJiBtX3Byb3ZpZGVyOwogICAgIEF1ZGlvQnVzIG1fcmVu
ZGVyQnVzOwogCiAgICAgZmxvYXQgbV9zYW1wbGVSYXRlOwogICAgIGJvb2wgbV9pc1BsYXlpbmc7
CisgICAgYm9vbCBtX3dhdlBhcnNlckF2YWlsYWJsZTsKKyAgICBib29sIG1fYXVkaW9TaW5rQXZh
aWxhYmxlOworICAgIEdzdEVsZW1lbnQqIG1fcGlwZWxpbmU7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWU5MmI1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdl
YkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0V2ViQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuaCIKKworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShHU1RSRUFNRVIpCisK
KyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIK
KyNpbmNsdWRlICJHT3duUHRyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgPGdzdC9hdWRpby9tdWx0aWNoYW5uZWwuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9w
YnV0aWxzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0V2ViQXVkaW9TcmNDbGFzcyAgIFdlYktpdFdlYkF1ZGlvU3JjQ2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlIFdlYktpdFdlYkF1ZGlvU291cmNl
UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyYyB7CisgICAgR3N0QmluIHBhcmVu
dDsKKworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0V2ViQXVkaW9TcmNDbGFzcyB7CisgICAgR3N0QmluQ2xhc3MgcGFyZW50Q2xhc3M7
Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSB7CisgICAgZ2Zsb2F0
IHNhbXBsZVJhdGU7CisgICAgQXVkaW9CdXMqIGJ1czsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
KiBwcm92aWRlcjsKKyAgICBndWludCBmcmFtZXNUb1B1bGw7CisgICAgZ3VpbnQ2NCBjdXJyZW50
QnVmZmVyT2Zmc2V0OworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBpbnRlcmxlYXZlOworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gd2F2RW5jb2RlcjsKKworICAgIEdzdFRhc2sqIHRhc2s7Cisg
ICAgR1N0YXRpY1JlY011dGV4KiBtdXRleDsKKworICAgIEdTTGlzdCogcGFkczsgLy8gTGlzdCBv
ZiBxdWV1ZSBzcmMgcGFkcy4gT25lIHF1ZXVlIGZvciBlYWNoIHBsYW5hciBhdWRpbyBjaGFubmVs
LgorICAgIEdzdFBhZCogc291cmNlUGFkOyAvLyBzcmMgcGFkIG9mIHRoZSBlbGVtZW50LCBpbnRl
cmxlYXZlZCB3YXYgZGF0YSBpcyBwdXNoZWQgdG8gaXQuCit9OworCitlbnVtIHsKKyAgICBQUk9Q
X1JBVEUgPSAxLAorICAgIFBST1BfQlVTLAorICAgIFBST1BfUFJPVklERVIsCisgICAgUFJPUF9G
UkFNRVMKK307CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdT
VF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BBRF9TUkMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHU1RfUEFEX0FMV0FZUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC13
YXYiKSk7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3dlYl9hdWRpb19zcmNf
ZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYl9hdWRpb19zcmNfZGVi
dWcKKworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZChHT2JqZWN0Kik7
CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0ZpbmFsaXplKEdPYmplY3QqKTsKK3N0YXRp
YyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3Bl
cnR5SWQsIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2b2lkIHdlYktpdFdl
YkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSos
IEdQYXJhbVNwZWMqKTsKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRp
b1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSk7CitzdGF0aWMgdm9p
ZCB3ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2ViQXVkaW9TcmMqKTsKKworc3RhdGljIEdz
dENhcHMqIGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMoZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAg
ICByZXR1cm4gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXctZmxvYXQiLCAicmF0ZSIs
IEdfVFlQRV9JTlQsIHN0YXRpY19jYXN0PGludD4oc2FtcGxlUmF0ZSksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiZW5kaWFubmVzcyIsIEdfVFlQRV9JTlQsIEdfQllURV9PUkRF
UiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAz
MiwgTlVMTCk7Cit9CisKK3N0YXRpYyBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiB3ZWJLaXRXZWJB
dWRpb0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihpbnQgY2hhbm5lbEluZGV4KQoreworICAgIEdz
dEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc2l0aW9uOworCisgICAgc3dpdGNoIChjaGFubmVsSW5k
ZXgpIHsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsTGVmdDoKKyAgICAgICAgcG9zaXRpb24g
PSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZUOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NU
X0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQ7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxDZW50ZXI6CisgICAgICAgIC8vIENlbnRlciBhbmQgbW9u
byBhcmUgdGhlIHNhbWUuCisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9T
SVRJT05fRlJPTlRfTU9OTzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hh
bm5lbExGRToKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9M
RkU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxTdXJyb3VuZExl
ZnQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9M
RUZUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsU3Vycm91bmRS
aWdodDoKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFS
X1JJR0hUOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9OworCisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCisjZGVmaW5lIHdlYmtpdF93ZWJfYXVk
aW9fc3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RF
KFdlYktpdFdlYkF1ZGlvU3JjLCB3ZWJraXRfd2ViX2F1ZGlvX3NyYywgR1NUX1RZUEVfQklOLCBH
U1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1ZywgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXR3ZWJhdWRpb3NyYyIsIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndl
YmF1ZGlvc3JjIGVsZW1lbnQiKSk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3Jj
X2NsYXNzX2luaXQoV2ViS2l0V2ViQXVkaW9TcmNDbGFzcyogd2ViS2l0V2ViQXVkaW9TcmNDbGFz
cykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
S2l0V2ViQXVkaW9TcmNDbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBlbGVtZW50Q2xhc3Mg
PSBHU1RfRUxFTUVOVF9DTEFTUyh3ZWJLaXRXZWJBdWRpb1NyY0NsYXNzKTsKKworICAgIGdzdF9l
bGVtZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3Bh
ZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0
X2RldGFpbHNfc2ltcGxlKGVsZW1lbnRDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIldlYktpdCBXZWJBdWRpbyBzb3VyY2UgZWxlbWVudCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3VyY2UiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFuZGxlcyBXZWJBdWRpbyBkYXRhIGZyb20g
V2ViQ29yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaGls
aXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPiIpOworCisgICAgb2JqZWN0Q2xhc3Mt
PmNvbnN0cnVjdGVkID0gd2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZDsKKyAgICBvYmplY3RD
bGFzcy0+ZmluYWxpemUgPSB3ZWJLaXRXZWJBdWRpb1NyY0ZpbmFsaXplOworICAgIGVsZW1lbnRD
bGFzcy0+Y2hhbmdlX3N0YXRlID0gd2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZTsKKworICAg
IG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3BlcnR5
OworICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJLaXRXZWJBdWRpb1NyY0dldFBy
b3BlcnR5OworCisgICAgR1BhcmFtRmxhZ3MgZmxhZ3MgPSBzdGF0aWNfY2FzdDxHUGFyYW1GbGFn
cz4oR19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFSQU1fUkVBRFdSSVRFKTsKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9SQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KCJyYXRlIiwgInJhdGUiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGUgcmF0
ZSIsIEdfTUlORE9VQkxFLCBHX01BWERPVUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0NDEwMC4wLCBmbGFncykpOworCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfQlVTLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3BvaW50ZXIoImJ1cyIsICJidXMiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1cyIsIGZs
YWdzKSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9QUk9WSURFUiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJw
cm92aWRlciIsICJwcm92aWRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiUHJvdmlkZXIiLCBmbGFncykpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfRlJBTUVTLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoImZyYW1lcyIsICJmcmFtZXMiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk51bWJlciBv
ZiBhdWRpbyBmcmFtZXMgdG8gcHVsbCBhdCBlYWNoIGl0ZXJhdGlvbiIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ4LCAx
MjgsIGZsYWdzKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViS2l0V2ViQXVk
aW9TcmNDbGFzcywgc2l6ZW9mKFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSkpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX2F1ZGlvX3NyY19pbml0KFdlYktpdFdlYkF1ZGlvU3JjKiBz
cmMpCit7CisgICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gR19UWVBFX0lO
U1RBTkNFX0dFVF9QUklWQVRFKHNyYywgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0
V2ViQXVkaW9Tb3VyY2VQcml2YXRlKTsKKyAgICBzcmMtPnByaXYgPSBwcml2OworICAgIG5ldyAo
cHJpdikgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKCk7CisKKyAgICBHc3RQYWRUZW1wbGF0
ZSogcGFkVGVtcGxhdGUgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRl
KTsKKyAgICBwcml2LT5zb3VyY2VQYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJv
bV90ZW1wbGF0ZSgic3JjIiwgcGFkVGVtcGxhdGUpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQo
R1NUX0VMRU1FTlQoc3JjKSwgcHJpdi0+c291cmNlUGFkKTsKKworICAgIHByaXYtPnByb3ZpZGVy
ID0gMDsKKyAgICBwcml2LT5idXMgPSAwOworICAgIHByaXYtPmN1cnJlbnRCdWZmZXJPZmZzZXQg
PSAwOworCisgICAgcHJpdi0+bXV0ZXggPSBnX25ldyhHU3RhdGljUmVjTXV0ZXgsIDEpOworICAg
IGdfc3RhdGljX3JlY19tdXRleF9pbml0KHByaXYtPm11dGV4KTsKKworICAgIHByaXYtPnRhc2sg
PSBnc3RfdGFza19jcmVhdGUocmVpbnRlcnByZXRfY2FzdDxHc3RUYXNrRnVuY3Rpb24+KHdlYktp
dFdlYkF1ZGlvU3JjTG9vcCksIHNyYyk7CisgICAgZ3N0X3Rhc2tfc2V0X2xvY2socHJpdi0+dGFz
aywgcHJpdi0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0
cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0g
V0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJjZVBy
aXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBB
U1NFUlQocHJpdi0+cHJvdmlkZXIpOworICAgIEFTU0VSVChwcml2LT5zYW1wbGVSYXRlKTsKKwor
ICAgIHByaXYtPmludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImludGVybGVh
dmUiLCAwKTsKKyAgICBwcml2LT53YXZFbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJ3YXZlbmMiLCAwKTsKKworICAgIGlmICghcHJpdi0+aW50ZXJsZWF2ZSkgeworICAgICAgICBH
U1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBjcmVhdGUgaW50ZXJsZWF2ZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwcml2LT53YXZFbmNvZGVyKSB7CisgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSB3YXZlbmMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihzcmMp
LCBwcml2LT5pbnRlcmxlYXZlLmdldCgpLCBwcml2LT53YXZFbmNvZGVyLmdldCgpLCBOVUxMKTsK
KyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChwcml2LT5pbnRlcmxlYXZlLmdldCgpLCAi
c3JjIiwgcHJpdi0+d2F2RW5jb2Rlci5nZXQoKSwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tf
Tk9USElORyk7CisKKyAgICAvLyBGb3IgZWFjaCBjaGFubmVsIG9mIHRoZSBidXMgY3JlYXRlIGEg
bmV3IHVwc3RyZWFtIGJyYW5jaCBmb3IgaW50ZXJsZWF2ZSwgbGlrZToKKyAgICAvLyBxdWV1ZSAh
IGNhcHNmaWx0ZXIgISBhdWRpb2NvbnZlcnQuIHdoaWNoIGlzIHBsdWdnZWQgdG8gYSBuZXcgaW50
ZXJsZWF2ZSByZXF1ZXN0IHNyY3BhZC4KKyAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJbmRleCA9
IDA7IGNoYW5uZWxJbmRleCA8IHByaXYtPmJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOyBjaGFubmVs
SW5kZXgrKykgeworICAgICAgICBHc3RFbGVtZW50KiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3Rv
cnlfbWFrZSgicXVldWUiLCAwKTsKKyAgICAgICAgR3N0RWxlbWVudCogY2Fwc2ZpbHRlciA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIDApOworICAgICAgICBHc3RFbGVt
ZW50KiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVy
dCIsIDApOworCisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbW9ub0NhcHMoZ2V0R1N0cmVhbWVy
TW9ub0F1ZGlvQ2Fwcyhwcml2LT5zYW1wbGVSYXRlKSk7CisgICAgICAgIGdfb2JqZWN0X3NldChj
YXBzZmlsdGVyLCAiY2FwcyIsIG1vbm9DYXBzLmdldCgpLCBOVUxMKTsKKworICAgICAgICAvLyBD
b25maWd1cmUgdGhlIHF1ZXVlIGZvciBtaW5pbWFsIGxhdGVuY3kuCisgICAgICAgIGdfb2JqZWN0
X3NldChxdWV1ZSwgIm1heC1zaXplLWJ1ZmZlcnMiLCBzdGF0aWNfY2FzdDxndWludD4oMSksIE5V
TEwpOworCisgICAgICAgIEdzdFBhZCogcGFkID0gZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQo
cXVldWUsICJzaW5rIik7CisgICAgICAgIHByaXYtPnBhZHMgPSBnX3NsaXN0X3ByZXBlbmQocHJp
di0+cGFkcywgcGFkKTsKKworICAgICAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3JjKSwg
cXVldWUsIGNhcHNmaWx0ZXIsIGF1ZGlvY29udmVydCwgTlVMTCk7CisgICAgICAgIGdzdF9lbGVt
ZW50X2xpbmtfcGFkc19mdWxsKHF1ZXVlLCAic3JjIiwgY2Fwc2ZpbHRlciwgInNpbmsiLCBHU1Rf
UEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19m
dWxsKGNhcHNmaWx0ZXIsICJzcmMiLCBhdWRpb2NvbnZlcnQsICJzaW5rIiwgR1NUX1BBRF9MSU5L
X0NIRUNLX05PVEhJTkcpOworCisgICAgICAgIEdSZWZQdHI8R3N0UGFkPiBzcmNQYWQoZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXVkaW9jb252ZXJ0LCAic3JjIikpOworICAgICAgICBHUmVm
UHRyPEdzdFBhZD4gc2lua1BhZChnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQocHJpdi0+aW50
ZXJsZWF2ZS5nZXQoKSwgInNpbmslZCIpKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHNyY1BhZC5n
ZXQoKSwgc2lua1BhZC5nZXQoKSk7CisgICAgfQorICAgIHByaXYtPnBhZHMgPSBnX3NsaXN0X3Jl
dmVyc2UocHJpdi0+cGFkcyk7CisKKyAgICAvLyB3YXZlbmMncyBzcmMgcGFkIGlzIHRoZSBvbmx5
IHZpc2libGUgcGFkIG9mIG91ciBlbGVtZW50LgorICAgIEdSZWZQdHI8R3N0UGFkPiB0YXJnZXRQ
YWQoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJpdi0+d2F2RW5jb2Rlci5nZXQoKSwgInNy
YyIpKTsKKyAgICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoR1NUX0dIT1NUX1BBRChwcml2LT5z
b3VyY2VQYWQpLCB0YXJnZXRQYWQuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJB
dWRpb1NyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1Ny
Yyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRp
b1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBnc3Rfb2JqZWN0X3VucmVm
KHByaXYtPnRhc2spOworICAgIGdfc3RhdGljX3JlY19tdXRleF9mcmVlKHByaXYtPm11dGV4KTsK
KworICAgIGdfc2xpc3RfZnJlZV9mdWxsKHByaXYtPnBhZHMsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rl
c3Ryb3lOb3RpZnk+KGdzdF9vYmplY3RfdW5yZWYpKTsKKworICAgIHByaXYtPn5XZWJLaXRXZWJB
dWRpb1NvdXJjZVByaXZhdGUoKTsKKyAgICBHU1RfQ0FMTF9QQVJFTlQoR19PQkpFQ1RfQ0xBU1Ms
IGZpbmFsaXplLCAoKEdPYmplY3QqICkoc3JjKSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRX
ZWJBdWRpb1NyY1NldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0V2Vi
QXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVjdCk7CisgICAgV2ViS2l0
V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgc3dpdGNoIChw
cm9wZXJ0eUlkKSB7CisgICAgY2FzZSBQUk9QX1JBVEU6CisgICAgICAgIHByaXYtPnNhbXBsZVJh
dGUgPSBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9CVVM6CisgICAgICAgIHByaXYtPmJ1cyA9IHN0YXRpY19jYXN0PEF1ZGlvQnVzKj4oZ192
YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
UFJPVklERVI6CisgICAgICAgIHByaXYtPnByb3ZpZGVyID0gc3RhdGljX2Nhc3Q8QXVkaW9Tb3Vy
Y2VQcm92aWRlcio+KGdfdmFsdWVfZ2V0X3BvaW50ZXIodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0ZSQU1FUzoKKyAgICAgICAgcHJpdi0+ZnJhbWVzVG9QdWxsID0gZ192
YWx1ZV9nZXRfdWludCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQs
IHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRX
ZWJBdWRpb1NyY0dldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJZCwg
R1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgV2ViS2l0V2ViQXVkaW9T
cmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVjdCk7CisgICAgV2ViS2l0V2ViQXVk
aW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wZXJ0
eUlkKSB7CisgICAgY2FzZSBQUk9QX1JBVEU6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5zYW1wbGVSYXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JV
UzoKKyAgICAgICAgZ192YWx1ZV9zZXRfcG9pbnRlcih2YWx1ZSwgcHJpdi0+YnVzKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1BST1ZJREVSOgorICAgICAgICBnX3ZhbHVlX3NldF9w
b2ludGVyKHZhbHVlLCBwcml2LT5wcm92aWRlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9GUkFNRVM6CisgICAgICAgIGdfdmFsdWVfc2V0X3VpbnQodmFsdWUsIHByaXYtPmZyYW1l
c1RvUHVsbCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SWQsIHBzcGVjKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0xv
b3AoV2ViS2l0V2ViQXVkaW9TcmMqIHNyYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJjZVBy
aXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBB
U1NFUlQocHJpdi0+cHJvdmlkZXIpOworICAgIGlmICghcHJpdi0+cHJvdmlkZXIgfHwgIXByaXYt
PmJ1cykKKyAgICAgICAgcmV0dXJuOworCisgICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9IHByaXYt
PmZyYW1lc1RvUHVsbCAqIHNpemVvZihmbG9hdCk7CisgICAgcHJpdi0+cHJvdmlkZXItPnByb3Zp
ZGVJbnB1dChwcml2LT5idXMsIHByaXYtPmZyYW1lc1RvUHVsbCk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBnX3NsaXN0X2xlbmd0aChwcml2LT5wYWRzKTsgaW5kZXgr
KykgeworICAgICAgICBHc3RQYWQqIHBhZCA9IHN0YXRpY19jYXN0PEdzdFBhZCo+KGdfc2xpc3Rf
bnRoX2RhdGEocHJpdi0+cGFkcywgaW5kZXgpKTsKKworICAgICAgICBHc3RCdWZmZXIqIGJ1ZmZl
ciA9IGdzdF9idWZmZXJfdHJ5X25ld19hbmRfYWxsb2MoYnVmZmVyU2l6ZSk7CisgICAgICAgIEFT
U0VSVChidWZmZXIpOworICAgICAgICBtZW1jcHkoR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlciksIHBy
aXYtPmJ1cy0+Y2hhbm5lbChpbmRleCktPmRhdGEoKSwgYnVmZmVyU2l6ZSk7CisgICAgICAgIEdT
VF9CVUZGRVJfT0ZGU0VUKGJ1ZmZlcikgPSBwcml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0OworICAg
ICAgICBHU1RfQlVGRkVSX09GRlNFVF9FTkQoYnVmZmVyKSA9IHByaXYtPmN1cnJlbnRCdWZmZXJP
ZmZzZXQgKyBwcml2LT5mcmFtZXNUb1B1bGw7CisKKyAgICAgICAgR3N0Q2FwcyogbW9ub0NhcHMg
PSBnZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBzKHByaXYtPnNhbXBsZVJhdGUpOworICAgICAgICBH
c3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobW9ub0NhcHMs
IDApOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJjaGFubmVscyIsIEdf
VFlQRV9JTlQsIDEsIE5VTEwpOworICAgICAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBjaGFu
bmVsUG9zaXRpb24gPSB3ZWJLaXRXZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihpbmRl
eCk7CisgICAgICAgIGdzdF9hdWRpb19zZXRfY2hhbm5lbF9wb3NpdGlvbnMoc3RydWN0dXJlLCAm
Y2hhbm5lbFBvc2l0aW9uKTsKKyAgICAgICAgZ3N0X2J1ZmZlcl9zZXRfY2FwcyhidWZmZXIsIG1v
bm9DYXBzKTsKKworICAgICAgICBnc3RfcGFkX2NoYWluKHBhZCwgYnVmZmVyKTsKKyAgICAgICAg
Z3N0X2NhcHNfdW5yZWYobW9ub0NhcHMpOworICAgIH0KKworICAgIHByaXYtPmN1cnJlbnRCdWZm
ZXJPZmZzZXQgKz0gcHJpdi0+ZnJhbWVzVG9QdWxsOworfQorCitzdGF0aWMgR3N0U3RhdGVDaGFu
Z2VSZXR1cm4gd2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiBlbGVtZW50
LCBHc3RTdGF0ZUNoYW5nZSB0cmFuc2l0aW9uKQoreworICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJu
IHJldHVyblZhbHVlID0gR1NUX1NUQVRFX0NIQU5HRV9TVUNDRVNTOworICAgIFdlYktpdFdlYkF1
ZGlvU3JjKiBzcmMgPSBXRUJLSVRfV0VCX0FVRElPX1NSQyhlbGVtZW50KTsKKworICAgIHN3aXRj
aCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9OVUxMX1RPX1JFQURZ
OgorICAgICAgICBpZiAoIXNyYy0+cHJpdi0+aW50ZXJsZWF2ZSkgeworICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQsIGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2Fn
ZV9uZXcoZWxlbWVudCwgImludGVybGVhdmUiKSk7CisgICAgICAgICAgICBHU1RfRUxFTUVOVF9F
UlJPUihzcmMsIENPUkUsIE1JU1NJTkdfUExVR0lOLCAoMCksICgibm8gaW50ZXJsZWF2ZSIpKTsK
KyAgICAgICAgICAgIHJldHVybiBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCFzcmMtPnByaXYtPndhdkVuY29kZXIpIHsKKyAgICAgICAgICAgIGdzdF9l
bGVtZW50X3Bvc3RfbWVzc2FnZShlbGVtZW50LCBnc3RfbWlzc2luZ19lbGVtZW50X21lc3NhZ2Vf
bmV3KGVsZW1lbnQsICJ3YXZlbmMiKSk7CisgICAgICAgICAgICBHU1RfRUxFTUVOVF9FUlJPUihz
cmMsIENPUkUsIE1JU1NJTkdfUExVR0lOLCAoMCksICgibm8gd2F2ZW5jIikpOworICAgICAgICAg
ICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm5W
YWx1ZSA9IEdTVF9FTEVNRU5UX0NMQVNTKHBhcmVudF9jbGFzcyktPmNoYW5nZV9zdGF0ZShlbGVt
ZW50LCB0cmFuc2l0aW9uKTsKKyAgICBpZiAoVU5MSUtFTFkocmV0dXJuVmFsdWUgPT0gR1NUX1NU
QVRFX0NIQU5HRV9GQUlMVVJFKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlN0
YXRlIGNoYW5nZSBmYWlsZWQiKTsKKyAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOworICAgIH0K
KworICAgIHN3aXRjaCAodHJhbnNpdGlvbikgeworICAgIGNhc2UgR1NUX1NUQVRFX0NIQU5HRV9S
RUFEWV9UT19QQVVTRUQ6CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiUkVBRFktPlBB
VVNFRCIpOworICAgICAgICBpZiAoIWdzdF90YXNrX3N0YXJ0KHNyYy0+cHJpdi0+dGFzaykpCisg
ICAgICAgICAgICByZXR1cm5WYWx1ZSA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1BBVVNFRF9UT19SRUFEWToKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJQQVVTRUQtPlJFQURZIik7CisgICAgICAgIGlm
ICghZ3N0X3Rhc2tfam9pbihzcmMtPnByaXYtPnRhc2spKQorICAgICAgICAgICAgcmV0dXJuVmFs
dWUgPSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByZXR1cm5WYWx1ZTsKK30K
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmU5MzFhMGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aApAQCAtMCwwICsxLDMzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaWZuZGVmIFdlYktpdFdlYkF1ZGlv
U291cmNlR1N0cmVhbWVyX2gKKyNkZWZpbmUgV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXJf
aAorI2lmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisKKyNkZWZpbmUg
V0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQyAod2Via2l0X3dlYl9hdWRpb19zcmNfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX1dFQl9BVURJT19TUkMob2JqKSAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9BVURJT19TUkMsIFdlYktpdFdlYkF1ZGlv
U3JjKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU3JjICAgICAgICBXZWJLaXRX
ZWJBdWRpb1NyYzsKKworR1R5cGUgd2Via2l0X3dlYl9hdWRpb19zcmNfZ2V0X3R5cGUoKTsKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCisjZW5kaWYKLS0gCjEuNy43LjI=
</data>
<flag name="review"
          id="113946"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116095</attachid>
            <date>2011-11-21 08:38:54 -0800</date>
            <delta_ts>2011-11-23 03:54:49 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>30131</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBhNzFiZjcyZjg0NDgzNzRkYjIxNmVhODEzMGU2YzdiMzgwOTZiNGNlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1
NSArKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAg
IHwgICAgMiArCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
Y3BwICB8ICAgODggKysrKystCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAgICAgfCAgMzk1ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgMzMgKysKIC4uLi9n
cmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgICAgICAgIHwgICAxMyArCiAu
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaCB8ICAgIDQg
KwogOCBmaWxlcyBjaGFuZ2VkLCA1OTcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbnMoLSkKIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
V2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmgKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU0YTE3Yy4uM2MzM2NjZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDU4IEBACisyMDExLTEwLTI3ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRA
aWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBXZWJBdWRpbyBBdWRpb0Rlc3RpbmF0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTgz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBH
U3RyZWFtZXIgc291cmNlIGVsZW1lbnQgcHVsbGluZyBkYXRhIGZyb20gdGhlIEF1ZGlvQnVzIGFu
ZAorICAgICAgICBvdXRwdXRpbmcgYXVkaW8gaW50ZXJsZWF2ZWQgR3N0QnVmZmVycyBzdWl0YWJs
ZSBmb3IgcGxheWJhY2suCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOiBBZGRlZCB0
aGUgbmV3IEdTdHJlYW1lciBXZWJBdWRpbyBlbGVtZW50CisgICAgICAgIHNvdXJjZSBmaWxlcyB0
byB0aGUgYnVpbGQuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVz
dGluYXRpb25HU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b25HU3RyZWFtZXJXYXZw
YXJzZVBhZEFkZGVkQ2FsbGJhY2spOiBGdW5jdGlvbiBjYWxsZWQKKyAgICAgICAgd2hlbiB0aGUg
cGxheWJhY2sgcGlwZWxpbmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCB0aGUgYXVkaW8gc291cmNlCisg
ICAgICAgIGludG8gYSBXQVYgc3RyZWFtLgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5h
dGlvbkdTdHJlYW1lcjo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIENvbmZp
Z3VyZSB0aGUgaW5pdGlhbCBwbGF5YmFjayBwaXBlbGluZSB1cCB0byB0aGUgV0FWIHBhcnNlci4g
VGhlCisgICAgICAgIGF1ZGlvIHNpbmsgaXMgYWRkZWQgb25seSBhZnRlciB0aGUgV0FWIHBhcnNl
ciB3YXMgY29uZmlndXJlZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3Ry
ZWFtZXI6On5BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgUmVzZXQgdGhlIHBs
YXliYWNrIHBpcGVsaW5lIGFuZCBkZWxldGUgaXQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rl
c3RpbmF0aW9uR1N0cmVhbWVyOjpmaW5pc2hCdWlsZGluZ1BpcGVsaW5lQWZ0ZXJXYXZQYXJzZXJQ
YWRSZWFkeSk6CisgICAgICAgIE1ldGhvZCB0byBhZGQgdGhlIGF1ZGlvIHNpbmsgdG8gdGhlIHBp
cGVsaW5lIGFuZCBsaW5rIGl0IHRvIHRoZQorICAgICAgICBXQVYgcGFyc2VyLgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6c3RhcnQpOiBTZXQgcGlwZWxpbmUg
dG8KKyAgICAgICAgUExBWUlORywgYXQgdGhlIGZpcnN0IHJ1biBpdCB3aWxsIHRyaWdnZXIgdGhl
IFdBViBwYXJzZXIgYW5kIGhlbmNlCisgICAgICAgIHRoZSBhdWRpby1zaW5rIHBsdWdnaW5nLgor
ICAgICAgICAoV2ViQ29yZTo6QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6c3RvcCk6IFBhdXNl
IHRoZSBwaXBlbGluZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9E
ZXN0aW5hdGlvbkdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoZ2V0
R1N0cmVhbWVyTW9ub0F1ZGlvQ2Fwcyk6IFV0aWxpdHkgZnVuY3Rpb24gdG8gZ2VuZXJhdGUKKyAg
ICAgICAgR1N0cmVhbWVyIGNhcHMgcmVwcmVzZW50aW5nIGEgc2luZ2xlIGF1ZGlvIGNoYW5uZWwg
Zm9yIGEgZ2l2ZW4KKyAgICAgICAgc2FtcGxlIHJhdGUuCisgICAgICAgICh3ZWJLaXRXZWJBdWRp
b0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbik6IFV0aWxpdHkgZnVuY3Rpb24gdG8KKyAgICAgICAg
Y29udmVydCBBdWRpb0J1cyBjaGFubmVsIHJlcHJlc2VudGF0aW9ucyB0byBHU3RyZWFtZXIgcG9z
aXRpb25hbAorICAgICAgICBhdWRpbyBjaGFubmVsIHZhbHVlcy4KKyAgICAgICAgKHdlYmtpdF93
ZWJfYXVkaW9fc3JjX2NsYXNzX2luaXQpOiBHT2JqZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlCisg
ICAgICAgIEdTdHJlYW1lciBzb3VyY2UgZWxlbWVudC4KKyAgICAgICAgKHdlYmtpdF93ZWJfYXVk
aW9fc3JjX2luaXQpOiBJbml0aWFsaXphdGlvbiBvZiB0aGUgcHJpdmF0ZSBkYXRhIG9mCisgICAg
ICAgIHRoZSBlbGVtZW50LgorICAgICAgICAod2ViS2l0V2ViQXVkaW9Tb3VyY2VDb25zdHJ1Y3Rl
ZCk6IENvbmZpZ3VyZSB0aGUgR3N0QmluIGVsZW1lbnRzCisgICAgICAgIGRlcGVuZGluZyBvbiB0
aGUgQXVkaW9CdXMgbGF5b3V0LgorICAgICAgICAod2ViS2l0V2ViQXVkaW9Tb3VyY2VGaW5hbGl6
ZSk6IENsZWFuIHVwIHRoZSBHc3RCaW4gYW5kIGZyZWUgcHJpdmF0ZQorICAgICAgICBkYXRhIG9m
IHRoZSBlbGVtZW50LgorICAgICAgICAod2ViS2l0V2ViQXVkaW9Tb3VyY2VTZXRQcm9wZXJ0eSk6
IEdPYmplY3QgcHJvcGVydHkgc2V0dGVyLgorICAgICAgICAod2ViS2l0V2ViQXVkaW9Tb3VyY2VH
ZXRQcm9wZXJ0eSk6IEdPYmplY3QgcHJvcGVydHkgZ2V0dGVyLgorICAgICAgICAod2ViS2l0V2Vi
QXVkaW9Tb3VyY2VMb29wKTogR3N0VGFzayB1c2VkIHRvIHB1bGwgZGF0YSBmcm9tIHRoZQorICAg
ICAgICBBdWRpb0J1cyBhbmQgcHVzaCBpdCBhcyBHc3RCdWZmZXJzIHRvIHRoZSBzcmMgcGFkIG9m
IHRoZSBlbGVtZW50LgorICAgICAgICAod2ViS2l0V2ViQXVkaW9Tb3VyY2VDaGFuZ2VTdGF0ZSk6
IFN0YXJ0IG9yIHN0b3AgdGhlIGFib3ZlIEdzdFRhc2sKKyAgICAgICAgZGVwZW5kaW5nIG9uIHRo
ZSBhc2tlZCBzdGF0ZSB0cmFuc2l0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXVEY6OkdzdFRhc2spOiBHc3RUYXNrIHN1cHBvcnQgaW4gR1JlZlB0ci4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oOgorCiAyMDExLTEx
LTIwICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Q2hyb21pdW1dIFJlbW92ZSBvbGQgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoKSBhbmQgZmFt
aWx5Rm9yQ2hhcnMoKSBBUElzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDE4
OTg1Ny4uNWNiYTM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00ODE0LDYg
KzQ4MTQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFt
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmls
ZVJlYWRlckdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3Bw
CiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNB
dWRpb0J1ZmZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3Bw
CmluZGV4IDk0M2Q4NGEuLjkzNzIwZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lci5jcHAKQEAgLTI1LDkgKzI1LDE3IEBACiAjaW5jbHVkZSAiQXVkaW9DaGFubmVsLmgi
CiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIK
KyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3Bi
dXRpbHMvcGJ1dGlscy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFNpemUgb2YgdGhl
IEF1ZGlvQnVzIGZvciBwbGF5YmFjay4gVGhlIHdlYmtpdHdlYmF1ZGlvc3JjIGVsZW1lbnQKKy8v
IG5lZWRzIHRvIGhhbmRsZSB0aGlzIG51bWJlciBvZiBmcmFtZXMgcGVyIGN5Y2xlIGFzIHdlbGwu
Citjb25zdCB1bnNpZ25lZCBmcmFtZXNUb1B1bGwgPSAxMjg7CisKIFBhc3NPd25QdHI8QXVkaW9E
ZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvU291cmNlUHJvdmlkZXIm
IHByb3ZpZGVyLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcg
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcihwcm92aWRlciwgc2FtcGxlUmF0ZSkpOwpAQCAtMzgs
MjUgKzQ2LDEwMyBAQCBmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUo
KQogICAgIHJldHVybiA0NDEwMDsKIH0KIAorc3RhdGljIHZvaWQgb25HU3RyZWFtZXJXYXZwYXJz
ZVBhZEFkZGVkQ2FsbGJhY2soR3N0RWxlbWVudCogZWxlbWVudCwgR3N0UGFkKiBwYWQsIEF1ZGlv
RGVzdGluYXRpb25HU3RyZWFtZXIqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3RpbmF0aW9uLT5m
aW5pc2hCdWlsZGluZ1BpcGVsaW5lQWZ0ZXJXYXZQYXJzZXJQYWRSZWFkeShwYWQpOworfQorCiBB
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKEF1ZGlv
U291cmNlUHJvdmlkZXImIHByb3ZpZGVyLCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogbV9wcm92
aWRlcihwcm92aWRlcikKLSAgICAsIG1fcmVuZGVyQnVzKDIsIDEyOCwgdHJ1ZSkKKyAgICAsIG1f
cmVuZGVyQnVzKDIsIGZyYW1lc1RvUHVsbCwgdHJ1ZSkKICAgICAsIG1fc2FtcGxlUmF0ZShzYW1w
bGVSYXRlKQogICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCiB7CisgICAgc3RhdGljIGJvb2wgZ3N0
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWdzdEluaXRpYWxpemVkKQorICAgICAgICBn
c3RJbml0aWFsaXplZCA9IGdzdF9pbml0X2NoZWNrKDAsIDAsIDApOworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoZ3N0SW5pdGlhbGl6ZWQsICJHU3RyZWFtZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVk
Iik7CisKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldygicGxheSIpOworCisgICAg
R3N0RWxlbWVudCogd2Via2l0QXVkaW9TcmMgPSByZWludGVycHJldF9jYXN0PEdzdEVsZW1lbnQq
PihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmF0ZSIsIHNhbXBsZVJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1cyIsICZtX3Jl
bmRlckJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXIiLCAmbV9wcm92aWRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZnJhbWVzIiwgZnJhbWVzVG9QdWxsLCBOVUxMKSk7CisKKyAgICBH
c3RFbGVtZW50KiB3YXZQYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdnBhcnNl
IiwgMCk7CisKKyAgICBtX3dhdlBhcnNlckF2YWlsYWJsZSA9IHdhdlBhcnNlcjsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fd2F2UGFyc2VyQXZhaWxhYmxlLCAiRmFpbGVkIHRvIGNyZWF0ZSBH
U3RyZWFtZXIgd2F2cGFyc2UgZWxlbWVudCIpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2F2UGFyc2VyLCAi
cGFkLWFkZGVkIiwgR19DQUxMQkFDSyhvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVsaW5lKSwgd2Vi
a2l0QXVkaW9TcmMsIHdhdlBhcnNlciwgTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRz
X2Z1bGwod2Via2l0QXVkaW9TcmMsICJzcmMiLCB3YXZQYXJzZXIsICJzaW5rIiwgR1NUX1BBRF9M
SU5LX0NIRUNLX05PVEhJTkcpOwogfQogCiBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+QXVk
aW9EZXN0aW5hdGlvbkdTdHJlYW1lcigpCiB7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
cGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fcGlwZWxp
bmUpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OmZpbmlzaEJ1aWxkaW5n
UGlwZWxpbmVBZnRlcldhdlBhcnNlclBhZFJlYWR5KEdzdFBhZCogcGFkKQoreworICAgIEFTU0VS
VChtX3dhdlBhcnNlckF2YWlsYWJsZSk7CisKKyAgICBHc3RFbGVtZW50KiBhdWRpb3NpbmsgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3NpbmsiLCAwKTsKKyAgICBtX2F1ZGlv
U2lua0F2YWlsYWJsZSA9IGF1ZGlvc2luazsKKworICAgIGlmIChhdWRpb3NpbmspIHsKKyAgICAg
ICAgLy8gQXV0b2F1ZGlvc2luayBkb2VzIHRoZSByZWFsIHNpbmsgZGV0ZWN0aW9uIGluIHRoZQor
ICAgICAgICAvLyBHU1RfU1RBVEVfTlVMTC0+UkVBRFkgdHJhbnNpdGlvbiBzbyBpdCdzIGJlc3Qg
dG8gcm9sbCBpdCB0byBSRUFEWSBhcworICAgICAgICAvLyBzb29uIGFzIHBvc3NpYmxlIHRvIGVu
c3VyZSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybQorICAgICAgICAvLyBhdWRpb3Npbmsgd2FzIGxv
YWRlZCBjb3JyZWN0bHkuCisgICAgICAgIEdzdFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlQ2hhbmdl
UmV0dXJuID0gZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGF1ZGlvc2luaywgR1NUX1NUQVRFX1JFQURZ
KTsKKyAgICAgICAgaWYgKHN0YXRlQ2hhbmdlUmV0dXJuID09IEdTVF9TVEFURV9DSEFOR0VfRkFJ
TFVSRSkgeworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGF1ZGlvc2luaywgR1NU
X1NUQVRFX05VTEwpOworICAgICAgICAgICAgbV9hdWRpb1NpbmtBdmFpbGFibGUgPSBmYWxzZTsK
KyAgICAgICAgICAgIGdzdF9vYmplY3RfdW5yZWYoYXVkaW9zaW5rKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVF9XSVRIX01FU1NBR0UobV9hdWRp
b1NpbmtBdmFpbGFibGUsICJGYWlsZWQgdG8gY3JlYXRlIEdTdHJlYW1lciBhdXRvYXVkaW9zaW5r
IGVsZW1lbnQiKTsKKyAgICBpZiAoIW1fYXVkaW9TaW5rQXZhaWxhYmxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBHc3RFbGVtZW50KiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoImF1ZGlvY29udmVydCIsIDApOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTiht
X3BpcGVsaW5lKSwgYXVkaW9jb252ZXJ0LCBhdWRpb3NpbmssIE5VTEwpOworCisgICAgLy8gTGlu
ayB3YXZwYXJzZSdzIHNyYyBwYWQgdG8gYXVkaW9jb252ZXJ0IHNpbmsgcGFkLgorICAgIEdSZWZQ
dHI8R3N0UGFkPiBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KGF1ZGlvY29udmVydCwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1BhZC5n
ZXQoKSk7CisKKyAgICAvLyBMaW5rIGF1ZGlvY29udmVydCB0byBhdWRpb3NpbmsgYW5kIHJvbGwg
c3RhdGVzLgorICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKGF1ZGlvY29udmVydCwgInNy
YyIsIGF1ZGlvc2luaywgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisgICAg
Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChhdWRpb2NvbnZlcnQpOworICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoYXVkaW9zaW5rKTsKIH0KIAogdm9pZCBB
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpzdGFydCgpCiB7CisgICAgQVNTRVJUKG1fd2F2UGFy
c2VyQXZhaWxhYmxlKTsKKyAgICBpZiAoIW1fd2F2UGFyc2VyQXZhaWxhYmxlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NUQVRF
X1BMQVlJTkcpOwogICAgIG1faXNQbGF5aW5nID0gdHJ1ZTsKIH0KIAogdm9pZCBBdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyOjpzdG9wKCkKIHsKKyAgICBBU1NFUlQobV93YXZQYXJzZXJBdmFpbGFi
bGUgJiYgbV9hdWRpb1NpbmtBdmFpbGFibGUpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFi
bGUgfHwgbV9hdWRpb1NpbmtBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLCBHU1RfU1RBVEVfUEFVU0VEKTsKICAgICBtX2lz
UGxheWluZyA9IGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
aAppbmRleCA3Y2YzNzk4Li40ZThjZGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyLmgKQEAgLTIyLDYgKzIyLDkgQEAKICNpbmNsdWRlICJBdWRpb0J1cy5oIgogI2luY2x1
ZGUgIkF1ZGlvRGVzdGluYXRpb24uaCIKIAordHlwZWRlZiBzdHJ1Y3QgX0dzdEVsZW1lbnQgR3N0
RWxlbWVudDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RQYWQgR3N0UGFkOworCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIgOiBwdWJsaWMgQXVkaW9E
ZXN0aW5hdGlvbiB7CkBAIC0zNiwxMiArMzksMTcgQEAgcHVibGljOgogICAgIGZsb2F0IHNhbXBs
ZVJhdGUoKSBjb25zdCB7IHJldHVybiBtX3NhbXBsZVJhdGU7IH0KICAgICBBdWRpb1NvdXJjZVBy
b3ZpZGVyJiBzb3VyY2VQcm92aWRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcHJvdmlkZXI7IH0KIAor
ICAgIHZvaWQgZmluaXNoQnVpbGRpbmdQaXBlbGluZUFmdGVyV2F2UGFyc2VyUGFkUmVhZHkoR3N0
UGFkKik7CisKIHByaXZhdGU6CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciYgbV9wcm92aWRlcjsK
ICAgICBBdWRpb0J1cyBtX3JlbmRlckJ1czsKIAogICAgIGZsb2F0IG1fc2FtcGxlUmF0ZTsKICAg
ICBib29sIG1faXNQbGF5aW5nOworICAgIGJvb2wgbV93YXZQYXJzZXJBdmFpbGFibGU7CisgICAg
Ym9vbCBtX2F1ZGlvU2lua0F2YWlsYWJsZTsKKyAgICBHc3RFbGVtZW50KiBtX3BpcGVsaW5lOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRp
b1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NDlmOTdhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwz
OTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldl
YktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKSAm
JiBVU0UoR1NUUkVBTUVSKQorCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJBdWRp
b1NvdXJjZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiR093blB0ci5oIgorI2luY2x1ZGUgIkdSZWZQ
dHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvYXVkaW8vbXVsdGljaGFubmVsLmg+CisjaW5j
bHVkZSA8Z3N0L3BidXRpbHMvcGJ1dGlscy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU3JjQ2xhc3MgICBXZWJLaXRXZWJBdWRp
b1NyY0NsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSBX
ZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0V2ViQXVkaW9TcmMg
eworICAgIEdzdEJpbiBwYXJlbnQ7CisKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUq
IHByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYkF1ZGlvU3JjQ2xhc3MgeworICAgIEdzdEJp
bkNsYXNzIHBhcmVudENsYXNzOworfTsKKworc3RydWN0IF9XZWJLaXRXZWJBdWRpb1NvdXJjZVBy
aXZhdGUgeworICAgIGdmbG9hdCBzYW1wbGVSYXRlOworICAgIEF1ZGlvQnVzKiBidXM7CisgICAg
QXVkaW9Tb3VyY2VQcm92aWRlciogcHJvdmlkZXI7CisgICAgZ3VpbnQgZnJhbWVzVG9QdWxsOwor
ICAgIGd1aW50NjQgY3VycmVudEJ1ZmZlck9mZnNldDsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gaW50ZXJsZWF2ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IHdhdkVuY29kZXI7CisKKyAg
ICBHUmVmUHRyPEdzdFRhc2s+IHRhc2s7CisgICAgR1N0YXRpY1JlY011dGV4KiBtdXRleDsKKwor
ICAgIEdTTGlzdCogcGFkczsgLy8gTGlzdCBvZiBxdWV1ZSBzaW5rIHBhZHMuIE9uZSBxdWV1ZSBm
b3IgZWFjaCBwbGFuYXIgYXVkaW8gY2hhbm5lbC4KKyAgICBHc3RQYWQqIHNvdXJjZVBhZDsgLy8g
c3JjIHBhZCBvZiB0aGUgZWxlbWVudCwgaW50ZXJsZWF2ZWQgd2F2IGRhdGEgaXMgcHVzaGVkIHRv
IGl0LgorfTsKKworZW51bSB7CisgICAgUFJPUF9SQVRFID0gMSwKKyAgICBQUk9QX0JVUywKKyAg
ICBQUk9QX1BST1ZJREVSLAorICAgIFBST1BfRlJBTUVTCit9OworCitzdGF0aWMgR3N0U3RhdGlj
UGFkVGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdTVF9QQURfU1JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtd2F2IikpOworCitHU1RfREVCVUdfQ0FURUdPUllf
U1RBVElDKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnCisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1
ZGlvU3JjQ29uc3RydWN0ZWQoR09iamVjdCopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9T
cmNGaW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY1NldFBy
b3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqLCBHUGFyYW1T
cGVjKik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0dldFByb3BlcnR5KEdPYmplY3Qq
LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7CitzdGF0aWMgR3N0U3Rh
dGVDaGFuZ2VSZXR1cm4gd2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50Kiwg
R3N0U3RhdGVDaGFuZ2UpOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNMb29wKFdlYktp
dFdlYkF1ZGlvU3JjKik7CisKK3N0YXRpYyBHc3RDYXBzKiBnZXRHU3RyZWFtZXJNb25vQXVkaW9D
YXBzKGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgcmV0dXJuIGdzdF9jYXBzX25ld19zaW1wbGUo
ImF1ZGlvL3gtcmF3LWZsb2F0IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzdGF0aWNfY2FzdDxpbnQ+
KHNhbXBsZVJhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFubmVscyIs
IEdfVFlQRV9JTlQsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZGlhbm5l
c3MiLCBHX1RZUEVfSU5ULCBHX0JZVEVfT1JERVIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMzIsIE5VTEwpOworfQorCitzdGF0aWMgR3N0QXVk
aW9DaGFubmVsUG9zaXRpb24gd2ViS2l0V2ViQXVkaW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24o
aW50IGNoYW5uZWxJbmRleCkKK3sKKyAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NpdGlv
bjsKKworICAgIHN3aXRjaCAoY2hhbm5lbEluZGV4KSB7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hh
bm5lbExlZnQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05f
RlJPTlRfTEVGVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbFJp
Z2h0OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05U
X1JJR0hUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsQ2VudGVy
OgorICAgICAgICAvLyBDZW50ZXIgYW5kIG1vbm8gYXJlIHRoZSBzYW1lLgorICAgICAgICBwb3Np
dGlvbiA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX01PTk87CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxMRkU6CisgICAgICAgIHBvc2l0aW9uID0g
R1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEF1ZGlvQnVzOjpDaGFubmVsU3Vycm91bmRMZWZ0OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9B
VURJT19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBdWRpb0J1czo6Q2hhbm5lbFN1cnJvdW5kUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NU
X0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVDsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfTsKKworICAgIHJldHVybiBwb3NpdGlvbjsK
K30KKworI2RlZmluZSB3ZWJraXRfd2ViX2F1ZGlvX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2Ns
YXNzCitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRXZWJBdWRpb1NyYywgd2Via2l0X3dl
Yl9hdWRpb19zcmMsIEdTVF9UWVBFX0JJTiwgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0
X3dlYl9hdWRpb19zcmNfZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Vi
a2l0d2ViYXVkaW9zcmMiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWJhdWRpb3NyYyBlbGVtZW50IikpOworCitzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KFdlYktpdFdlYkF1ZGlvU3Jj
Q2xhc3MqIHdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmpl
Y3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MpOworICAgIEdz
dEVsZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Mod2ViS2l0V2Vi
QXVkaW9TcmNDbGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRl
KGVsZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkp
OworICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZShlbGVtZW50Q2xhc3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJLaXQgV2ViQXVk
aW8gc291cmNlIGVsZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiU291cmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkhhbmRsZXMgV2ViQXVkaW8gZGF0YSBmcm9tIFdlYkNvcmUiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4iKTsKKworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYktpdFdlYkF1ZGlv
U3JjQ29uc3RydWN0ZWQ7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2ViS2l0V2ViQXVk
aW9TcmNGaW5hbGl6ZTsKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0ZSA9IHdlYktpdFdl
YkF1ZGlvU3JjQ2hhbmdlU3RhdGU7CisKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2ViS2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3Bl
cnR5ID0gd2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eTsKKworICAgIEdQYXJhbUZsYWdzIGZs
YWdzID0gc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBH
X1BBUkFNX1JFQURXUklURSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUkFU
RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9h
dCgicmF0ZSIsICJyYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiU2FtcGxlIHJhdGUiLCBHX01JTkRPVUJMRSwgR19NQVhET1VCTEUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
NDQxMDAuMCwgZmxhZ3MpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0JV
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2lu
dGVyKCJidXMiLCAiYnVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJCdXMiLCBmbGFncykpOworCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBST1BfUFJPVklERVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfcG9pbnRlcigicHJvdmlkZXIiLCAicHJvdmlkZXIiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3Zp
ZGVyIiwgZmxhZ3MpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2Jq
ZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0ZSQU1F
UywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50
KCJmcmFtZXMiLCAiZnJhbWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJOdW1iZXIgb2YgYXVkaW8gZnJhbWVzIHRvIHB1bGwgYXQgZWFj
aCBpdGVyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR19NQVhVSU5UOCwgMTI4LCBmbGFncykpOworCisgICAgZ190eXBlX2Ns
YXNzX2FkZF9wcml2YXRlKHdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MsIHNpemVvZihXZWJLaXRXZWJB
dWRpb1NvdXJjZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9hdWRpb19z
cmNfaW5pdChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU291
cmNlUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzcmMsIFdFQktJ
VF9UWVBFX1dFQl9BVURJT19TUkMsIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSk7CisgICAg
c3JjLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFdlYkF1ZGlvU291cmNlUHJp
dmF0ZSgpOworCisgICAgR3N0UGFkVGVtcGxhdGUqIHBhZFRlbXBsYXRlID0gZ3N0X3N0YXRpY19w
YWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSk7CisgICAgcHJpdi0+c291cmNlUGFkID0gZ3N0
X2dob3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUoInNyYyIsIHBhZFRlbXBsYXRl
KTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UKHNyYyksIHByaXYtPnNvdXJj
ZVBhZCk7CisKKyAgICBwcml2LT5wcm92aWRlciA9IDA7CisgICAgcHJpdi0+YnVzID0gMDsKKyAg
ICBwcml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0ID0gMDsKKworICAgIHByaXYtPm11dGV4ID0gZ19u
ZXcoR1N0YXRpY1JlY011dGV4LCAxKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdChwcml2
LT5tdXRleCk7CisKKyAgICBwcml2LT50YXNrID0gYWRvcHRHUmVmKGdzdF90YXNrX2NyZWF0ZShy
ZWludGVycHJldF9jYXN0PEdzdFRhc2tGdW5jdGlvbj4od2ViS2l0V2ViQXVkaW9TcmNMb29wKSwg
c3JjKSk7CisgICAgZ3N0X3Rhc2tfc2V0X2xvY2socHJpdi0+dGFzay5nZXQoKSwgcHJpdi0+bXV0
ZXgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0NvbnN0cnVjdGVkKEdPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9B
VURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUqIHByaXYg
PSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAgICBBU1NFUlQocHJpdi0+
cHJvdmlkZXIpOworICAgIEFTU0VSVChwcml2LT5zYW1wbGVSYXRlKTsKKworICAgIHByaXYtPmlu
dGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImludGVybGVhdmUiLCAwKTsKKyAg
ICBwcml2LT53YXZFbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3YXZlbmMiLCAw
KTsKKworICAgIGlmICghcHJpdi0+aW50ZXJsZWF2ZSkgeworICAgICAgICBHU1RfRVJST1JfT0JK
RUNUKHNyYywgIkZhaWxlZCB0byBjcmVhdGUgaW50ZXJsZWF2ZSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCFwcml2LT53YXZFbmNvZGVyKSB7CisgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSB3YXZlbmMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihzcmMpLCBwcml2LT5pbnRl
cmxlYXZlLmdldCgpLCBwcml2LT53YXZFbmNvZGVyLmdldCgpLCBOVUxMKTsKKyAgICBnc3RfZWxl
bWVudF9saW5rX3BhZHNfZnVsbChwcml2LT5pbnRlcmxlYXZlLmdldCgpLCAic3JjIiwgcHJpdi0+
d2F2RW5jb2Rlci5nZXQoKSwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisK
KyAgICAvLyBGb3IgZWFjaCBjaGFubmVsIG9mIHRoZSBidXMgY3JlYXRlIGEgbmV3IHVwc3RyZWFt
IGJyYW5jaCBmb3IgaW50ZXJsZWF2ZSwgbGlrZToKKyAgICAvLyBxdWV1ZSAhIGNhcHNmaWx0ZXIg
ISBhdWRpb2NvbnZlcnQuIHdoaWNoIGlzIHBsdWdnZWQgdG8gYSBuZXcgaW50ZXJsZWF2ZSByZXF1
ZXN0IHNpbmtwYWQuCisgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVs
SW5kZXggPCBwcml2LT5idXMtPm51bWJlck9mQ2hhbm5lbHMoKTsgY2hhbm5lbEluZGV4KyspIHsK
KyAgICAgICAgR3N0RWxlbWVudCogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1
ZXVlIiwgMCk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCAwKTsKKyAgICAgICAgR3N0RWxlbWVudCogYXVkaW9j
b252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKwor
ICAgICAgICBHUmVmUHRyPEdzdENhcHM+IG1vbm9DYXBzID0gYWRvcHRHUmVmKGdldEdTdHJlYW1l
ck1vbm9BdWRpb0NhcHMocHJpdi0+c2FtcGxlUmF0ZSkpOworICAgICAgICBnX29iamVjdF9zZXQo
Y2Fwc2ZpbHRlciwgImNhcHMiLCBtb25vQ2Fwcy5nZXQoKSwgTlVMTCk7CisKKyAgICAgICAgLy8g
Q29uZmlndXJlIHRoZSBxdWV1ZSBmb3IgbWluaW1hbCBsYXRlbmN5LgorICAgICAgICBnX29iamVj
dF9zZXQocXVldWUsICJtYXgtc2l6ZS1idWZmZXJzIiwgc3RhdGljX2Nhc3Q8Z3VpbnQ+KDEpLCBO
VUxMKTsKKworICAgICAgICBHc3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KHF1ZXVlLCAic2luayIpOworICAgICAgICBwcml2LT5wYWRzID0gZ19zbGlzdF9wcmVwZW5kKHBy
aXYtPnBhZHMsIHBhZCk7CisKKyAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHNyYyks
IHF1ZXVlLCBjYXBzZmlsdGVyLCBhdWRpb2NvbnZlcnQsIE5VTEwpOworICAgICAgICBnc3RfZWxl
bWVudF9saW5rX3BhZHNfZnVsbChxdWV1ZSwgInNyYyIsIGNhcHNmaWx0ZXIsICJzaW5rIiwgR1NU
X1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNf
ZnVsbChjYXBzZmlsdGVyLCAic3JjIiwgYXVkaW9jb252ZXJ0LCAic2luayIsIEdTVF9QQURfTElO
S19DSEVDS19OT1RISU5HKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gc3JjUGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGF1ZGlvY29udmVydCwgInNyYyIpKTsK
KyAgICAgICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3JlcXVlc3RfcGFkKHByaXYtPmludGVybGVhdmUuZ2V0KCksICJzaW5rJWQiKSk7CisgICAg
ICAgIGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIHNpbmtQYWQuZ2V0KCkpOworICAgIH0KKyAg
ICBwcml2LT5wYWRzID0gZ19zbGlzdF9yZXZlcnNlKHByaXYtPnBhZHMpOworCisgICAgLy8gd2F2
ZW5jJ3Mgc3JjIHBhZCBpcyB0aGUgb25seSB2aXNpYmxlIHBhZCBvZiBvdXIgZWxlbWVudC4KKyAg
ICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKHByaXYtPndhdkVuY29kZXIuZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0X2dob3N0
X3BhZF9zZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQocHJpdi0+c291cmNlUGFkKSwgdGFyZ2V0UGFk
LmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNGaW5hbGl6ZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJf
QVVESU9fU1JDKG9iamVjdCk7CisgICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2
ID0gc3JjLT5wcml2OworCisgICAgZ19zdGF0aWNfcmVjX211dGV4X2ZyZWUocHJpdi0+bXV0ZXgp
OworCisgICAgZ19zbGlzdF9mcmVlX2Z1bGwocHJpdi0+cGFkcywgcmVpbnRlcnByZXRfY2FzdDxH
RGVzdHJveU5vdGlmeT4oZ3N0X29iamVjdF91bnJlZikpOworCisgICAgcHJpdi0+fldlYktpdFdl
YkF1ZGlvU291cmNlUHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFT
UywgZmluYWxpemUsICgoR09iamVjdCogKShzcmMpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktp
dFdlYkF1ZGlvU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRX
ZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJL
aXRXZWJBdWRpb1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBzd2l0Y2gg
KHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUkFURToKKyAgICAgICAgcHJpdi0+c2FtcGxl
UmF0ZSA9IGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0JVUzoKKyAgICAgICAgcHJpdi0+YnVzID0gc3RhdGljX2Nhc3Q8QXVkaW9CdXMqPihn
X3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9QUk9WSURFUjoKKyAgICAgICAgcHJpdi0+cHJvdmlkZXIgPSBzdGF0aWNfY2FzdDxBdWRpb1Nv
dXJjZVByb3ZpZGVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfRlJBTUVTOgorICAgICAgICBwcml2LT5mcmFtZXNUb1B1bGwgPSBn
X3ZhbHVlX2dldF91aW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJ
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYktp
dFdlYkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRp
b1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJB
dWRpb1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3Bl
cnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQo
dmFsdWUsIHByaXYtPnNhbXBsZVJhdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
QlVTOgorICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZhbHVlLCBwcml2LT5idXMpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPVklERVI6CisgICAgICAgIGdfdmFsdWVfc2V0
X3BvaW50ZXIodmFsdWUsIHByaXYtPnByb3ZpZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0ZSQU1FUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgcHJpdi0+ZnJh
bWVzVG9QdWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3Jj
TG9vcChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU291cmNl
UHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVChwcml2LT5idXMpOworICAg
IEFTU0VSVChwcml2LT5wcm92aWRlcik7CisgICAgaWYgKCFwcml2LT5wcm92aWRlciB8fCAhcHJp
di0+YnVzKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gcHJp
di0+ZnJhbWVzVG9QdWxsICogc2l6ZW9mKGZsb2F0KTsKKyAgICBwcml2LT5wcm92aWRlci0+cHJv
dmlkZUlucHV0KHByaXYtPmJ1cywgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKKworICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGdfc2xpc3RfbGVuZ3RoKHByaXYtPnBhZHMpOyBpbmRl
eCsrKSB7CisgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ19zbGlz
dF9udGhfZGF0YShwcml2LT5wYWRzLCBpbmRleCkpOworCisgICAgICAgIEdzdEJ1ZmZlciogYnVm
ZmVyID0gZ3N0X2J1ZmZlcl90cnlfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyAgICAgICAg
QVNTRVJUKGJ1ZmZlcik7CisgICAgICAgIG1lbWNweShHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSwg
cHJpdi0+YnVzLT5jaGFubmVsKGluZGV4KS0+ZGF0YSgpLCBidWZmZXJTaXplKTsKKyAgICAgICAg
R1NUX0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9IHByaXYtPmN1cnJlbnRCdWZmZXJPZmZzZXQ7Cisg
ICAgICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORChidWZmZXIpID0gcHJpdi0+Y3VycmVudEJ1ZmZl
ck9mZnNldCArIHByaXYtPmZyYW1lc1RvUHVsbDsKKworICAgICAgICBHc3RDYXBzKiBtb25vQ2Fw
cyA9IGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+c2FtcGxlUmF0ZSk7CisgICAgICAg
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtb25vQ2Fw
cywgMCk7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgImNoYW5uZWxzIiwg
R19UWVBFX0lOVCwgMSwgTlVMTCk7CisgICAgICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGNo
YW5uZWxQb3NpdGlvbiA9IHdlYktpdFdlYkF1ZGlvR1N0cmVhbWVyQ2hhbm5lbFBvc2l0aW9uKGlu
ZGV4KTsKKyAgICAgICAgZ3N0X2F1ZGlvX3NldF9jaGFubmVsX3Bvc2l0aW9ucyhzdHJ1Y3R1cmUs
ICZjaGFubmVsUG9zaXRpb24pOworICAgICAgICBnc3RfYnVmZmVyX3NldF9jYXBzKGJ1ZmZlciwg
bW9ub0NhcHMpOworCisgICAgICAgIGdzdF9wYWRfY2hhaW4ocGFkLCBidWZmZXIpOworICAgICAg
ICBnc3RfY2Fwc191bnJlZihtb25vQ2Fwcyk7CisgICAgfQorCisgICAgcHJpdi0+Y3VycmVudEJ1
ZmZlck9mZnNldCArPSBwcml2LT5mcmFtZXNUb1B1bGw7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNo
YW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1l
bnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1
cm4gcmV0dXJuVmFsdWUgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgICAgV2ViS2l0V2Vi
QXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKGVsZW1lbnQpOworCisgICAgc3dp
dGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVB
RFk6CisgICAgICAgIGlmICghc3JjLT5wcml2LT5pbnRlcmxlYXZlKSB7CisgICAgICAgICAgICBn
c3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoZWxlbWVudCwgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNz
YWdlX25ldyhlbGVtZW50LCAiaW50ZXJsZWF2ZSIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5U
X0VSUk9SKHNyYywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBpbnRlcmxlYXZlIikp
OworICAgICAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXNyYy0+cHJpdi0+d2F2RW5jb2RlcikgeworICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQsIGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2Fn
ZV9uZXcoZWxlbWVudCwgIndhdmVuYyIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9S
KHNyYywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyB3YXZlbmMiKSk7CisgICAgICAg
ICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVy
blZhbHVlID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVs
ZW1lbnQsIHRyYW5zaXRpb24pOworICAgIGlmIChVTkxJS0VMWShyZXR1cm5WYWx1ZSA9PSBHU1Rf
U1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
U3RhdGUgY2hhbmdlIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAg
fQorCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdF
X1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+
UEFVU0VEIik7CisgICAgICAgIGlmICghZ3N0X3Rhc2tfc3RhcnQoc3JjLT5wcml2LT50YXNrLmdl
dCgpKSkKKyAgICAgICAgICAgIHJldHVyblZhbHVlID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJF
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JF
QURZOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKKyAg
ICAgICAgaWYgKCFnc3RfdGFza19qb2luKHNyYy0+cHJpdi0+dGFzay5nZXQoKSkpCisgICAgICAg
ICAgICByZXR1cm5WYWx1ZSA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJl
dHVyblZhbHVlOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJF
QU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkZTEyMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1Nv
dXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDExIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYg
V2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXJfaAorI2RlZmluZSBXZWJLaXRXZWJBdWRpb1Nv
dXJjZUdTdHJlYW1lcl9oCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgPGdzdC9nc3Qu
aD4KKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDICh3ZWJraXRfd2ViX2F1ZGlv
X3NyY19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0FVRElPX1NSQyhvYmopIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywg
V2ViS2l0V2ViQXVkaW9TcmMpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQXVkaW9TcmMg
V2ViS2l0V2ViQXVkaW9TcmM7CisKK0dUeXBlIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2dldF90eXBl
KCk7CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5jcHAKaW5kZXggMTk2ZWE0OC4uY2E3MmRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0
cmVhbWVyLmNwcApAQCAtNjQsNSArNjQsMTggQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8
R3N0Q2Fwcz4oR3N0Q2FwcyogcHRyKQogICAgICAgICBnc3RfY2Fwc191bnJlZihwdHIpOwogfQog
Cit0ZW1wbGF0ZSA8PiBHc3RUYXNrKiByZWZHUHRyPEdzdFRhc2s+KEdzdFRhc2sqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihwdHIpOworICAgIHJldHVybiBw
dHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFRhc2s+KEdzdFRhc2sqIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisK
IH0KICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKaW5k
ZXggM2Q0MzEyNy4uZjVkMGNjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCkBAIC0yNiw2
ICsyNiw3IEBACiB0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwogdHlwZWRl
ZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0Q2FwcyBHc3RDYXBz
OwordHlwZWRlZiBzdHJ1Y3QgX0dzdFRhc2sgR3N0VGFzazsKIAogbmFtZXNwYWNlIFdURiB7CiAK
QEAgLTM4LDYgKzM5LDkgQEAgdGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RQYWQ+KEdzdFBh
ZCogcHRyKTsKIHRlbXBsYXRlPD4gR3N0Q2FwcyogcmVmR1B0cjxHc3RDYXBzPihHc3RDYXBzKiBw
dHIpOwogdGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RDYXBzPihHc3RDYXBzKiBwdHIpOwog
Cit0ZW1wbGF0ZTw+IEdzdFRhc2sqIHJlZkdQdHI8R3N0VGFzaz4oR3N0VGFzayogcHRyKTsKK3Rl
bXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0VGFzaz4oR3N0VGFzayogcHRyKTsKKwogfQogCiAj
ZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKLS0gCjEuNy43LjM=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116339</attachid>
            <date>2011-11-23 03:54:49 -0800</date>
            <delta_ts>2011-11-23 07:32:05 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>30987</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBkZTIxMTE2OWI5ZmI5YzEwZDQ5MTJiYjk4OTMwMzk1YmM5M2E4NmQ2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1
NiArKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAg
IHwgICAgMiArCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
Y3BwICB8ICAgODkgKysrKystCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAgICAgfCAgNDA0ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgMzMgKysKIC4uLi9n
cmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgICAgICAgIHwgICAyMyArKwog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmggfCAgICA1
ICsKIDggZmlsZXMgY2hhbmdlZCwgNjE5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGVlYzM3NGIuLjZlNGFhYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1OSBAQAorMjAxMS0xMC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gV2ViQXVkaW8gQXVkaW9EZXN0aW5h
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcg
R1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBBdWRpb0J1cyBh
bmQKKyAgICAgICAgb3V0cHV0aW5nIGF1ZGlvIGludGVybGVhdmVkIEdzdEJ1ZmZlcnMgc3VpdGFi
bGUgZm9yIHBsYXliYWNrLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQg
dGhlIG5ldyBHU3RyZWFtZXIgV2ViQXVkaW8gZWxlbWVudAorICAgICAgICBzb3VyY2UgZmlsZXMg
dG8gdGhlIGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rl
c3RpbmF0aW9uR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9uR1N0cmVhbWVyV2F2
cGFyc2VQYWRBZGRlZENhbGxiYWNrKTogRnVuY3Rpb24gY2FsbGVkCisgICAgICAgIHdoZW4gdGhl
IHBsYXliYWNrIHBpcGVsaW5lIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIGF1ZGlvIHNvdXJjZQor
ICAgICAgICBpbnRvIGEgV0FWIHN0cmVhbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIpOgorICAgICAgICBDb25m
aWd1cmUgdGhlIGluaXRpYWwgcGxheWJhY2sgcGlwZWxpbmUgdXAgdG8gdGhlIFdBViBwYXJzZXIu
IFRoZQorICAgICAgICBhdWRpbyBzaW5rIGlzIGFkZGVkIG9ubHkgYWZ0ZXIgdGhlIFdBViBwYXJz
ZXIgd2FzIGNvbmZpZ3VyZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyOjp+QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIFJlc2V0IHRoZSBw
bGF5YmFjayBwaXBlbGluZSBhbmQgZGVsZXRlIGl0LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9E
ZXN0aW5hdGlvbkdTdHJlYW1lcjo6ZmluaXNoQnVpbGRpbmdQaXBlbGluZUFmdGVyV2F2UGFyc2Vy
UGFkUmVhZHkpOgorICAgICAgICBNZXRob2QgdG8gYWRkIHRoZSBhdWRpbyBzaW5rIHRvIHRoZSBw
aXBlbGluZSBhbmQgbGluayBpdCB0byB0aGUKKyAgICAgICAgV0FWIHBhcnNlci4KKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0YXJ0KTogU2V0IHBpcGVsaW5l
IHRvCisgICAgICAgIFBMQVlJTkcsIGF0IHRoZSBmaXJzdCBydW4gaXQgd2lsbCB0cmlnZ2VyIHRo
ZSBXQVYgcGFyc2VyIGFuZCBoZW5jZQorICAgICAgICB0aGUgYXVkaW8tc2luayBwbHVnZ2luZy4K
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0b3ApOiBQYXVz
ZSB0aGUgcGlwZWxpbmUuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlv
RGVzdGluYXRpb25HU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdl
dEdTdHJlYW1lck1vbm9BdWRpb0NhcHMpOiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdlbmVyYXRlCisg
ICAgICAgIEdTdHJlYW1lciBjYXBzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBhdWRpbyBjaGFubmVs
IGZvciBhIGdpdmVuCisgICAgICAgIHNhbXBsZSByYXRlLgorICAgICAgICAod2ViS2l0V2ViQXVk
aW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24pOiBVdGlsaXR5IGZ1bmN0aW9uIHRvCisgICAgICAg
IGNvbnZlcnQgQXVkaW9CdXMgY2hhbm5lbCByZXByZXNlbnRhdGlvbnMgdG8gR1N0cmVhbWVyIHBv
c2l0aW9uYWwKKyAgICAgICAgYXVkaW8gY2hhbm5lbCB2YWx1ZXMuCisgICAgICAgICh3ZWJraXRf
d2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KTogR09iamVjdCBjb25maWd1cmF0aW9uIG9mIHRoZQor
ICAgICAgICBHU3RyZWFtZXIgc291cmNlIGVsZW1lbnQuCisgICAgICAgICh3ZWJraXRfd2ViX2F1
ZGlvX3NyY19pbml0KTogSW5pdGlhbGl6YXRpb24gb2YgdGhlIHByaXZhdGUgZGF0YSBvZgorICAg
ICAgICB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ29uc3RydWN0
ZWQpOiBDb25maWd1cmUgdGhlIEdzdEJpbiBlbGVtZW50cworICAgICAgICBkZXBlbmRpbmcgb24g
dGhlIEF1ZGlvQnVzIGxheW91dC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlRmluYWxp
emUpOiBDbGVhbiB1cCB0aGUgR3N0QmluIGFuZCBmcmVlIHByaXZhdGUKKyAgICAgICAgZGF0YSBv
ZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlU2V0UHJvcGVydHkp
OiBHT2JqZWN0IHByb3BlcnR5IHNldHRlci4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNl
R2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAgKHdlYktpdFdl
YkF1ZGlvU291cmNlTG9vcCk6IEdzdFRhc2sgdXNlZCB0byBwdWxsIGRhdGEgZnJvbSB0aGUKKyAg
ICAgICAgQXVkaW9CdXMgYW5kIHB1c2ggaXQgYXMgR3N0QnVmZmVycyB0byB0aGUgc3JjIHBhZCBv
ZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ2hhbmdlU3RhdGUp
OiBTdGFydCBvciBzdG9wIHRoZSBhYm92ZSBHc3RUYXNrCisgICAgICAgIGRlcGVuZGluZyBvbiB0
aGUgYXNrZWQgc3RhdGUgdHJhbnNpdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwOiBHc3RUYXNr
IHN1cHBvcnQgaW4gR1JlZlB0ci4KKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAg
KFdURjo6R3N0VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuaDoKKwogMjAxMS0xMS0yMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gaW1wcm9wZXIgdXNhZ2Ugb2Yg
Z3N0X29iamVjdF9yZWZfc2luawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggYmUx
N2QyNC4uOWQ2OWYzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00ODE3LDYg
KzQ4MTcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFt
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmls
ZVJlYWRlckdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3Bw
CiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNB
dWRpb0J1ZmZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3Bw
CmluZGV4IDk0M2Q4NGEuLmU0MTA3ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lci5jcHAKQEAgLTI1LDkgKzI1LDE3IEBACiAjaW5jbHVkZSAiQXVkaW9DaGFubmVsLmgi
CiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIK
KyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3Bi
dXRpbHMvcGJ1dGlscy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFNpemUgb2YgdGhl
IEF1ZGlvQnVzIGZvciBwbGF5YmFjay4gVGhlIHdlYmtpdHdlYmF1ZGlvc3JjIGVsZW1lbnQKKy8v
IG5lZWRzIHRvIGhhbmRsZSB0aGlzIG51bWJlciBvZiBmcmFtZXMgcGVyIGN5Y2xlIGFzIHdlbGwu
Citjb25zdCB1bnNpZ25lZCBmcmFtZXNUb1B1bGwgPSAxMjg7CisKIFBhc3NPd25QdHI8QXVkaW9E
ZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvU291cmNlUHJvdmlkZXIm
IHByb3ZpZGVyLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcg
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcihwcm92aWRlciwgc2FtcGxlUmF0ZSkpOwpAQCAtMzgs
MjUgKzQ2LDEwNCBAQCBmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUo
KQogICAgIHJldHVybiA0NDEwMDsKIH0KIAorc3RhdGljIHZvaWQgb25HU3RyZWFtZXJXYXZwYXJz
ZVBhZEFkZGVkQ2FsbGJhY2soR3N0RWxlbWVudCogZWxlbWVudCwgR3N0UGFkKiBwYWQsIEF1ZGlv
RGVzdGluYXRpb25HU3RyZWFtZXIqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3RpbmF0aW9uLT5m
aW5pc2hCdWlsZGluZ1BpcGVsaW5lQWZ0ZXJXYXZQYXJzZXJQYWRSZWFkeShwYWQpOworfQorCiBB
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKEF1ZGlv
U291cmNlUHJvdmlkZXImIHByb3ZpZGVyLCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogbV9wcm92
aWRlcihwcm92aWRlcikKLSAgICAsIG1fcmVuZGVyQnVzKDIsIDEyOCwgdHJ1ZSkKKyAgICAsIG1f
cmVuZGVyQnVzKDIsIGZyYW1lc1RvUHVsbCwgdHJ1ZSkKICAgICAsIG1fc2FtcGxlUmF0ZShzYW1w
bGVSYXRlKQogICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCiB7CisgICAgc3RhdGljIGJvb2wgZ3N0
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWdzdEluaXRpYWxpemVkKQorICAgICAgICBn
c3RJbml0aWFsaXplZCA9IGdzdF9pbml0X2NoZWNrKDAsIDAsIDApOworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoZ3N0SW5pdGlhbGl6ZWQsICJHU3RyZWFtZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVk
Iik7CisKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldygicGxheSIpOworCisgICAg
R3N0RWxlbWVudCogd2Via2l0QXVkaW9TcmMgPSByZWludGVycHJldF9jYXN0PEdzdEVsZW1lbnQq
PihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmF0ZSIsIHNhbXBsZVJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1cyIsICZtX3Jl
bmRlckJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXIiLCAmbV9wcm92aWRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZnJhbWVzIiwgZnJhbWVzVG9QdWxsLCBOVUxMKSk7CisKKyAgICBH
c3RFbGVtZW50KiB3YXZQYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdnBhcnNl
IiwgMCk7CisKKyAgICBtX3dhdlBhcnNlckF2YWlsYWJsZSA9IHdhdlBhcnNlcjsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fd2F2UGFyc2VyQXZhaWxhYmxlLCAiRmFpbGVkIHRvIGNyZWF0ZSBH
U3RyZWFtZXIgd2F2cGFyc2UgZWxlbWVudCIpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2F2UGFyc2VyLCAi
cGFkLWFkZGVkIiwgR19DQUxMQkFDSyhvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVsaW5lKSwgd2Vi
a2l0QXVkaW9TcmMsIHdhdlBhcnNlciwgTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRz
X2Z1bGwod2Via2l0QXVkaW9TcmMsICJzcmMiLCB3YXZQYXJzZXIsICJzaW5rIiwgR1NUX1BBRF9M
SU5LX0NIRUNLX05PVEhJTkcpOwogfQogCiBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+QXVk
aW9EZXN0aW5hdGlvbkdTdHJlYW1lcigpCiB7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
cGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fcGlwZWxp
bmUpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OmZpbmlzaEJ1aWxkaW5n
UGlwZWxpbmVBZnRlcldhdlBhcnNlclBhZFJlYWR5KEdzdFBhZCogcGFkKQoreworICAgIEFTU0VS
VChtX3dhdlBhcnNlckF2YWlsYWJsZSk7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGF1ZGlv
U2luayA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1dG9hdWRpb3Npbmsi
LCAwKSk7CisgICAgbV9hdWRpb1NpbmtBdmFpbGFibGUgPSBhdWRpb1Npbms7CisKKyAgICBpZiAo
IWF1ZGlvU2luaykgeworICAgICAgICBMT0dfRVJST1IoIkZhaWxlZCB0byBjcmVhdGUgR1N0cmVh
bWVyIGF1dG9hdWRpb3NpbmsgZWxlbWVudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gQXV0b2F1ZGlvc2luayBkb2VzIHRoZSByZWFsIHNpbmsgZGV0ZWN0aW9uIGluIHRoZQor
ICAgIC8vIEdTVF9TVEFURV9OVUxMLT5SRUFEWSB0cmFuc2l0aW9uIHNvIGl0J3MgYmVzdCB0byBy
b2xsIGl0IHRvIFJFQURZIGFzCisgICAgLy8gc29vbiBhcyBwb3NzaWJsZSB0byBlbnN1cmUgdGhl
IHVuZGVybHlpbmcgcGxhdGZvcm0KKyAgICAvLyBhdWRpb3Npbmsgd2FzIGxvYWRlZCBjb3JyZWN0
bHkuCisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gc3RhdGVDaGFuZ2VSZXR1cm4gPSBnc3RfZWxl
bWVudF9zZXRfc3RhdGUoYXVkaW9TaW5rLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOworICAgIGlm
IChzdGF0ZUNoYW5nZVJldHVybiA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY2hhbmdlIGF1dG9hdWRpb3NpbmsgZWxlbWVudCBzdGF0
ZSIpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoYXVkaW9TaW5rLmdldCgpLCBHU1Rf
U1RBVEVfTlVMTCk7CisgICAgICAgIG1fYXVkaW9TaW5rQXZhaWxhYmxlID0gZmFsc2U7CisgICAg
ICAgIC8vIFJlbGVhc2UgdGhlIGF1ZGlvc2luayBzaW5jZSBpdCBoYXNuJ3QgYmVlbiBhZGRlZCB0
byB0aGUgYmluLgorICAgICAgICBhdWRpb1NpbmsubGVha1JlZigpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgR3N0RWxlbWVudCogYXVkaW9Db252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9C
SU4obV9waXBlbGluZSksIGF1ZGlvQ29udmVydCwgYXVkaW9TaW5rLmdldCgpLCBOVUxMKTsKKwor
ICAgIC8vIExpbmsgd2F2cGFyc2UncyBzcmMgcGFkIHRvIGF1ZGlvY29udmVydCBzaW5rIHBhZC4K
KyAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChhdWRpb0NvbnZlcnQsICJzaW5rIikpOworICAgIGdzdF9wYWRfbGluayhwYWQs
IHNpbmtQYWQuZ2V0KCkpOworCisgICAgLy8gTGluayBhdWRpb2NvbnZlcnQgdG8gYXVkaW9zaW5r
IGFuZCByb2xsIHN0YXRlcy4KKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChhdWRpb0Nv
bnZlcnQsICJzcmMiLCBhdWRpb1NpbmsuZ2V0KCksICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNL
X05PVEhJTkcpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoYXVkaW9D
b252ZXJ0KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGF1ZGlvU2lu
ay5nZXQoKSk7CiB9CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6c3RhcnQoKQog
eworICAgIEFTU0VSVChtX3dhdlBhcnNlckF2YWlsYWJsZSk7CisgICAgaWYgKCFtX3dhdlBhcnNl
ckF2YWlsYWJsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KG1fcGlwZWxpbmUsIEdTVF9TVEFURV9QTEFZSU5HKTsKICAgICBtX2lzUGxheWluZyA9IHRydWU7
CiB9CiAKIHZvaWQgQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcjo6c3RvcCgpCiB7CisgICAgQVNT
RVJUKG1fd2F2UGFyc2VyQXZhaWxhYmxlICYmIG1fYXVkaW9TaW5rQXZhaWxhYmxlKTsKKyAgICBp
ZiAoIW1fd2F2UGFyc2VyQXZhaWxhYmxlIHx8IG1fYXVkaW9TaW5rQXZhaWxhYmxlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZSwgR1NUX1NU
QVRFX1BBVVNFRCk7CiAgICAgbV9pc1BsYXlpbmcgPSBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRp
b0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmgKaW5kZXggN2NmMzc5OC4uNGU4Y2RmNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRp
b25HU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCkBAIC0yMiw2ICsyMiw5IEBACiAjaW5jbHVk
ZSAiQXVkaW9CdXMuaCIKICNpbmNsdWRlICJBdWRpb0Rlc3RpbmF0aW9uLmgiCiAKK3R5cGVkZWYg
c3RydWN0IF9Hc3RFbGVtZW50IEdzdEVsZW1lbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0UGFkIEdz
dFBhZDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyIDogcHVibGljIEF1ZGlvRGVzdGluYXRpb24gewpAQCAtMzYsMTIgKzM5LDE3IEBAIHB1
YmxpYzoKICAgICBmbG9hdCBzYW1wbGVSYXRlKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVSYXRl
OyB9CiAgICAgQXVkaW9Tb3VyY2VQcm92aWRlciYgc291cmNlUHJvdmlkZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3ZpZGVyOyB9CiAKKyAgICB2b2lkIGZpbmlzaEJ1aWxkaW5nUGlwZWxpbmVBZnRl
cldhdlBhcnNlclBhZFJlYWR5KEdzdFBhZCopOworCiBwcml2YXRlOgogICAgIEF1ZGlvU291cmNl
UHJvdmlkZXImIG1fcHJvdmlkZXI7CiAgICAgQXVkaW9CdXMgbV9yZW5kZXJCdXM7CiAKICAgICBm
bG9hdCBtX3NhbXBsZVJhdGU7CiAgICAgYm9vbCBtX2lzUGxheWluZzsKKyAgICBib29sIG1fd2F2
UGFyc2VyQXZhaWxhYmxlOworICAgIGJvb2wgbV9hdWRpb1NpbmtBdmFpbGFibGU7CisgICAgR3N0
RWxlbWVudCogbV9waXBlbGluZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9n
c3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzQ0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCkBAIC0wLDAgKzEsNDA0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxMSBJ
Z2FsaWEgUy5MCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisj
aWYgRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgIkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgorI2luY2x1ZGUgIkdPd25Q
dHIuaCIKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2F1ZGlv
L211bHRpY2hhbm5lbC5oPgorI2luY2x1ZGUgPGdzdC9wYnV0aWxzL3BidXRpbHMuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJBdWRpb1Ny
Y0NsYXNzICAgV2ViS2l0V2ViQXVkaW9TcmNDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRX
ZWJBdWRpb1NvdXJjZVByaXZhdGUgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlOworCitzdHJ1
Y3QgX1dlYktpdFdlYkF1ZGlvU3JjIHsKKyAgICBHc3RCaW4gcGFyZW50OworCisgICAgV2ViS2l0
V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRXZWJBdWRp
b1NyY0NsYXNzIHsKKyAgICBHc3RCaW5DbGFzcyBwYXJlbnRDbGFzczsKK307CisKK3N0cnVjdCBf
V2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlIHsKKyAgICBnZmxvYXQgc2FtcGxlUmF0ZTsKKyAg
ICBBdWRpb0J1cyogYnVzOworICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyOworICAg
IGd1aW50IGZyYW1lc1RvUHVsbDsKKyAgICBndWludDY0IGN1cnJlbnRCdWZmZXJPZmZzZXQ7CisK
KyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGludGVybGVhdmU7CisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiB3YXZFbmNvZGVyOworCisgICAgR1JlZlB0cjxHc3RUYXNrPiB0YXNrOworICAgIEdTdGF0
aWNSZWNNdXRleCogbXV0ZXg7CisKKyAgICBHU0xpc3QqIHBhZHM7IC8vIExpc3Qgb2YgcXVldWUg
c2luayBwYWRzLiBPbmUgcXVldWUgZm9yIGVhY2ggcGxhbmFyIGF1ZGlvIGNoYW5uZWwuCisgICAg
R1NMaXN0KiBidWZmZXJzOyAvLyBMaXN0IG9mIGJ1ZmZlcnMuIE9uZSBzdGF0aWMgYnVmZmVyIGZv
ciBlYWNoIHBsYW5hciBhdWRpbyBmcmFtZS4KKyAgICBHc3RQYWQqIHNvdXJjZVBhZDsgLy8gc3Jj
IHBhZCBvZiB0aGUgZWxlbWVudCwgaW50ZXJsZWF2ZWQgd2F2IGRhdGEgaXMgcHVzaGVkIHRvIGl0
LgorfTsKKworZW51bSB7CisgICAgUFJPUF9SQVRFID0gMSwKKyAgICBQUk9QX0JVUywKKyAgICBQ
Uk9QX1BST1ZJREVSLAorICAgIFBST1BfRlJBTUVTCit9OworCitzdGF0aWMgR3N0U3RhdGljUGFk
VGVtcGxhdGUgc3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgic3JjIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdTVF9QQURfU1JDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BBRF9BTFdBWVMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
U1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtd2F2IikpOworCitHU1RfREVCVUdfQ0FURUdPUllfU1RB
VElDKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF93ZWJfYXVkaW9fc3JjX2RlYnVnCisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlv
U3JjQ29uc3RydWN0ZWQoR09iamVjdCopOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNG
aW5hbGl6ZShHT2JqZWN0Kik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3Bl
cnR5KEdPYmplY3QqLCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqLCBHUGFyYW1TcGVj
Kik7CitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0dldFByb3BlcnR5KEdPYmplY3QqLCBn
dWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7CitzdGF0aWMgR3N0U3RhdGVD
aGFuZ2VSZXR1cm4gd2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZShHc3RFbGVtZW50KiwgR3N0
U3RhdGVDaGFuZ2UpOworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNMb29wKFdlYktpdFdl
YkF1ZGlvU3JjKik7CisKK3N0YXRpYyBHc3RDYXBzKiBnZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBz
KGZsb2F0IHNhbXBsZVJhdGUpCit7CisgICAgcmV0dXJuIGdzdF9jYXBzX25ld19zaW1wbGUoImF1
ZGlvL3gtcmF3LWZsb2F0IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzdGF0aWNfY2FzdDxpbnQ+KHNh
bXBsZVJhdGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFubmVscyIsIEdf
VFlQRV9JTlQsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZGlhbm5lc3Mi
LCBHX1RZUEVfSU5ULCBHX0JZVEVfT1JERVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIndpZHRoIiwgR19UWVBFX0lOVCwgMzIsIE5VTEwpOworfQorCitzdGF0aWMgR3N0QXVkaW9D
aGFubmVsUG9zaXRpb24gd2ViS2l0V2ViQXVkaW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24oaW50
IGNoYW5uZWxJbmRleCkKK3sKKyAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBwb3NpdGlvbjsK
KworICAgIHN3aXRjaCAoY2hhbm5lbEluZGV4KSB7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5l
bExlZnQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fRlJP
TlRfTEVGVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5lbFJpZ2h0
OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX1JJ
R0hUOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsQ2VudGVyOgor
ICAgICAgICAvLyBDZW50ZXIgYW5kIG1vbm8gYXJlIHRoZSBzYW1lLgorICAgICAgICBwb3NpdGlv
biA9IEdTVF9BVURJT19DSEFOTkVMX1BPU0lUSU9OX0ZST05UX01PTk87CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxMRkU6CisgICAgICAgIHBvc2l0aW9uID0gR1NU
X0FVRElPX0NIQU5ORUxfUE9TSVRJT05fTEZFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1
ZGlvQnVzOjpDaGFubmVsU3Vycm91bmRMZWZ0OgorICAgICAgICBwb3NpdGlvbiA9IEdTVF9BVURJ
T19DSEFOTkVMX1BPU0lUSU9OX1JFQVJfTEVGVDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
dWRpb0J1czo6Q2hhbm5lbFN1cnJvdW5kUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FV
RElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9SSUdIVDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfTsKKworICAgIHJldHVybiBwb3NpdGlvbjsKK30K
KworI2RlZmluZSB3ZWJraXRfd2ViX2F1ZGlvX3NyY19wYXJlbnRfY2xhc3MgcGFyZW50X2NsYXNz
CitHX0RFRklORV9UWVBFX1dJVEhfQ09ERShXZWJLaXRXZWJBdWRpb1NyYywgd2Via2l0X3dlYl9h
dWRpb19zcmMsIEdTVF9UWVBFX0JJTiwgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dl
Yl9hdWRpb19zcmNfZGVidWcsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2Via2l0
d2ViYXVkaW9zcmMiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ3ZWJhdWRpb3NyYyBlbGVtZW50IikpOworCitzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KFdlYktpdFdlYkF1ZGlvU3JjQ2xh
c3MqIHdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RD
bGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MpOworICAgIEdzdEVs
ZW1lbnRDbGFzcyogZWxlbWVudENsYXNzID0gR1NUX0VMRU1FTlRfQ0xBU1Mod2ViS2l0V2ViQXVk
aW9TcmNDbGFzcyk7CisKKyAgICBnc3RfZWxlbWVudF9jbGFzc19hZGRfcGFkX3RlbXBsYXRlKGVs
ZW1lbnRDbGFzcywgZ3N0X3N0YXRpY19wYWRfdGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSkpOwor
ICAgIGdzdF9lbGVtZW50X2NsYXNzX3NldF9kZXRhaWxzX3NpbXBsZShlbGVtZW50Q2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXZWJLaXQgV2ViQXVkaW8g
c291cmNlIGVsZW1lbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiU291cmNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhh
bmRsZXMgV2ViQXVkaW8gZGF0YSBmcm9tIFdlYkNvcmUiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiUGhpbGlwcGUgTm9ybWFuZCA8cG5vcm1hbmRAaWdhbGlhLmNv
bT4iKTsKKworICAgIG9iamVjdENsYXNzLT5jb25zdHJ1Y3RlZCA9IHdlYktpdFdlYkF1ZGlvU3Jj
Q29uc3RydWN0ZWQ7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2ViS2l0V2ViQXVkaW9T
cmNGaW5hbGl6ZTsKKyAgICBlbGVtZW50Q2xhc3MtPmNoYW5nZV9zdGF0ZSA9IHdlYktpdFdlYkF1
ZGlvU3JjQ2hhbmdlU3RhdGU7CisKKyAgICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Vi
S2l0V2ViQXVkaW9TcmNTZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5
ID0gd2ViS2l0V2ViQXVkaW9TcmNHZXRQcm9wZXJ0eTsKKworICAgIEdQYXJhbUZsYWdzIGZsYWdz
ID0gc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fQ09OU1RSVUNUX09OTFkgfCBHX1BB
UkFNX1JFQURXUklURSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpl
Y3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfUkFURSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgi
cmF0ZSIsICJyYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiU2FtcGxlIHJhdGUiLCBHX01JTkRPVUJMRSwgR19NQVhET1VCTEUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQx
MDAuMCwgZmxhZ3MpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2Jq
ZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0JVUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVy
KCJidXMiLCAiYnVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJCdXMiLCBmbGFncykpOworCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfUFJPVklERVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfcG9pbnRlcigicHJvdmlkZXIiLCAicHJvdmlkZXIiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3ZpZGVy
IiwgZmxhZ3MpKTsKKworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0ZSQU1FUywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY191aW50KCJm
cmFtZXMiLCAiZnJhbWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJOdW1iZXIgb2YgYXVkaW8gZnJhbWVzIHRvIHB1bGwgYXQgZWFjaCBp
dGVyYXRpb24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgR19NQVhVSU5UOCwgMTI4LCBmbGFncykpOworCisgICAgZ190eXBlX2NsYXNz
X2FkZF9wcml2YXRlKHdlYktpdFdlYkF1ZGlvU3JjQ2xhc3MsIHNpemVvZihXZWJLaXRXZWJBdWRp
b1NvdXJjZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9hdWRpb19zcmNf
aW5pdChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU291cmNl
UHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShzcmMsIFdFQktJVF9U
WVBFX1dFQl9BVURJT19TUkMsIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSk7CisgICAgc3Jj
LT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0
ZSgpOworCisgICAgR3N0UGFkVGVtcGxhdGUqIHBhZFRlbXBsYXRlID0gZ3N0X3N0YXRpY19wYWRf
dGVtcGxhdGVfZ2V0KCZzcmNUZW1wbGF0ZSk7CisgICAgcHJpdi0+c291cmNlUGFkID0gZ3N0X2do
b3N0X3BhZF9uZXdfbm9fdGFyZ2V0X2Zyb21fdGVtcGxhdGUoInNyYyIsIHBhZFRlbXBsYXRlKTsK
KyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UKHNyYyksIHByaXYtPnNvdXJjZVBh
ZCk7CisKKyAgICBwcml2LT5wcm92aWRlciA9IDA7CisgICAgcHJpdi0+YnVzID0gMDsKKyAgICBw
cml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0ID0gMDsKKworICAgIHByaXYtPm11dGV4ID0gZ19uZXco
R1N0YXRpY1JlY011dGV4LCAxKTsKKyAgICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdChwcml2LT5t
dXRleCk7CisKKyAgICBwcml2LT50YXNrID0gZ3N0X3Rhc2tfY3JlYXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8R3N0VGFza0Z1bmN0aW9uPih3ZWJLaXRXZWJBdWRpb1NyY0xvb3ApLCBzcmMpOworICAgIGdz
dF90YXNrX3NldF9sb2NrKHByaXYtPnRhc2suZ2V0KCksIHByaXYtPm11dGV4KTsKK30KKworc3Rh
dGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgV2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVj
dCk7CisgICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2Owor
CisgICAgQVNTRVJUKHByaXYtPmJ1cyk7CisgICAgQVNTRVJUKHByaXYtPnByb3ZpZGVyKTsKKyAg
ICBBU1NFUlQocHJpdi0+c2FtcGxlUmF0ZSk7CisKKyAgICBwcml2LT5pbnRlcmxlYXZlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJpbnRlcmxlYXZlIiwgMCk7CisgICAgcHJpdi0+d2F2RW5j
b2RlciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgid2F2ZW5jIiwgMCk7CisKKyAgICBpZiAo
IXByaXYtPmludGVybGVhdmUpIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChzcmMsICJGYWls
ZWQgdG8gY3JlYXRlIGludGVybGVhdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICghcHJpdi0+d2F2RW5jb2RlcikgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKHNyYywg
IkZhaWxlZCB0byBjcmVhdGUgd2F2ZW5jIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU4oc3JjKSwgcHJpdi0+aW50ZXJsZWF2ZS5nZXQoKSwg
cHJpdi0+d2F2RW5jb2Rlci5nZXQoKSwgTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRz
X2Z1bGwocHJpdi0+aW50ZXJsZWF2ZS5nZXQoKSwgInNyYyIsIHByaXYtPndhdkVuY29kZXIuZ2V0
KCksICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworCisgICAgdW5zaWduZWQg
YnVmZmVyU2l6ZSA9IHByaXYtPmZyYW1lc1RvUHVsbCAqIHNpemVvZihmbG9hdCk7CisKKyAgICAv
LyBGb3IgZWFjaCBjaGFubmVsIG9mIHRoZSBidXMgY3JlYXRlIGEgbmV3IHVwc3RyZWFtIGJyYW5j
aCBmb3IgaW50ZXJsZWF2ZSwgbGlrZToKKyAgICAvLyBxdWV1ZSAhIGNhcHNmaWx0ZXIgISBhdWRp
b2NvbnZlcnQuIHdoaWNoIGlzIHBsdWdnZWQgdG8gYSBuZXcgaW50ZXJsZWF2ZSByZXF1ZXN0IHNp
bmtwYWQuCisgICAgZm9yICh1bnNpZ25lZCBjaGFubmVsSW5kZXggPSAwOyBjaGFubmVsSW5kZXgg
PCBwcml2LT5idXMtPm51bWJlck9mQ2hhbm5lbHMoKTsgY2hhbm5lbEluZGV4KyspIHsKKyAgICAg
ICAgR3N0RWxlbWVudCogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwg
MCk7CisgICAgICAgIEdzdEVsZW1lbnQqIGNhcHNmaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5
X21ha2UoImNhcHNmaWx0ZXIiLCAwKTsKKyAgICAgICAgR3N0RWxlbWVudCogYXVkaW9jb252ZXJ0
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKworICAgICAg
ICBHUmVmUHRyPEdzdENhcHM+IG1vbm9DYXBzID0gYWRvcHRHUmVmKGdldEdTdHJlYW1lck1vbm9B
dWRpb0NhcHMocHJpdi0+c2FtcGxlUmF0ZSkpOworICAgICAgICBnX29iamVjdF9zZXQoY2Fwc2Zp
bHRlciwgImNhcHMiLCBtb25vQ2Fwcy5nZXQoKSwgTlVMTCk7CisKKyAgICAgICAgLy8gQ29uZmln
dXJlIHRoZSBxdWV1ZSBmb3IgbWluaW1hbCBsYXRlbmN5LgorICAgICAgICBnX29iamVjdF9zZXQo
cXVldWUsICJtYXgtc2l6ZS1idWZmZXJzIiwgc3RhdGljX2Nhc3Q8Z3VpbnQ+KDEpLCBOVUxMKTsK
KworICAgICAgICBHc3RQYWQqIHBhZCA9IGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHF1ZXVl
LCAic2luayIpOworICAgICAgICBwcml2LT5wYWRzID0gZ19zbGlzdF9wcmVwZW5kKHByaXYtPnBh
ZHMsIHBhZCk7CisKKyAgICAgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOKHNyYyksIHF1ZXVl
LCBjYXBzZmlsdGVyLCBhdWRpb2NvbnZlcnQsIE5VTEwpOworICAgICAgICBnc3RfZWxlbWVudF9s
aW5rX3BhZHNfZnVsbChxdWV1ZSwgInNyYyIsIGNhcHNmaWx0ZXIsICJzaW5rIiwgR1NUX1BBRF9M
SU5LX0NIRUNLX05PVEhJTkcpOworICAgICAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChj
YXBzZmlsdGVyLCAic3JjIiwgYXVkaW9jb252ZXJ0LCAic2luayIsIEdTVF9QQURfTElOS19DSEVD
S19OT1RISU5HKTsKKworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gc3JjUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGF1ZGlvY29udmVydCwgInNyYyIpKTsKKyAgICAg
ICAgR1JlZlB0cjxHc3RQYWQ+IHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3Jl
cXVlc3RfcGFkKHByaXYtPmludGVybGVhdmUuZ2V0KCksICJzaW5rJWQiKSk7CisgICAgICAgIGdz
dF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIHNpbmtQYWQuZ2V0KCkpOworCisgICAgICAgIC8vIEZv
ciBlYWNoIHBhZCBhIHN0YXRpYyBidWZmZXIgaXMgbmVlZGVkLiBJdHMgZGF0YSBwb2ludHMgdG8K
KyAgICAgICAgLy8gdGhlIHJlc3BlY3RpdmUgQXVkaW9DaGFubmVsIG1lbW9yeS4KKyAgICAgICAg
R3N0QnVmZmVyKiBidWZmZXIgPSBnc3RfYnVmZmVyX3RyeV9uZXdfYW5kX2FsbG9jKGJ1ZmZlclNp
emUpOworICAgICAgICBBU1NFUlQoYnVmZmVyKTsKKyAgICAgICAgR1NUX0JVRkZFUl9NQUxMT0NE
QVRBKGJ1ZmZlcikgPSAwOworCisgICAgICAgIG1vbm9DYXBzID0gYWRvcHRHUmVmKGdldEdTdHJl
YW1lck1vbm9BdWRpb0NhcHMocHJpdi0+c2FtcGxlUmF0ZSkpOworICAgICAgICBHc3RTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobW9ub0NhcHMuZ2V0KCksIDAp
OworICAgICAgICBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiBjaGFubmVsUG9zaXRpb24gPSB3ZWJL
aXRXZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihjaGFubmVsSW5kZXgpOworICAgICAg
ICBnc3RfYXVkaW9fc2V0X2NoYW5uZWxfcG9zaXRpb25zKHN0cnVjdHVyZSwgJmNoYW5uZWxQb3Np
dGlvbik7CisgICAgICAgIGdzdF9idWZmZXJfc2V0X2NhcHMoYnVmZmVyLCBtb25vQ2Fwcy5nZXQo
KSk7CisKKyAgICAgICAgcHJpdi0+YnVmZmVycyA9IGdfc2xpc3RfcHJlcGVuZChwcml2LT5idWZm
ZXJzLCBidWZmZXIpOworICAgIH0KKyAgICBwcml2LT5wYWRzID0gZ19zbGlzdF9yZXZlcnNlKHBy
aXYtPnBhZHMpOworICAgIHByaXYtPmJ1ZmZlcnMgPSBnX3NsaXN0X3JldmVyc2UocHJpdi0+YnVm
ZmVycyk7CisKKyAgICAvLyB3YXZlbmMncyBzcmMgcGFkIGlzIHRoZSBvbmx5IHZpc2libGUgcGFk
IG9mIG91ciBlbGVtZW50LgorICAgIEdSZWZQdHI8R3N0UGFkPiB0YXJnZXRQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJpdi0+d2F2RW5jb2Rlci5nZXQoKSwgInNy
YyIpKTsKKyAgICBnc3RfZ2hvc3RfcGFkX3NldF90YXJnZXQoR1NUX0dIT1NUX1BBRChwcml2LT5z
b3VyY2VQYWQpLCB0YXJnZXRQYWQuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJB
dWRpb1NyY0ZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1Ny
Yyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRp
b1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBnX3N0YXRpY19yZWNfbXV0
ZXhfZnJlZShwcml2LT5tdXRleCk7CisKKyAgICBnX3NsaXN0X2ZyZWVfZnVsbChwcml2LT5wYWRz
LCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5Pihnc3Rfb2JqZWN0X3VucmVmKSk7Cisg
ICAgZ19zbGlzdF9mcmVlX2Z1bGwocHJpdi0+YnVmZmVycywgcmVpbnRlcnByZXRfY2FzdDxHRGVz
dHJveU5vdGlmeT4oZ3N0X2J1ZmZlcl91bnJlZikpOworCisgICAgcHJpdi0+fldlYktpdFdlYkF1
ZGlvU291cmNlUHJpdmF0ZSgpOworICAgIEdTVF9DQUxMX1BBUkVOVChHX09CSkVDVF9DTEFTUywg
ZmluYWxpemUsICgoR09iamVjdCogKShzcmMpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdl
YkF1ZGlvU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJB
dWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRX
ZWJBdWRpb1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHBy
b3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUkFURToKKyAgICAgICAgcHJpdi0+c2FtcGxlUmF0
ZSA9IGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0JVUzoKKyAgICAgICAgcHJpdi0+YnVzID0gc3RhdGljX2Nhc3Q8QXVkaW9CdXMqPihnX3Zh
bHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9Q
Uk9WSURFUjoKKyAgICAgICAgcHJpdi0+cHJvdmlkZXIgPSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJj
ZVByb3ZpZGVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfRlJBTUVTOgorICAgICAgICBwcml2LT5mcmFtZXNUb1B1bGwgPSBnX3Zh
bHVlX2dldF91aW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwg
cHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdl
YkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlkLCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1Ny
Yyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRp
b1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5
SWQpIHsKKyAgICBjYXNlIFBST1BfUkFURToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFs
dWUsIHByaXYtPnNhbXBsZVJhdGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQlVT
OgorICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZhbHVlLCBwcml2LT5idXMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPVklERVI6CisgICAgICAgIGdfdmFsdWVfc2V0X3Bv
aW50ZXIodmFsdWUsIHByaXYtPnByb3ZpZGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0ZSQU1FUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfdWludCh2YWx1ZSwgcHJpdi0+ZnJhbWVz
VG9QdWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjTG9v
cChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAgIFdlYktpdFdlYkF1ZGlvU291cmNlUHJp
dmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFTU0VSVChwcml2LT5idXMpOworICAgIEFT
U0VSVChwcml2LT5wcm92aWRlcik7CisgICAgaWYgKCFwcml2LT5wcm92aWRlciB8fCAhcHJpdi0+
YnVzKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5wcm92aWRlci0+cHJvdmlkZUlucHV0
KHByaXYtPmJ1cywgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKKworICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IGdfc2xpc3RfbGVuZ3RoKHByaXYtPnBhZHMpOyBpbmRleCsrKSB7Cisg
ICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ19zbGlzdF9udGhfZGF0
YShwcml2LT5wYWRzLCBpbmRleCkpOworICAgICAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IHN0YXRp
Y19jYXN0PEdzdEJ1ZmZlcio+KGdfc2xpc3RfbnRoX2RhdGEocHJpdi0+YnVmZmVycywgaW5kZXgp
KTsKKworICAgICAgICBHU1RfQlVGRkVSX0RBVEEoYnVmZmVyKSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Z3VpbnQ4Kj4ocHJpdi0+YnVzLT5jaGFubmVsKGluZGV4KS0+ZGF0YSgpKTsKKyAgICAgICAgR1NU
X0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9IHByaXYtPmN1cnJlbnRCdWZmZXJPZmZzZXQ7CisgICAg
ICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORChidWZmZXIpID0gcHJpdi0+Y3VycmVudEJ1ZmZlck9m
ZnNldCArIHByaXYtPmZyYW1lc1RvUHVsbDsKKworICAgICAgICBnc3RfcGFkX2NoYWluKHBhZCwg
Z3N0X2J1ZmZlcl9yZWYoYnVmZmVyKSk7CisgICAgfQorCisgICAgcHJpdi0+Y3VycmVudEJ1ZmZl
ck9mZnNldCArPSBwcml2LT5mcmFtZXNUb1B1bGw7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5n
ZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQs
IEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCit7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4g
cmV0dXJuVmFsdWUgPSBHU1RfU1RBVEVfQ0hBTkdFX1NVQ0NFU1M7CisgICAgV2ViS2l0V2ViQXVk
aW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKGVsZW1lbnQpOworCisgICAgc3dpdGNo
ICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6
CisgICAgICAgIGlmICghc3JjLT5wcml2LT5pbnRlcmxlYXZlKSB7CisgICAgICAgICAgICBnc3Rf
ZWxlbWVudF9wb3N0X21lc3NhZ2UoZWxlbWVudCwgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdl
X25ldyhlbGVtZW50LCAiaW50ZXJsZWF2ZSIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VS
Uk9SKHNyYywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyBpbnRlcmxlYXZlIikpOwor
ICAgICAgICAgICAgcmV0dXJuIEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXNyYy0+cHJpdi0+d2F2RW5jb2RlcikgeworICAgICAgICAgICAgZ3N0X2Vs
ZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQsIGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2FnZV9u
ZXcoZWxlbWVudCwgIndhdmVuYyIpKTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNy
YywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgwKSwgKCJubyB3YXZlbmMiKSk7CisgICAgICAgICAg
ICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVyblZh
bHVlID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFyZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1l
bnQsIHRyYW5zaXRpb24pOworICAgIGlmIChVTkxJS0VMWShyZXR1cm5WYWx1ZSA9PSBHU1RfU1RB
VEVfQ0hBTkdFX0ZBSUxVUkUpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3Rh
dGUgY2hhbmdlIGZhaWxlZCIpOworICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQor
CisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JF
QURZX1RPX1BBVVNFRDoKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFV
U0VEIik7CisgICAgICAgIGlmICghZ3N0X3Rhc2tfc3RhcnQoc3JjLT5wcml2LT50YXNrLmdldCgp
KSkKKyAgICAgICAgICAgIHJldHVyblZhbHVlID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZ
OgorICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKKyAgICAg
ICAgaWYgKCFnc3RfdGFza19qb2luKHNyYy0+cHJpdi0+dGFzay5nZXQoKSkpCisgICAgICAgICAg
ICByZXR1cm5WYWx1ZSA9IEdTVF9TVEFURV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldHVy
blZhbHVlOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1F
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9X
ZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdkZTEyMgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2Vi
S2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXJfaAorI2RlZmluZSBXZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lcl9oCisjaWYgVVNFKEdTVFJFQU1FUikKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4K
KworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJfQVVESU9fU1JDICh3ZWJraXRfd2ViX2F1ZGlvX3Ny
Y19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX0FVRElPX1NSQyhvYmopIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2Vi
S2l0V2ViQXVkaW9TcmMpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQXVkaW9TcmMgV2Vi
S2l0V2ViQXVkaW9TcmM7CisKK0dUeXBlIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2dldF90eXBlKCk7
CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJl
YW1lci5jcHAKaW5kZXggYTZiMGExZS4uNDBmYjNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVh
bWVyLmNwcApAQCAtODEsNSArODEsMjggQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0
Q2Fwcz4oR3N0Q2FwcyogcHRyKQogICAgICAgICBnc3RfY2Fwc191bnJlZihwdHIpOwogfQogCisK
K3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0VGFzaz4gYWRvcHRHUmVmKEdzdFRhc2sqIHB0cikKK3sK
KyAgICBBU1NFUlQoIUdTVF9PQkpFQ1RfSVNfRkxPQVRJTkcoR1NUX09CSkVDVChwdHIpKSk7Cisg
ICAgcmV0dXJuIEdSZWZQdHI8R3N0VGFzaz4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1w
bGF0ZSA8PiBHc3RUYXNrKiByZWZHUHRyPEdzdFRhc2s+KEdzdFRhc2sqIHB0cikKK3sKKyAgICBp
ZiAocHRyKSB7CisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7CisgICAg
ICAgIGdzdF9vYmplY3Rfc2luayhHU1RfT0JKRUNUKHB0cikpOworICAgIH0KKworICAgIHJldHVy
biBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFRhc2s+KEdzdFRhc2sq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9
CisKIH0KICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgK
aW5kZXggNzhlNTExMS4uZDBjOTI3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCkBAIC0y
Niw2ICsyNiw3IEBACiB0eXBlZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwogdHlw
ZWRlZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0Q2FwcyBHc3RD
YXBzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFRhc2sgR3N0VGFzazsKIAogbmFtZXNwYWNlIFdURiB7
CiAKQEAgLTQwLDYgKzQxLDEwIEBAIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0UGFkPihH
c3RQYWQqIHB0cik7CiB0ZW1wbGF0ZTw+IEdzdENhcHMqIHJlZkdQdHI8R3N0Q2Fwcz4oR3N0Q2Fw
cyogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0Q2Fwcz4oR3N0Q2FwcyogcHRy
KTsKIAordGVtcGxhdGU8PiBHUmVmUHRyPEdzdFRhc2s+IGFkb3B0R1JlZihHc3RUYXNrKiBwdHIp
OwordGVtcGxhdGU8PiBHc3RUYXNrKiByZWZHUHRyPEdzdFRhc2s+KEdzdFRhc2sqIHB0cik7Cit0
ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdFRhc2s+KEdzdFRhc2sqIHB0cik7CisKIH0KIAog
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0tIAoxLjcuNy4z
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116355</attachid>
            <date>2011-11-23 07:32:05 -0800</date>
            <delta_ts>2011-11-24 05:21:45 -0800</delta_ts>
            <desc>WebAudio GStreamer implementation: playback support</desc>
            <filename>WebAudio-GStreamer-implementation-playback-support.patch</filename>
            <type>text/plain</type>
            <size>30390</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSBlMGIwMGU1ODcxOWM0NDlhODg0N2NlMzJkYjQyYjY4NGM1MjE0YzdmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUdWUsIDExIE9jdCAyMDExIDE0OjU2OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
V2ViQXVkaW8gR1N0cmVhbWVyIGltcGxlbWVudGF0aW9uOiBwbGF5YmFjayBzdXBwb3J0CgotLS0K
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1
NiArKysKIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gICAgICAgICAgICAgICAg
IHwgICAgMiArCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIu
Y3BwICB8ICAgODcgKysrKystCiAuLi4vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25H
U3RyZWFtZXIuaCAgICB8ICAgIDggKwogLi4uL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAgICAgfCAgMzk5ICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3N0cmVh
bWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmggICAgICB8ICAgMzMgKysKIC4uLi9n
cmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgICAgICAgIHwgICAyMyArKwog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmggfCAgICA1
ICsKIDggZmlsZXMgY2hhbmdlZCwgNjEyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVy
L1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDliMjI4ZWYuLmFmMjllNmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw1OSBAQAorMjAxMS0xMC0yNyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gV2ViQXVkaW8gQXVkaW9EZXN0aW5h
dGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njk4
MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcg
R1N0cmVhbWVyIHNvdXJjZSBlbGVtZW50IHB1bGxpbmcgZGF0YSBmcm9tIHRoZSBBdWRpb0J1cyBh
bmQKKyAgICAgICAgb3V0cHV0aW5nIGF1ZGlvIGludGVybGVhdmVkIEdzdEJ1ZmZlcnMgc3VpdGFi
bGUgZm9yIHBsYXliYWNrLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQg
dGhlIG5ldyBHU3RyZWFtZXIgV2ViQXVkaW8gZWxlbWVudAorICAgICAgICBzb3VyY2UgZmlsZXMg
dG8gdGhlIGJ1aWxkLgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rl
c3RpbmF0aW9uR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9uR1N0cmVhbWVyV2F2
cGFyc2VQYWRBZGRlZENhbGxiYWNrKTogRnVuY3Rpb24gY2FsbGVkCisgICAgICAgIHdoZW4gdGhl
IHBsYXliYWNrIHBpcGVsaW5lIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlIGF1ZGlvIHNvdXJjZQor
ICAgICAgICBpbnRvIGEgV0FWIHN0cmVhbS4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGlu
YXRpb25HU3RyZWFtZXI6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIpOgorICAgICAgICBDb25m
aWd1cmUgdGhlIGluaXRpYWwgcGxheWJhY2sgcGlwZWxpbmUgdXAgdG8gdGhlIFdBViBwYXJzZXIu
IFRoZQorICAgICAgICBhdWRpbyBzaW5rIGlzIGFkZGVkIG9ubHkgYWZ0ZXIgdGhlIFdBViBwYXJz
ZXIgd2FzIGNvbmZpZ3VyZWQuCisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0aW9uR1N0
cmVhbWVyOjp+QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcik6CisgICAgICAgIFJlc2V0IHRoZSBw
bGF5YmFjayBwaXBlbGluZSBhbmQgZGVsZXRlIGl0LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9E
ZXN0aW5hdGlvbkdTdHJlYW1lcjo6ZmluaXNoQnVpbGRpbmdQaXBlbGluZUFmdGVyV2F2UGFyc2Vy
UGFkUmVhZHkpOgorICAgICAgICBNZXRob2QgdG8gYWRkIHRoZSBhdWRpbyBzaW5rIHRvIHRoZSBw
aXBlbGluZSBhbmQgbGluayBpdCB0byB0aGUKKyAgICAgICAgV0FWIHBhcnNlci4KKyAgICAgICAg
KFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0YXJ0KTogU2V0IHBpcGVsaW5l
IHRvCisgICAgICAgIFBMQVlJTkcsIGF0IHRoZSBmaXJzdCBydW4gaXQgd2lsbCB0cmlnZ2VyIHRo
ZSBXQVYgcGFyc2VyIGFuZCBoZW5jZQorICAgICAgICB0aGUgYXVkaW8tc2luayBwbHVnZ2luZy4K
KyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0b3ApOiBQYXVz
ZSB0aGUgcGlwZWxpbmUuCisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlv
RGVzdGluYXRpb25HU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKGdl
dEdTdHJlYW1lck1vbm9BdWRpb0NhcHMpOiBVdGlsaXR5IGZ1bmN0aW9uIHRvIGdlbmVyYXRlCisg
ICAgICAgIEdTdHJlYW1lciBjYXBzIHJlcHJlc2VudGluZyBhIHNpbmdsZSBhdWRpbyBjaGFubmVs
IGZvciBhIGdpdmVuCisgICAgICAgIHNhbXBsZSByYXRlLgorICAgICAgICAod2ViS2l0V2ViQXVk
aW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24pOiBVdGlsaXR5IGZ1bmN0aW9uIHRvCisgICAgICAg
IGNvbnZlcnQgQXVkaW9CdXMgY2hhbm5lbCByZXByZXNlbnRhdGlvbnMgdG8gR1N0cmVhbWVyIHBv
c2l0aW9uYWwKKyAgICAgICAgYXVkaW8gY2hhbm5lbCB2YWx1ZXMuCisgICAgICAgICh3ZWJraXRf
d2ViX2F1ZGlvX3NyY19jbGFzc19pbml0KTogR09iamVjdCBjb25maWd1cmF0aW9uIG9mIHRoZQor
ICAgICAgICBHU3RyZWFtZXIgc291cmNlIGVsZW1lbnQuCisgICAgICAgICh3ZWJraXRfd2ViX2F1
ZGlvX3NyY19pbml0KTogSW5pdGlhbGl6YXRpb24gb2YgdGhlIHByaXZhdGUgZGF0YSBvZgorICAg
ICAgICB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ29uc3RydWN0
ZWQpOiBDb25maWd1cmUgdGhlIEdzdEJpbiBlbGVtZW50cworICAgICAgICBkZXBlbmRpbmcgb24g
dGhlIEF1ZGlvQnVzIGxheW91dC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlRmluYWxp
emUpOiBDbGVhbiB1cCB0aGUgR3N0QmluIGFuZCBmcmVlIHByaXZhdGUKKyAgICAgICAgZGF0YSBv
ZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlU2V0UHJvcGVydHkp
OiBHT2JqZWN0IHByb3BlcnR5IHNldHRlci4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNl
R2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAgKHdlYktpdFdl
YkF1ZGlvU291cmNlTG9vcCk6IEdzdFRhc2sgdXNlZCB0byBwdWxsIGRhdGEgZnJvbSB0aGUKKyAg
ICAgICAgQXVkaW9CdXMgYW5kIHB1c2ggaXQgYXMgR3N0QnVmZmVycyB0byB0aGUgc3JjIHBhZCBv
ZiB0aGUgZWxlbWVudC4KKyAgICAgICAgKHdlYktpdFdlYkF1ZGlvU291cmNlQ2hhbmdlU3RhdGUp
OiBTdGFydCBvciBzdG9wIHRoZSBhYm92ZSBHc3RUYXNrCisgICAgICAgIGRlcGVuZGluZyBvbiB0
aGUgYXNrZWQgc3RhdGUgdHJhbnNpdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwOiBHc3RUYXNr
IHN1cHBvcnQgaW4gR1JlZlB0ci4KKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAg
KFdURjo6R3N0VGFzayk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuaDoKKwogMjAxMS0xMS0yMyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gaW1wcm9wZXIgdXNhZ2Ugb2Yg
Z3N0X29iamVjdF9yZWZfc2luawpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggY2Iy
ZjlhMi4uMzBjNDQ2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00ODI1LDYg
KzQ4MjUsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFt
ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRmls
ZVJlYWRlckdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9ndGsvQXVkaW9CdXNHdGsuY3Bw
CiB3ZWJjb3JlX2J1aWx0X3NvdXJjZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL1dlYkNvcmUvSlNB
dWRpb0J1ZmZlci5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuY3Bw
CmluZGV4IDk0M2Q4NGEuLjk3OGRiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdT
dHJlYW1lci5jcHAKQEAgLTI1LDkgKzI1LDE3IEBACiAjaW5jbHVkZSAiQXVkaW9DaGFubmVsLmgi
CiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkdPd25QdHIuaCIK
KyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8Z3N0L3Bi
dXRpbHMvcGJ1dGlscy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFNpemUgb2YgdGhl
IEF1ZGlvQnVzIGZvciBwbGF5YmFjay4gVGhlIHdlYmtpdHdlYmF1ZGlvc3JjIGVsZW1lbnQKKy8v
IG5lZWRzIHRvIGhhbmRsZSB0aGlzIG51bWJlciBvZiBmcmFtZXMgcGVyIGN5Y2xlIGFzIHdlbGwu
Citjb25zdCB1bnNpZ25lZCBmcmFtZXNUb1B1bGwgPSAxMjg7CisKIFBhc3NPd25QdHI8QXVkaW9E
ZXN0aW5hdGlvbj4gQXVkaW9EZXN0aW5hdGlvbjo6Y3JlYXRlKEF1ZGlvU291cmNlUHJvdmlkZXIm
IHByb3ZpZGVyLCBmbG9hdCBzYW1wbGVSYXRlKQogewogICAgIHJldHVybiBhZG9wdFB0cihuZXcg
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lcihwcm92aWRlciwgc2FtcGxlUmF0ZSkpOwpAQCAtMzgs
MjUgKzQ2LDEwMiBAQCBmbG9hdCBBdWRpb0Rlc3RpbmF0aW9uOjpoYXJkd2FyZVNhbXBsZVJhdGUo
KQogICAgIHJldHVybiA0NDEwMDsKIH0KIAorc3RhdGljIHZvaWQgb25HU3RyZWFtZXJXYXZwYXJz
ZVBhZEFkZGVkQ2FsbGJhY2soR3N0RWxlbWVudCogZWxlbWVudCwgR3N0UGFkKiBwYWQsIEF1ZGlv
RGVzdGluYXRpb25HU3RyZWFtZXIqIGRlc3RpbmF0aW9uKQoreworICAgIGRlc3RpbmF0aW9uLT5m
aW5pc2hCdWlsZGluZ1BpcGVsaW5lQWZ0ZXJXYXZQYXJzZXJQYWRSZWFkeShwYWQpOworfQorCiBB
dWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKEF1ZGlv
U291cmNlUHJvdmlkZXImIHByb3ZpZGVyLCBmbG9hdCBzYW1wbGVSYXRlKQogICAgIDogbV9wcm92
aWRlcihwcm92aWRlcikKLSAgICAsIG1fcmVuZGVyQnVzKDIsIDEyOCwgdHJ1ZSkKKyAgICAsIG1f
cmVuZGVyQnVzKDIsIGZyYW1lc1RvUHVsbCwgdHJ1ZSkKICAgICAsIG1fc2FtcGxlUmF0ZShzYW1w
bGVSYXRlKQogICAgICwgbV9pc1BsYXlpbmcoZmFsc2UpCiB7CisgICAgc3RhdGljIGJvb2wgZ3N0
SW5pdGlhbGl6ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWdzdEluaXRpYWxpemVkKQorICAgICAgICBn
c3RJbml0aWFsaXplZCA9IGdzdF9pbml0X2NoZWNrKDAsIDAsIDApOworICAgIEFTU0VSVF9XSVRI
X01FU1NBR0UoZ3N0SW5pdGlhbGl6ZWQsICJHU3RyZWFtZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVk
Iik7CisKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldygicGxheSIpOworCisgICAg
R3N0RWxlbWVudCogd2Via2l0QXVkaW9TcmMgPSByZWludGVycHJldF9jYXN0PEdzdEVsZW1lbnQq
PihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAicmF0ZSIsIHNhbXBsZVJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1cyIsICZtX3Jl
bmRlckJ1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXIiLCAmbV9wcm92aWRlciwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZnJhbWVzIiwgZnJhbWVzVG9QdWxsLCBOVUxMKSk7CisKKyAgICBH
c3RFbGVtZW50KiB3YXZQYXJzZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndhdnBhcnNl
IiwgMCk7CisKKyAgICBtX3dhdlBhcnNlckF2YWlsYWJsZSA9IHdhdlBhcnNlcjsKKyAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKG1fd2F2UGFyc2VyQXZhaWxhYmxlLCAiRmFpbGVkIHRvIGNyZWF0ZSBH
U3RyZWFtZXIgd2F2cGFyc2UgZWxlbWVudCIpOworICAgIGlmICghbV93YXZQYXJzZXJBdmFpbGFi
bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qod2F2UGFyc2VyLCAi
cGFkLWFkZGVkIiwgR19DQUxMQkFDSyhvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFj
ayksIHRoaXMpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihtX3BpcGVsaW5lKSwgd2Vi
a2l0QXVkaW9TcmMsIHdhdlBhcnNlciwgTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19wYWRz
X2Z1bGwod2Via2l0QXVkaW9TcmMsICJzcmMiLCB3YXZQYXJzZXIsICJzaW5rIiwgR1NUX1BBRF9M
SU5LX0NIRUNLX05PVEhJTkcpOwogfQogCiBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjp+QXVk
aW9EZXN0aW5hdGlvbkdTdHJlYW1lcigpCiB7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
cGlwZWxpbmUsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3Rfb2JqZWN0X3VucmVmKG1fcGlwZWxp
bmUpOworfQorCit2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OmZpbmlzaEJ1aWxkaW5n
UGlwZWxpbmVBZnRlcldhdlBhcnNlclBhZFJlYWR5KEdzdFBhZCogcGFkKQoreworICAgIEFTU0VS
VChtX3dhdlBhcnNlckF2YWlsYWJsZSk7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGF1ZGlv
U2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXV0b2F1ZGlvc2luayIsIDApOworICAg
IG1fYXVkaW9TaW5rQXZhaWxhYmxlID0gYXVkaW9TaW5rOworCisgICAgaWYgKCFhdWRpb1Npbmsp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gY3JlYXRlIEdTdHJlYW1lciBhdXRvYXVk
aW9zaW5rIGVsZW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEF1dG9h
dWRpb3NpbmsgZG9lcyB0aGUgcmVhbCBzaW5rIGRldGVjdGlvbiBpbiB0aGUKKyAgICAvLyBHU1Rf
U1RBVEVfTlVMTC0+UkVBRFkgdHJhbnNpdGlvbiBzbyBpdCdzIGJlc3QgdG8gcm9sbCBpdCB0byBS
RUFEWSBhcworICAgIC8vIHNvb24gYXMgcG9zc2libGUgdG8gZW5zdXJlIHRoZSB1bmRlcmx5aW5n
IHBsYXRmb3JtCisgICAgLy8gYXVkaW9zaW5rIHdhcyBsb2FkZWQgY29ycmVjdGx5LgorICAgIEdz
dFN0YXRlQ2hhbmdlUmV0dXJuIHN0YXRlQ2hhbmdlUmV0dXJuID0gZ3N0X2VsZW1lbnRfc2V0X3N0
YXRlKGF1ZGlvU2luay5nZXQoKSwgR1NUX1NUQVRFX1JFQURZKTsKKyAgICBpZiAoc3RhdGVDaGFu
Z2VSZXR1cm4gPT0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFKSB7CisgICAgICAgIExPR19FUlJP
UigiRmFpbGVkIHRvIGNoYW5nZSBhdXRvYXVkaW9zaW5rIGVsZW1lbnQgc3RhdGUiKTsKKyAgICAg
ICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGF1ZGlvU2luay5nZXQoKSwgR1NUX1NUQVRFX05VTEwp
OworICAgICAgICBtX2F1ZGlvU2lua0F2YWlsYWJsZSA9IGZhbHNlOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgR3N0RWxlbWVudCogYXVkaW9Db252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCAwKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9C
SU4obV9waXBlbGluZSksIGF1ZGlvQ29udmVydCwgYXVkaW9TaW5rLmdldCgpLCBOVUxMKTsKKwor
ICAgIC8vIExpbmsgd2F2cGFyc2UncyBzcmMgcGFkIHRvIGF1ZGlvY29udmVydCBzaW5rIHBhZC4K
KyAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChhdWRpb0NvbnZlcnQsICJzaW5rIikpOworICAgIGdzdF9wYWRfbGluayhwYWQs
IHNpbmtQYWQuZ2V0KCkpOworCisgICAgLy8gTGluayBhdWRpb2NvbnZlcnQgdG8gYXVkaW9zaW5r
IGFuZCByb2xsIHN0YXRlcy4KKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChhdWRpb0Nv
bnZlcnQsICJzcmMiLCBhdWRpb1NpbmsuZ2V0KCksICJzaW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNL
X05PVEhJTkcpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoYXVkaW9D
b252ZXJ0KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGF1ZGlvU2lu
ay5sZWFrUmVmKCkpOwogfQogCiB2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0YXJ0
KCkKIHsKKyAgICBBU1NFUlQobV93YXZQYXJzZXJBdmFpbGFibGUpOworICAgIGlmICghbV93YXZQ
YXJzZXJBdmFpbGFibGUpCisgICAgICAgIHJldHVybjsKKworICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BpcGVsaW5lLCBHU1RfU1RBVEVfUExBWUlORyk7CiAgICAgbV9pc1BsYXlpbmcgPSB0
cnVlOwogfQogCiB2b2lkIEF1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXI6OnN0b3AoKQogeworICAg
IEFTU0VSVChtX3dhdlBhcnNlckF2YWlsYWJsZSAmJiBtX2F1ZGlvU2lua0F2YWlsYWJsZSk7Cisg
ICAgaWYgKCFtX3dhdlBhcnNlckF2YWlsYWJsZSB8fCBtX2F1ZGlvU2lua0F2YWlsYWJsZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUsIEdT
VF9TVEFURV9QQVVTRUQpOwogICAgIG1faXNQbGF5aW5nID0gZmFsc2U7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0
aW9uR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCmluZGV4IDdjZjM3OTguLjRlOGNkZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3Rp
bmF0aW9uR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaApAQCAtMjIsNiArMjIsOSBAQAogI2lu
Y2x1ZGUgIkF1ZGlvQnVzLmgiCiAjaW5jbHVkZSAiQXVkaW9EZXN0aW5hdGlvbi5oIgogCit0eXBl
ZGVmIHN0cnVjdCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dzdFBh
ZCBHc3RQYWQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXVkaW9EZXN0aW5hdGlv
bkdTdHJlYW1lciA6IHB1YmxpYyBBdWRpb0Rlc3RpbmF0aW9uIHsKQEAgLTM2LDEyICszOSwxNyBA
QCBwdWJsaWM6CiAgICAgZmxvYXQgc2FtcGxlUmF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2FtcGxl
UmF0ZTsgfQogICAgIEF1ZGlvU291cmNlUHJvdmlkZXImIHNvdXJjZVByb3ZpZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm92aWRlcjsgfQogCisgICAgdm9pZCBmaW5pc2hCdWlsZGluZ1BpcGVsaW5l
QWZ0ZXJXYXZQYXJzZXJQYWRSZWFkeShHc3RQYWQqKTsKKwogcHJpdmF0ZToKICAgICBBdWRpb1Nv
dXJjZVByb3ZpZGVyJiBtX3Byb3ZpZGVyOwogICAgIEF1ZGlvQnVzIG1fcmVuZGVyQnVzOwogCiAg
ICAgZmxvYXQgbV9zYW1wbGVSYXRlOwogICAgIGJvb2wgbV9pc1BsYXlpbmc7CisgICAgYm9vbCBt
X3dhdlBhcnNlckF2YWlsYWJsZTsKKyAgICBib29sIG1fYXVkaW9TaW5rQXZhaWxhYmxlOworICAg
IEdzdEVsZW1lbnQqIG1fcGlwZWxpbmU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0
V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWZjZTY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNl
R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTEgSWdhbGlhIFMuTAorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIK
KworI2lmIEVOQUJMRShXRUJfQVVESU8pICYmIFVTRShHU1RSRUFNRVIpCisKKyNpbmNsdWRlICJB
dWRpb0J1cy5oIgorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNpbmNsdWRlICJH
T3duUHRyLmgiCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9h
dWRpby9tdWx0aWNoYW5uZWwuaD4KKyNpbmNsdWRlIDxnc3QvcGJ1dGlscy9wYnV0aWxzLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViQXVk
aW9TcmNDbGFzcyAgIFdlYktpdFdlYkF1ZGlvU3JjQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlIFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZTsKKwor
c3RydWN0IF9XZWJLaXRXZWJBdWRpb1NyYyB7CisgICAgR3N0QmluIHBhcmVudDsKKworICAgIFdl
YktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2Vi
QXVkaW9TcmNDbGFzcyB7CisgICAgR3N0QmluQ2xhc3MgcGFyZW50Q2xhc3M7Cit9OworCitzdHJ1
Y3QgX1dlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSB7CisgICAgZ2Zsb2F0IHNhbXBsZVJhdGU7
CisgICAgQXVkaW9CdXMqIGJ1czsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlcjsK
KyAgICBndWludCBmcmFtZXNUb1B1bGw7CisgICAgZ3VpbnQ2NCBjdXJyZW50QnVmZmVyT2Zmc2V0
OworCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBpbnRlcmxlYXZlOworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gd2F2RW5jb2RlcjsKKworICAgIEdSZWZQdHI8R3N0VGFzaz4gdGFzazsKKyAgICBH
U3RhdGljUmVjTXV0ZXgqIG11dGV4OworCisgICAgR1NMaXN0KiBwYWRzOyAvLyBMaXN0IG9mIHF1
ZXVlIHNpbmsgcGFkcy4gT25lIHF1ZXVlIGZvciBlYWNoIHBsYW5hciBhdWRpbyBjaGFubmVsLgor
ICAgIEdzdFBhZCogc291cmNlUGFkOyAvLyBzcmMgcGFkIG9mIHRoZSBlbGVtZW50LCBpbnRlcmxl
YXZlZCB3YXYgZGF0YSBpcyBwdXNoZWQgdG8gaXQuCit9OworCitlbnVtIHsKKyAgICBQUk9QX1JB
VEUgPSAxLAorICAgIFBST1BfQlVTLAorICAgIFBST1BfUFJPVklERVIsCisgICAgUFJPUF9GUkFN
RVMKK307CisKK3N0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBzcmNUZW1wbGF0ZSA9IEdTVF9T
VEFUSUNfUEFEX1RFTVBMQVRFKCJzcmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1NUX1BBRF9TUkMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHU1RfUEFEX0FMV0FZUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC13YXYi
KSk7CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3dlYl9hdWRpb19zcmNfZGVi
dWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYl9hdWRpb19zcmNfZGVidWcK
Kworc3RhdGljIHZvaWQgd2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZChHT2JqZWN0Kik7Citz
dGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0ZpbmFsaXplKEdPYmplY3QqKTsKK3N0YXRpYyB2
b2lkIHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BlcnR5
SWQsIGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1
ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BlcnR5SWQsIEdWYWx1ZSosIEdQ
YXJhbVNwZWMqKTsKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1Ny
Y0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqLCBHc3RTdGF0ZUNoYW5nZSk7CitzdGF0aWMgdm9pZCB3
ZWJLaXRXZWJBdWRpb1NyY0xvb3AoV2ViS2l0V2ViQXVkaW9TcmMqKTsKKworc3RhdGljIEdzdENh
cHMqIGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMoZmxvYXQgc2FtcGxlUmF0ZSkKK3sKKyAgICBy
ZXR1cm4gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXctZmxvYXQiLCAicmF0ZSIsIEdf
VFlQRV9JTlQsIHN0YXRpY19jYXN0PGludD4oc2FtcGxlUmF0ZSksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZW5kaWFubmVzcyIsIEdfVFlQRV9JTlQsIEdfQllURV9PUkRFUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiLCBHX1RZUEVfSU5ULCAzMiwg
TlVMTCk7Cit9CisKK3N0YXRpYyBHc3RBdWRpb0NoYW5uZWxQb3NpdGlvbiB3ZWJLaXRXZWJBdWRp
b0dTdHJlYW1lckNoYW5uZWxQb3NpdGlvbihpbnQgY2hhbm5lbEluZGV4KQoreworICAgIEdzdEF1
ZGlvQ2hhbm5lbFBvc2l0aW9uIHBvc2l0aW9uOworCisgICAgc3dpdGNoIChjaGFubmVsSW5kZXgp
IHsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsTGVmdDoKKyAgICAgICAgcG9zaXRpb24gPSBH
U1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9GUk9OVF9MRUZUOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsUmlnaHQ6CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FV
RElPX0NIQU5ORUxfUE9TSVRJT05fRlJPTlRfUklHSFQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXVkaW9CdXM6OkNoYW5uZWxDZW50ZXI6CisgICAgICAgIC8vIENlbnRlciBhbmQgbW9ubyBh
cmUgdGhlIHNhbWUuCisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJ
T05fRlJPTlRfTU9OTzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBdWRpb0J1czo6Q2hhbm5l
bExGRToKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9MRkU7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXVkaW9CdXM6OkNoYW5uZWxTdXJyb3VuZExlZnQ6
CisgICAgICAgIHBvc2l0aW9uID0gR1NUX0FVRElPX0NIQU5ORUxfUE9TSVRJT05fUkVBUl9MRUZU
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEF1ZGlvQnVzOjpDaGFubmVsU3Vycm91bmRSaWdo
dDoKKyAgICAgICAgcG9zaXRpb24gPSBHU1RfQVVESU9fQ0hBTk5FTF9QT1NJVElPTl9SRUFSX1JJ
R0hUOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
OworCisgICAgcmV0dXJuIHBvc2l0aW9uOworfQorCisjZGVmaW5lIHdlYmtpdF93ZWJfYXVkaW9f
c3JjX3BhcmVudF9jbGFzcyBwYXJlbnRfY2xhc3MKK0dfREVGSU5FX1RZUEVfV0lUSF9DT0RFKFdl
YktpdFdlYkF1ZGlvU3JjLCB3ZWJraXRfd2ViX2F1ZGlvX3NyYywgR1NUX1RZUEVfQklOLCBHU1Rf
REVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2ViX2F1ZGlvX3NyY19kZWJ1ZywgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJ3ZWJraXR3ZWJhdWRpb3NyYyIsIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndlYmF1
ZGlvc3JjIGVsZW1lbnQiKSk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJfYXVkaW9fc3JjX2Ns
YXNzX2luaXQoV2ViS2l0V2ViQXVkaW9TcmNDbGFzcyogd2ViS2l0V2ViQXVkaW9TcmNDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2ViS2l0
V2ViQXVkaW9TcmNDbGFzcyk7CisgICAgR3N0RWxlbWVudENsYXNzKiBlbGVtZW50Q2xhc3MgPSBH
U1RfRUxFTUVOVF9DTEFTUyh3ZWJLaXRXZWJBdWRpb1NyY0NsYXNzKTsKKworICAgIGdzdF9lbGVt
ZW50X2NsYXNzX2FkZF9wYWRfdGVtcGxhdGUoZWxlbWVudENsYXNzLCBnc3Rfc3RhdGljX3BhZF90
ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKSk7CisgICAgZ3N0X2VsZW1lbnRfY2xhc3Nfc2V0X2Rl
dGFpbHNfc2ltcGxlKGVsZW1lbnRDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIldlYktpdCBXZWJBdWRpbyBzb3VyY2UgZWxlbWVudCIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3VyY2UiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiSGFuZGxlcyBXZWJBdWRpbyBkYXRhIGZyb20gV2Vi
Q29yZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaGlsaXBw
ZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29tPiIpOworCisgICAgb2JqZWN0Q2xhc3MtPmNv
bnN0cnVjdGVkID0gd2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZDsKKyAgICBvYmplY3RDbGFz
cy0+ZmluYWxpemUgPSB3ZWJLaXRXZWJBdWRpb1NyY0ZpbmFsaXplOworICAgIGVsZW1lbnRDbGFz
cy0+Y2hhbmdlX3N0YXRlID0gd2ViS2l0V2ViQXVkaW9TcmNDaGFuZ2VTdGF0ZTsKKworICAgIG9i
amVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJLaXRXZWJBdWRpb1NyY1NldFByb3BlcnR5Owor
ICAgIG9iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJLaXRXZWJBdWRpb1NyY0dldFByb3Bl
cnR5OworCisgICAgR1BhcmFtRmxhZ3MgZmxhZ3MgPSBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
R19QQVJBTV9DT05TVFJVQ1RfT05MWSB8IEdfUEFSQU1fUkVBRFdSSVRFKTsKKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9SQVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KCJyYXRlIiwgInJhdGUiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTYW1wbGUgcmF0ZSIs
IEdfTUlORE9VQkxFLCBHX01BWERPVUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA0NDEwMC4wLCBmbGFncykpOworCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfQlVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3BvaW50ZXIoImJ1cyIsICJidXMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1cyIsIGZsYWdz
KSk7CisKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9QUk9WSURFUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19wb2ludGVyKCJwcm92
aWRlciIsICJwcm92aWRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiUHJvdmlkZXIiLCBmbGFncykpOworCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfRlJBTUVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX3VpbnQoImZyYW1lcyIsICJmcmFtZXMiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk51bWJlciBvZiBh
dWRpbyBmcmFtZXMgdG8gcHVsbCBhdCBlYWNoIGl0ZXJhdGlvbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHX01BWFVJTlQ4LCAxMjgs
IGZsYWdzKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUod2ViS2l0V2ViQXVkaW9T
cmNDbGFzcywgc2l6ZW9mKFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSkpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX2F1ZGlvX3NyY19pbml0KFdlYktpdFdlYkF1ZGlvU3JjKiBzcmMp
Cit7CisgICAgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKHNyYywgV0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2Vi
QXVkaW9Tb3VyY2VQcml2YXRlKTsKKyAgICBzcmMtPnByaXYgPSBwcml2OworICAgIG5ldyAocHJp
dikgV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2YXRlKCk7CisKKyAgICBHc3RQYWRUZW1wbGF0ZSog
cGFkVGVtcGxhdGUgPSBnc3Rfc3RhdGljX3BhZF90ZW1wbGF0ZV9nZXQoJnNyY1RlbXBsYXRlKTsK
KyAgICBwcml2LT5zb3VyY2VQYWQgPSBnc3RfZ2hvc3RfcGFkX25ld19ub190YXJnZXRfZnJvbV90
ZW1wbGF0ZSgic3JjIiwgcGFkVGVtcGxhdGUpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NU
X0VMRU1FTlQoc3JjKSwgcHJpdi0+c291cmNlUGFkKTsKKworICAgIHByaXYtPnByb3ZpZGVyID0g
MDsKKyAgICBwcml2LT5idXMgPSAwOworICAgIHByaXYtPmN1cnJlbnRCdWZmZXJPZmZzZXQgPSAw
OworCisgICAgcHJpdi0+bXV0ZXggPSBnX25ldyhHU3RhdGljUmVjTXV0ZXgsIDEpOworICAgIGdf
c3RhdGljX3JlY19tdXRleF9pbml0KHByaXYtPm11dGV4KTsKKworICAgIHByaXYtPnRhc2sgPSBn
c3RfdGFza19jcmVhdGUocmVpbnRlcnByZXRfY2FzdDxHc3RUYXNrRnVuY3Rpb24+KHdlYktpdFdl
YkF1ZGlvU3JjTG9vcCksIHNyYyk7CisgICAgZ3N0X3Rhc2tfc2V0X2xvY2socHJpdi0+dGFzay5n
ZXQoKSwgcHJpdi0+bXV0ZXgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJLaXRXZWJBdWRpb1NyY0Nv
bnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3Jj
ID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJj
ZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7CisKKyAgICBBU1NFUlQocHJpdi0+YnVzKTsKKyAg
ICBBU1NFUlQocHJpdi0+cHJvdmlkZXIpOworICAgIEFTU0VSVChwcml2LT5zYW1wbGVSYXRlKTsK
KworICAgIHByaXYtPmludGVybGVhdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImludGVy
bGVhdmUiLCAwKTsKKyAgICBwcml2LT53YXZFbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ3YXZlbmMiLCAwKTsKKworICAgIGlmICghcHJpdi0+aW50ZXJsZWF2ZSkgeworICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKHNyYywgIkZhaWxlZCB0byBjcmVhdGUgaW50ZXJsZWF2ZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwcml2LT53YXZFbmNvZGVyKSB7Cisg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qoc3JjLCAiRmFpbGVkIHRvIGNyZWF0ZSB3YXZlbmMiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTihz
cmMpLCBwcml2LT5pbnRlcmxlYXZlLmdldCgpLCBwcml2LT53YXZFbmNvZGVyLmdldCgpLCBOVUxM
KTsKKyAgICBnc3RfZWxlbWVudF9saW5rX3BhZHNfZnVsbChwcml2LT5pbnRlcmxlYXZlLmdldCgp
LCAic3JjIiwgcHJpdi0+d2F2RW5jb2Rlci5nZXQoKSwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hF
Q0tfTk9USElORyk7CisKKworICAgIC8vIEZvciBlYWNoIGNoYW5uZWwgb2YgdGhlIGJ1cyBjcmVh
dGUgYSBuZXcgdXBzdHJlYW0gYnJhbmNoIGZvciBpbnRlcmxlYXZlLCBsaWtlOgorICAgIC8vIHF1
ZXVlICEgY2Fwc2ZpbHRlciAhIGF1ZGlvY29udmVydC4gd2hpY2ggaXMgcGx1Z2dlZCB0byBhIG5l
dyBpbnRlcmxlYXZlIHJlcXVlc3Qgc2lua3BhZC4KKyAgICBmb3IgKHVuc2lnbmVkIGNoYW5uZWxJ
bmRleCA9IDA7IGNoYW5uZWxJbmRleCA8IHByaXYtPmJ1cy0+bnVtYmVyT2ZDaGFubmVscygpOyBj
aGFubmVsSW5kZXgrKykgeworICAgICAgICBHc3RFbGVtZW50KiBxdWV1ZSA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgicXVldWUiLCAwKTsKKyAgICAgICAgR3N0RWxlbWVudCogY2Fwc2ZpbHRl
ciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIDApOworICAgICAgICBH
c3RFbGVtZW50KiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlv
Y29udmVydCIsIDApOworCisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbW9ub0NhcHMgPSBhZG9w
dEdSZWYoZ2V0R1N0cmVhbWVyTW9ub0F1ZGlvQ2Fwcyhwcml2LT5zYW1wbGVSYXRlKSk7CisgICAg
ICAgIGdfb2JqZWN0X3NldChjYXBzZmlsdGVyLCAiY2FwcyIsIG1vbm9DYXBzLmdldCgpLCBOVUxM
KTsKKworICAgICAgICAvLyBDb25maWd1cmUgdGhlIHF1ZXVlIGZvciBtaW5pbWFsIGxhdGVuY3ku
CisgICAgICAgIGdfb2JqZWN0X3NldChxdWV1ZSwgIm1heC1zaXplLWJ1ZmZlcnMiLCBzdGF0aWNf
Y2FzdDxndWludD4oMSksIE5VTEwpOworCisgICAgICAgIEdzdFBhZCogcGFkID0gZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQocXVldWUsICJzaW5rIik7CisgICAgICAgIHByaXYtPnBhZHMgPSBn
X3NsaXN0X3ByZXBlbmQocHJpdi0+cGFkcywgcGFkKTsKKworICAgICAgICBnc3RfYmluX2FkZF9t
YW55KEdTVF9CSU4oc3JjKSwgcXVldWUsIGNhcHNmaWx0ZXIsIGF1ZGlvY29udmVydCwgTlVMTCk7
CisgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHF1ZXVlLCAic3JjIiwgY2Fwc2Zp
bHRlciwgInNpbmsiLCBHU1RfUEFEX0xJTktfQ0hFQ0tfTk9USElORyk7CisgICAgICAgIGdzdF9l
bGVtZW50X2xpbmtfcGFkc19mdWxsKGNhcHNmaWx0ZXIsICJzcmMiLCBhdWRpb2NvbnZlcnQsICJz
aW5rIiwgR1NUX1BBRF9MSU5LX0NIRUNLX05PVEhJTkcpOworCisgICAgICAgIEdSZWZQdHI8R3N0
UGFkPiBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoYXVkaW9j
b252ZXJ0LCAic3JjIikpOworICAgICAgICBHUmVmUHRyPEdzdFBhZD4gc2lua1BhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfcmVxdWVzdF9wYWQocHJpdi0+aW50ZXJsZWF2ZS5nZXQoKSwg
InNpbmslZCIpKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHNyY1BhZC5nZXQoKSwgc2lua1BhZC5n
ZXQoKSk7CisKKyAgICB9CisgICAgcHJpdi0+cGFkcyA9IGdfc2xpc3RfcmV2ZXJzZShwcml2LT5w
YWRzKTsKKworCisgICAgLy8gd2F2ZW5jJ3Mgc3JjIHBhZCBpcyB0aGUgb25seSB2aXNpYmxlIHBh
ZCBvZiBvdXIgZWxlbWVudC4KKyAgICBHUmVmUHRyPEdzdFBhZD4gdGFyZ2V0UGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHByaXYtPndhdkVuY29kZXIuZ2V0KCksICJz
cmMiKSk7CisgICAgZ3N0X2dob3N0X3BhZF9zZXRfdGFyZ2V0KEdTVF9HSE9TVF9QQUQocHJpdi0+
c291cmNlUGFkKSwgdGFyZ2V0UGFkLmdldCgpKTsKK30KKworc3RhdGljIHZvaWQgd2ViS2l0V2Vi
QXVkaW9TcmNGaW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgV2ViS2l0V2ViQXVkaW9T
cmMqIHNyYyA9IFdFQktJVF9XRUJfQVVESU9fU1JDKG9iamVjdCk7CisgICAgV2ViS2l0V2ViQXVk
aW9Tb3VyY2VQcml2YXRlKiBwcml2ID0gc3JjLT5wcml2OworCisgICAgZ19zdGF0aWNfcmVjX211
dGV4X2ZyZWUocHJpdi0+bXV0ZXgpOworCisgICAgZ19zbGlzdF9mcmVlX2Z1bGwocHJpdi0+cGFk
cywgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZ3N0X29iamVjdF91bnJlZikpOwor
CisgICAgcHJpdi0+fldlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSgpOworICAgIEdTVF9DQUxM
X1BBUkVOVChHX09CSkVDVF9DTEFTUywgZmluYWxpemUsICgoR09iamVjdCogKShzcmMpKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjU2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19T
UkMob2JqZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMt
PnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUkFURToK
KyAgICAgICAgcHJpdi0+c2FtcGxlUmF0ZSA9IGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0JVUzoKKyAgICAgICAgcHJpdi0+YnVzID0gc3Rh
dGljX2Nhc3Q8QXVkaW9CdXMqPihnX3ZhbHVlX2dldF9wb2ludGVyKHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9WSURFUjoKKyAgICAgICAgcHJpdi0+cHJvdmlkZXIg
PSBzdGF0aWNfY2FzdDxBdWRpb1NvdXJjZVByb3ZpZGVyKj4oZ192YWx1ZV9nZXRfcG9pbnRlcih2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfRlJBTUVTOgorICAgICAgICBw
cml2LT5mcmFtZXNUb1B1bGwgPSBnX3ZhbHVlX2dldF91aW50KHZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYktpdFdlYkF1ZGlvU3JjR2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykK
K3sKKyAgICBXZWJLaXRXZWJBdWRpb1NyYyogc3JjID0gV0VCS0lUX1dFQl9BVURJT19TUkMob2Jq
ZWN0KTsKKyAgICBXZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUqIHByaXYgPSBzcmMtPnByaXY7
CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SWQpIHsKKyAgICBjYXNlIFBST1BfUkFURToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPnNhbXBsZVJhdGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQlVTOgorICAgICAgICBnX3ZhbHVlX3NldF9wb2ludGVyKHZh
bHVlLCBwcml2LT5idXMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUFJPVklERVI6
CisgICAgICAgIGdfdmFsdWVfc2V0X3BvaW50ZXIodmFsdWUsIHByaXYtPnByb3ZpZGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZSQU1FUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
dWludCh2YWx1ZSwgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwg
cHJvcGVydHlJZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIHdlYktpdFdlYkF1ZGlvU3JjTG9vcChXZWJLaXRXZWJBdWRpb1NyYyogc3JjKQoreworICAg
IFdlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSogcHJpdiA9IHNyYy0+cHJpdjsKKworICAgIEFT
U0VSVChwcml2LT5idXMpOworICAgIEFTU0VSVChwcml2LT5wcm92aWRlcik7CisgICAgaWYgKCFw
cml2LT5wcm92aWRlciB8fCAhcHJpdi0+YnVzKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2
LT5wcm92aWRlci0+cHJvdmlkZUlucHV0KHByaXYtPmJ1cywgcHJpdi0+ZnJhbWVzVG9QdWxsKTsK
KworICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSBwcml2LT5mcmFtZXNUb1B1bGwgKiBzaXplb2Yo
ZmxvYXQpOworICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGdfc2xpc3RfbGVu
Z3RoKHByaXYtPnBhZHMpOyBpbmRleCsrKSB7CisgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGlj
X2Nhc3Q8R3N0UGFkKj4oZ19zbGlzdF9udGhfZGF0YShwcml2LT5wYWRzLCBpbmRleCkpOworCisg
ICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1ZmZlcl9uZXcoKTsKKyAgICAgICAgQVNT
RVJUKGJ1ZmZlcik7CisgICAgICAgIEFTU0VSVCghR1NUX0JVRkZFUl9NQUxMT0NEQVRBKGJ1ZmZl
cikpOworCisgICAgICAgIEdTVF9CVUZGRVJfREFUQShidWZmZXIpID0gcmVpbnRlcnByZXRfY2Fz
dDxndWludDgqPihwcml2LT5idXMtPmNoYW5uZWwoaW5kZXgpLT5kYXRhKCkpOworICAgICAgICBH
U1RfQlVGRkVSX1NJWkUoYnVmZmVyKSA9IGJ1ZmZlclNpemU7CisgICAgICAgIEdTVF9CVUZGRVJf
T0ZGU0VUKGJ1ZmZlcikgPSBwcml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0OworICAgICAgICBHU1Rf
QlVGRkVSX09GRlNFVF9FTkQoYnVmZmVyKSA9IHByaXYtPmN1cnJlbnRCdWZmZXJPZmZzZXQgKyBw
cml2LT5mcmFtZXNUb1B1bGw7CisKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBtb25vQ2FwcyA9
IGFkb3B0R1JlZihnZXRHU3RyZWFtZXJNb25vQXVkaW9DYXBzKHByaXYtPnNhbXBsZVJhdGUpKTsK
KyAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJl
KG1vbm9DYXBzLmdldCgpLCAwKTsKKyAgICAgICAgR3N0QXVkaW9DaGFubmVsUG9zaXRpb24gY2hh
bm5lbFBvc2l0aW9uID0gd2ViS2l0V2ViQXVkaW9HU3RyZWFtZXJDaGFubmVsUG9zaXRpb24oaW5k
ZXgpOworICAgICAgICBnc3RfYXVkaW9fc2V0X2NoYW5uZWxfcG9zaXRpb25zKHN0cnVjdHVyZSwg
JmNoYW5uZWxQb3NpdGlvbik7CisgICAgICAgIGdzdF9idWZmZXJfc2V0X2NhcHMoYnVmZmVyLCBt
b25vQ2Fwcy5nZXQoKSk7CisKKyAgICAgICAgZ3N0X3BhZF9jaGFpbihwYWQsIGJ1ZmZlcik7Cisg
ICAgfQorCisgICAgcHJpdi0+Y3VycmVudEJ1ZmZlck9mZnNldCArPSBwcml2LT5mcmFtZXNUb1B1
bGw7Cit9CisKK3N0YXRpYyBHc3RTdGF0ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0No
YW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVsZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24p
Cit7CisgICAgR3N0U3RhdGVDaGFuZ2VSZXR1cm4gcmV0dXJuVmFsdWUgPSBHU1RfU1RBVEVfQ0hB
TkdFX1NVQ0NFU1M7CisgICAgV2ViS2l0V2ViQXVkaW9TcmMqIHNyYyA9IFdFQktJVF9XRUJfQVVE
SU9fU1JDKGVsZW1lbnQpOworCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7CisgICAgY2FzZSBH
U1RfU1RBVEVfQ0hBTkdFX05VTExfVE9fUkVBRFk6CisgICAgICAgIGlmICghc3JjLT5wcml2LT5p
bnRlcmxlYXZlKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9wb3N0X21lc3NhZ2UoZWxlbWVu
dCwgZ3N0X21pc3NpbmdfZWxlbWVudF9tZXNzYWdlX25ldyhlbGVtZW50LCAiaW50ZXJsZWF2ZSIp
KTsKKyAgICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09SRSwgTUlTU0lOR19QTFVH
SU4sICgwKSwgKCJubyBpbnRlcmxlYXZlIikpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9TVEFU
RV9DSEFOR0VfRkFJTFVSRTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXNyYy0+cHJpdi0+d2F2
RW5jb2RlcikgeworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcG9zdF9tZXNzYWdlKGVsZW1lbnQs
IGdzdF9taXNzaW5nX2VsZW1lbnRfbWVzc2FnZV9uZXcoZWxlbWVudCwgIndhdmVuYyIpKTsKKyAg
ICAgICAgICAgIEdTVF9FTEVNRU5UX0VSUk9SKHNyYywgQ09SRSwgTUlTU0lOR19QTFVHSU4sICgw
KSwgKCJubyB3YXZlbmMiKSk7CisgICAgICAgICAgICByZXR1cm4gR1NUX1NUQVRFX0NIQU5HRV9G
QUlMVVJFOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVyblZhbHVlID0gR1NUX0VMRU1FTlRfQ0xBU1MocGFy
ZW50X2NsYXNzKS0+Y2hhbmdlX3N0YXRlKGVsZW1lbnQsIHRyYW5zaXRpb24pOworICAgIGlmIChV
TkxJS0VMWShyZXR1cm5WYWx1ZSA9PSBHU1RfU1RBVEVfQ0hBTkdFX0ZBSUxVUkUpKSB7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiU3RhdGUgY2hhbmdlIGZhaWxlZCIpOworICAgICAg
ICByZXR1cm4gcmV0dXJuVmFsdWU7CisgICAgfQorCisgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7
CisgICAgY2FzZSBHU1RfU1RBVEVfQ0hBTkdFX1JFQURZX1RPX1BBVVNFRDoKKyAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChzcmMsICJSRUFEWS0+UEFVU0VEIik7CisgICAgICAgIGlmICghZ3N0X3Rh
c2tfc3RhcnQoc3JjLT5wcml2LT50YXNrLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVyblZhbHVl
ID0gR1NUX1NUQVRFX0NIQU5HRV9GQUlMVVJFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdT
VF9TVEFURV9DSEFOR0VfUEFVU0VEX1RPX1JFQURZOgorICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHNyYywgIlBBVVNFRC0+UkVBRFkiKTsKKyAgICAgICAgaWYgKCFnc3RfdGFza19qb2luKHNyYy0+
cHJpdi0+dGFzay5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IEdTVF9TVEFURV9D
SEFOR0VfRkFJTFVSRTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9BVURJTykgJiYgVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1
ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NTdkZTEyMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9XZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsMzMg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwKKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXJf
aAorI2RlZmluZSBXZWJLaXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lcl9oCisjaWYgVVNFKEdTVFJF
QU1FUikKKworI2luY2x1ZGUgPGdzdC9nc3QuaD4KKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJf
QVVESU9fU1JDICh3ZWJraXRfd2ViX2F1ZGlvX3NyY19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJL
SVRfV0VCX0FVRElPX1NSQyhvYmopIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwg
V0VCS0lUX1RZUEVfV0VCX0FVRElPX1NSQywgV2ViS2l0V2ViQXVkaW9TcmMpKQorCit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViQXVkaW9TcmMgV2ViS2l0V2ViQXVkaW9TcmM7CisKK0dUeXBlIHdl
YmtpdF93ZWJfYXVkaW9fc3JjX2dldF90eXBlKCk7CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
KQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKaW5kZXggYTZiMGExZS4uNDBm
YjNiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtODEsNSArODEsMjggQEAg
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0Q2Fwcz4oR3N0Q2FwcyogcHRyKQogICAgICAg
ICBnc3RfY2Fwc191bnJlZihwdHIpOwogfQogCisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0VGFz
az4gYWRvcHRHUmVmKEdzdFRhc2sqIHB0cikKK3sKKyAgICBBU1NFUlQoIUdTVF9PQkpFQ1RfSVNf
RkxPQVRJTkcoR1NUX09CSkVDVChwdHIpKSk7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0VGFzaz4o
cHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RUYXNrKiByZWZHUHRyPEdz
dFRhc2s+KEdzdFRhc2sqIHB0cikKK3sKKyAgICBpZiAocHRyKSB7CisgICAgICAgIGdzdF9vYmpl
Y3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7CisgICAgICAgIGdzdF9vYmplY3Rfc2luayhHU1RfT0JK
RUNUKHB0cikpOworICAgIH0KKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZv
aWQgZGVyZWZHUHRyPEdzdFRhc2s+KEdzdFRhc2sqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAg
ICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKIH0KICNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKaW5kZXggNzhlNTExMS4uZDBjOTI3NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQ
dHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCkBAIC0yNiw2ICsyNiw3IEBACiB0eXBlZGVmIHN0cnVj
dCBfR3N0RWxlbWVudCBHc3RFbGVtZW50OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdFBhZCBHc3RQYWQ7
CiB0eXBlZGVmIHN0cnVjdCBfR3N0Q2FwcyBHc3RDYXBzOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFRh
c2sgR3N0VGFzazsKIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTQwLDYgKzQxLDEwIEBAIHRlbXBs
YXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0UGFkPihHc3RQYWQqIHB0cik7CiB0ZW1wbGF0ZTw+IEdz
dENhcHMqIHJlZkdQdHI8R3N0Q2Fwcz4oR3N0Q2FwcyogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBk
ZXJlZkdQdHI8R3N0Q2Fwcz4oR3N0Q2FwcyogcHRyKTsKIAordGVtcGxhdGU8PiBHUmVmUHRyPEdz
dFRhc2s+IGFkb3B0R1JlZihHc3RUYXNrKiBwdHIpOwordGVtcGxhdGU8PiBHc3RUYXNrKiByZWZH
UHRyPEdzdFRhc2s+KEdzdFRhc2sqIHB0cik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdz
dFRhc2s+KEdzdFRhc2sqIHB0cik7CisKIH0KIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCi0t
IAoxLjcuNy4z
</data>
<flag name="review"
          id="115499"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>