<?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>48032</bug_id>
          
          <creation_ts>2010-10-20 17:17:48 -0700</creation_ts>
          <short_desc>[chromium] Added PluginLayerChromium for hardware accelerated compositing of plugins</short_desc>
          <delta_ts>2010-11-02 21:17:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Al">apatrick</reporter>
          <assigned_to name="Al">apatrick</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fishd</cc>
    
    <cc>kbr</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>297159</commentid>
    <comment_count>0</comment_count>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-20 17:17:48 -0700</bug_when>
    <thetext>PluginLayerChromium composites plugin instances that have an OpenGL texture ID in the namespace of the compositor with the rest of the page. I also modified WebPlugin, WebPluginContainer and WebPluginContainerImpl so they can propagate a plugin backing texture ID to the accelerated compositor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297180</commentid>
    <comment_count>1</comment_count>
      <attachid>71375</attachid>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-20 17:52:27 -0700</bug_when>
    <thetext>Created attachment 71375
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297658</commentid>
    <comment_count>2</comment_count>
      <attachid>71375</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-10-21 14:44:40 -0700</bug_when>
    <thetext>Comment on attachment 71375
Patch

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

&gt; WebCore/ChangeLog:7
&gt; +
&gt; +        Added PluginLayerChromium, which composites plugin instances that have an associated OpenGL backing texture.

nit: typically the (short) description goes before the bug URL.

Also, it&apos;s somewhat common to start the description with [chromium] if the patch affects only chromium code.

&gt; WebCore/loader/SubframeLoader.cpp:370
&gt; +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || USE(ACCELERATED_COMPOSITING)

Is there any way to check that this change won&apos;t negatively affect other WebKit ports?

&gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:736
&gt; +            || !m_videoLayerSharedValues-&gt;initialized() || !m_pluginLayerSharedValues-&gt;initialized()) {

formating: || should align with !m_layerSharedValues of the line above it

&gt; WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:117
&gt; +    GLC(context, context-&gt;texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST));

It&apos;s somewhat wasteful to set the sampler settings every time you draw.  This block of 4 sets could move to setTextureId() ?

&gt; WebCore/platform/graphics/chromium/PluginLayerChromium.h:41
&gt; +// A Layer containing a WebGL or accelerated 2d canvas

Please update the comment.

&gt; WebKit/chromium/ChangeLog:7
&gt; +        Plugin instances can propagate the ID of the OpenGL texture thy render to.

typo: thy

&gt; WebKit/chromium/public/WebPluginContainer.h:59
&gt; +    virtual unsigned getBackingTextureId() { return 0; }

WebPluginContainer is an abstract class.  Ideally we don&apos;t want to change than by providing default implementations here.

&gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:291
&gt; +unsigned WebPluginContainerImpl::getBackingTextureId()

these two methods need to have #if USE(ACCELERATED_COMPOSITING) guards.

&gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:410
&gt; +    unsigned backingTextureId = m_webPlugin-&gt;getBackingTextureId();

In a lost context scenario, the GL context used by the compositor will change.  The texture used by the plugin needs to be re-created and passed again to the layer. I&apos;m realizing that none of the other layer types that manage their own textures (e.g. Video and WebGL) do that correctly either.

&gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:414
&gt; +    static_cast&lt;PluginLayerChromium*&gt;(m_platformLayer.get())-&gt;setTextureId(backingTextureId);

If m_platformLayer becomes a PluginLayerChromium then you can also get rid of that cast.

&gt; WebKit/chromium/src/WebPluginContainerImpl.h:146
&gt; +    RefPtr&lt;WebCore::LayerChromium&gt; m_platformLayer;

Might be better for clarity to use the specific layer type (PluginLayerChromium) here.

Also, needs to be inside #if USE(ACCELERATED_COMPOSITING) guards</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298118</commentid>
    <comment_count>3</comment_count>
      <attachid>71587</attachid>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-22 12:51:34 -0700</bug_when>
    <thetext>Created attachment 71587
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298180</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-22 14:30:48 -0700</bug_when>
    <thetext>Attachment 71587 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:735:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 13 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>298281</commentid>
    <comment_count>5</comment_count>
      <attachid>71615</attachid>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-22 17:26:52 -0700</bug_when>
    <thetext>Created attachment 71615
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298283</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-22 17:29:00 -0700</bug_when>
    <thetext>Attachment 71615 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:735:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 1 in 12 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>298301</commentid>
    <comment_count>7</comment_count>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-22 18:42:26 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=71587) [details]
&gt; Patch

(In reply to comment #2)
&gt; (From update of attachment 71375 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71375&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:7
&gt; &gt; +
&gt; &gt; +        Added PluginLayerChromium, which composites plugin instances that have an associated OpenGL backing texture.
&gt; 
&gt; nit: typically the (short) description goes before the bug URL.
&gt; 

Done

&gt; Also, it&apos;s somewhat common to start the description with [chromium] if the patch affects only chromium code.
&gt; 

Done

&gt; &gt; WebCore/loader/SubframeLoader.cpp:370
&gt; &gt; +#if ENABLE(PLUGIN_PROXY_FOR_VIDEO) || USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; Is there any way to check that this change won&apos;t negatively affect other WebKit ports?
&gt; 

It turns out this change was not necessary. I reverted it.

&gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:736
&gt; &gt; +            || !m_videoLayerSharedValues-&gt;initialized() || !m_pluginLayerSharedValues-&gt;initialized()) {
&gt; 
&gt; formating: || should align with !m_layerSharedValues of the line above it
&gt; 

Done but now webkit-check-style says it should be to the right on the line above.

&gt; &gt; WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:117
&gt; &gt; +    GLC(context, context-&gt;texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
&gt; 
&gt; It&apos;s somewhat wasteful to set the sampler settings every time you draw.  This block of 4 sets could move to setTextureId() ?
&gt;

I will optimize this later.
 
&gt; &gt; WebCore/platform/graphics/chromium/PluginLayerChromium.h:41
&gt; &gt; +// A Layer containing a WebGL or accelerated 2d canvas
&gt; 
&gt; Please update the comment.
&gt;

Done.
 
&gt; &gt; WebKit/chromium/ChangeLog:7
&gt; &gt; +        Plugin instances can propagate the ID of the OpenGL texture thy render to.
&gt; 
&gt; typo: thy
&gt;

Done.
 
&gt; &gt; WebKit/chromium/public/WebPluginContainer.h:59
&gt; &gt; +    virtual unsigned getBackingTextureId() { return 0; }
&gt; 
&gt; WebPluginContainer is an abstract class.  Ideally we don&apos;t want to change than by providing default implementations here.
&gt;

I will make them pure virtual when this is rolled into chromium.
 
&gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:291
&gt; &gt; +unsigned WebPluginContainerImpl::getBackingTextureId()
&gt; 
&gt; these two methods need to have #if USE(ACCELERATED_COMPOSITING) guards.
&gt; 

Done.

&gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:410
&gt; &gt; +    unsigned backingTextureId = m_webPlugin-&gt;getBackingTextureId();
&gt; 
&gt; In a lost context scenario, the GL context used by the compositor will change.  The texture used by the plugin needs to be re-created and passed again to the layer. I&apos;m realizing that none of the other layer types that manage their own textures (e.g. Video and WebGL) do that correctly either.
&gt;

I will address this when we get the accelerated compositor recovering from context lost.

 
&gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:414
&gt; &gt; +    static_cast&lt;PluginLayerChromium*&gt;(m_platformLayer.get())-&gt;setTextureId(backingTextureId);
&gt; 
&gt; If m_platformLayer becomes a PluginLayerChromium then you can also get rid of that cast.
&gt;

Done.
 
&gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.h:146
&gt; &gt; +    RefPtr&lt;WebCore::LayerChromium&gt; m_platformLayer;
&gt; 
&gt; Might be better for clarity to use the specific layer type (PluginLayerChromium) here.
&gt; 
&gt; Also, needs to be inside #if USE(ACCELERATED_COMPOSITING) guards

Done and done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298921</commentid>
    <comment_count>8</comment_count>
      <attachid>71615</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-10-25 09:48:20 -0700</bug_when>
    <thetext>Comment on attachment 71615
Patch

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

&gt; WebCore/ChangeLog:10
&gt; +        * loader/SubframeLoader.cpp:

You&apos;ll need to regenerate the ChangeLog or remove SubframeLoader entry.

&gt; WebKit/chromium/public/WebPlugin.h:70
&gt; +    // TODO(apatrick): Make this pure virtual once this change is rolled into chromium.

WebKit doesn&apos;t have TODO(name).  Please use &quot;FIXME&quot; instead (no name)

&gt; WebKit/chromium/public/WebPluginContainer.h:59
&gt; +    // TODO(apatrick): Make this pure virtual once this change is rolled into chromium.

Same for this TODO

&gt; WebKit/chromium/public/WebPluginContainer.h:63
&gt; +    // TODO(apatrick): Make this pure virtual once this change is rolled into chromium.

And here

&gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:292
&gt; +

nit: typically there are no blank after the #if or before the #end</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298923</commentid>
    <comment_count>9</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2010-10-25 09:50:59 -0700</bug_when>
    <thetext>&gt; 
&gt; &gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:736
&gt; &gt; &gt; +            || !m_videoLayerSharedValues-&gt;initialized() || !m_pluginLayerSharedValues-&gt;initialized()) {
&gt; &gt; 
&gt; &gt; formating: || should align with !m_layerSharedValues of the line above it
&gt; &gt; 
&gt; 
&gt; Done but now webkit-check-style says it should be to the right on the line above.
&gt; 
It&apos;s because the boolean || needs to be moved to the line below but line up with the contents of line above.

&gt; &gt; &gt; WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:117
&gt; &gt; &gt; +    GLC(context, context-&gt;texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
&gt; &gt; 
&gt; &gt; It&apos;s somewhat wasteful to set the sampler settings every time you draw.  This block of 4 sets could move to setTextureId() ?
&gt; &gt;
&gt; 
&gt; I will optimize this later.
&gt; 

Please add a FIXME so that we don&apos;t forget.


&gt; &gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:410
&gt; &gt; &gt; +    unsigned backingTextureId = m_webPlugin-&gt;getBackingTextureId();
&gt; &gt; 
&gt; &gt; In a lost context scenario, the GL context used by the compositor will change.  The texture used by the plugin needs to be re-created and passed again to the layer. I&apos;m realizing that none of the other layer types that manage their own textures (e.g. Video and WebGL) do that correctly either.
&gt; &gt;
&gt; 
&gt; I will address this when we get the accelerated compositor recovering from context lost.
&gt; 
Please add a FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299159</commentid>
    <comment_count>10</comment_count>
      <attachid>71809</attachid>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-25 16:09:45 -0700</bug_when>
    <thetext>Created attachment 71809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299164</commentid>
    <comment_count>11</comment_count>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-25 16:18:29 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 71615 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71615&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:10
&gt; &gt; +        * loader/SubframeLoader.cpp:
&gt; 
&gt; You&apos;ll need to regenerate the ChangeLog or remove SubframeLoader entry.
&gt; 

I had to add this file back. I removed the [chromium] tag since it isn&apos;t chromium specific.

&gt; &gt; WebKit/chromium/public/WebPlugin.h:70
&gt; &gt; +    // TODO(apatrick): Make this pure virtual once this change is rolled into chromium.
&gt; 
&gt; WebKit doesn&apos;t have TODO(name).  Please use &quot;FIXME&quot; instead (no name)
&gt; 

Done

&gt; &gt; WebKit/chromium/public/WebPluginContainer.h:59
&gt; &gt; +    // TODO(apatrick): Make this pure virtual once this change is rolled into chromium.
&gt; 
&gt; Same for this TODO
&gt; 

Done

&gt; &gt; WebKit/chromium/public/WebPluginContainer.h:63
&gt; &gt; +    // TODO(apatrick): Make this pure virtual once this change is rolled into chromium.
&gt; 
&gt; And here
&gt;

Done
 
&gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:292
&gt; &gt; +
&gt; 
&gt; nit: typically there are no blank after the #if or before the #end

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299165</commentid>
    <comment_count>12</comment_count>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-25 16:19:04 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; 
&gt; &gt; &gt; &gt; WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:736
&gt; &gt; &gt; &gt; +            || !m_videoLayerSharedValues-&gt;initialized() || !m_pluginLayerSharedValues-&gt;initialized()) {
&gt; &gt; &gt; 
&gt; &gt; &gt; formating: || should align with !m_layerSharedValues of the line above it
&gt; &gt; &gt; 
&gt; &gt; 
&gt; &gt; Done but now webkit-check-style says it should be to the right on the line above.
&gt; &gt; 
&gt; It&apos;s because the boolean || needs to be moved to the line below but line up with the contents of line above.
&gt; 

Done

&gt; &gt; &gt; &gt; WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:117
&gt; &gt; &gt; &gt; +    GLC(context, context-&gt;texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST));
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s somewhat wasteful to set the sampler settings every time you draw.  This block of 4 sets could move to setTextureId() ?
&gt; &gt; &gt;
&gt; &gt; 
&gt; &gt; I will optimize this later.
&gt; &gt; 
&gt; 
&gt; Please add a FIXME so that we don&apos;t forget.
&gt; 
&gt;

Done
 
&gt; &gt; &gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:410
&gt; &gt; &gt; &gt; +    unsigned backingTextureId = m_webPlugin-&gt;getBackingTextureId();
&gt; &gt; &gt; 
&gt; &gt; &gt; In a lost context scenario, the GL context used by the compositor will change.  The texture used by the plugin needs to be re-created and passed again to the layer. I&apos;m realizing that none of the other layer types that manage their own textures (e.g. Video and WebGL) do that correctly either.
&gt; &gt; &gt;
&gt; &gt; 
&gt; &gt; I will address this when we get the accelerated compositor recovering from context lost.
&gt; &gt; 
&gt; Please add a FIXME

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299844</commentid>
    <comment_count>13</comment_count>
      <attachid>71809</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-10-26 15:22:57 -0700</bug_when>
    <thetext>Comment on attachment 71809
Patch

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

This looks good to me. I&apos;m only marking it r- because of the copyright headers. Please update them and re-upload the patch.

&gt; WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:28
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

It turns out that this is the wrong form of license header for contributed code to WebKit. Even though other files in this directory are also incorrect, let&apos;s not propagate the error further. You can find the correct header under WebKit/LICENSE or a C++ formatted version with the Google copyright in e.g. WebKit/chromium/tests/PODIntervalTreeTest.cpp.

&gt; WebCore/platform/graphics/chromium/PluginLayerChromium.h:28
&gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Fix copyright header here too.

&gt; WebKit/chromium/public/WebPlugin.h:68
&gt; +    // If the plugin instance is backed by an OpenGL, return its ID in the

by an OpenGL -&gt; by an OpenGL context (?)

&gt; WebKit/chromium/public/WebPluginContainer.h:57
&gt; +    // If the plugin instance is backed by an OpenGL, return its ID in the

Same as above.

&gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:291
&gt; +#if USE(ACCELERATED_COMPOSITING)

If the intent is to make WebPluginContainer::getBackingTextureId() pure virtual then you need an alternate path when USE(ACCELERATED_COMPOSITING) is not enabled. Perhaps conditionalize the method bodies.

&gt; WebKit/chromium/src/WebPluginContainerImpl.h:92
&gt; +#if USE(ACCELERATED_COMPOSITING)

Same comment as above about USE(ACCELERATED_COMPOSITING).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300031</commentid>
    <comment_count>14</comment_count>
      <attachid>71809</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-10-26 23:45:36 -0700</bug_when>
    <thetext>Comment on attachment 71809
Patch

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

&gt; WebKit/chromium/public/WebPlugin.h:70
&gt; +    // FIXME: Make this pure virtual once this change is rolled into chromium.

note: methods implemented by the embedder do not need to be pure virtual.
it is actually encouraged to make them have default implementations to
simplify webkit rolls.

&gt; WebKit/chromium/public/WebPluginContainer.h:60
&gt; +    virtual unsigned getBackingTextureId() { return 0; };

why do you need this method here?  can&apos;t callers just get the WebPlugin
from the WebPluginContainer and call getBackingTextureId from there?

nit: no trailing &quot;;&quot;

&gt; WebKit/chromium/public/WebPluginContainer.h:64
&gt; +    virtual void commitBackingTexture() {};

nit: no trailing &quot;;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300666</commentid>
    <comment_count>15</comment_count>
      <attachid>72104</attachid>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-27 15:59:13 -0700</bug_when>
    <thetext>Created attachment 72104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300668</commentid>
    <comment_count>16</comment_count>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-27 16:02:21 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 71809 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71809&amp;action=review
&gt; 
&gt; This looks good to me. I&apos;m only marking it r- because of the copyright headers. Please update them and re-upload the patch.
&gt; 
&gt; &gt; WebCore/platform/graphics/chromium/PluginLayerChromium.cpp:28
&gt; &gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; 
&gt; It turns out that this is the wrong form of license header for contributed code to WebKit. Even though other files in this directory are also incorrect, let&apos;s not propagate the error further. You can find the correct header under WebKit/LICENSE or a C++ formatted version with the Google copyright in e.g. WebKit/chromium/tests/PODIntervalTreeTest.cpp.
&gt; 

Done

&gt; &gt; WebCore/platform/graphics/chromium/PluginLayerChromium.h:28
&gt; &gt; + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
&gt; 
&gt; Fix copyright header here too.
&gt;

Done
 
&gt; &gt; WebKit/chromium/public/WebPlugin.h:68
&gt; &gt; +    // If the plugin instance is backed by an OpenGL, return its ID in the
&gt; 
&gt; by an OpenGL -&gt; by an OpenGL context (?)
&gt; 

Done

&gt; &gt; WebKit/chromium/public/WebPluginContainer.h:57
&gt; &gt; +    // If the plugin instance is backed by an OpenGL, return its ID in the
&gt; 
&gt; Same as above.
&gt; 

Done

&gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:291
&gt; &gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; If the intent is to make WebPluginContainer::getBackingTextureId() pure virtual then you need an alternate path when USE(ACCELERATED_COMPOSITING) is not enabled. Perhaps conditionalize the method bodies.
&gt; 

As fishd advised, this will not be pure virtual.

&gt; &gt; WebKit/chromium/src/WebPluginContainerImpl.h:92
&gt; &gt; +#if USE(ACCELERATED_COMPOSITING)
&gt; 
&gt; Same comment as above about USE(ACCELERATED_COMPOSITING).

As above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300669</commentid>
    <comment_count>17</comment_count>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-27 16:02:57 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 71809 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71809&amp;action=review
&gt; 
&gt; &gt; WebKit/chromium/public/WebPlugin.h:70
&gt; &gt; +    // FIXME: Make this pure virtual once this change is rolled into chromium.
&gt; 
&gt; note: methods implemented by the embedder do not need to be pure virtual.
&gt; it is actually encouraged to make them have default implementations to
&gt; simplify webkit rolls.
&gt; 

Done

&gt; &gt; WebKit/chromium/public/WebPluginContainer.h:60
&gt; &gt; +    virtual unsigned getBackingTextureId() { return 0; };
&gt; 
&gt; why do you need this method here?  can&apos;t callers just get the WebPlugin
&gt; from the WebPluginContainer and call getBackingTextureId from there?
&gt;

Done
 
&gt; nit: no trailing &quot;;&quot;
&gt; 
&gt; &gt; WebKit/chromium/public/WebPluginContainer.h:64
&gt; &gt; +    virtual void commitBackingTexture() {};
&gt; 
&gt; nit: no trailing &quot;;&quot;

Done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301491</commentid>
    <comment_count>18</comment_count>
      <attachid>72270</attachid>
    <who name="Al">apatrick</who>
    <bug_when>2010-10-28 17:33:16 -0700</bug_when>
    <thetext>Created attachment 72270
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303186</commentid>
    <comment_count>19</comment_count>
      <attachid>72270</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-01 20:17:38 -0700</bug_when>
    <thetext>Comment on attachment 72270
Patch

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

Sorry I didn&apos;t catch this earlier, but:

&gt; WebKit/chromium/src/WebPluginContainerImpl.cpp:426
&gt; +    , m_platformLayer(PluginLayerChromium::create(0))

Doesn&apos;t the initialization of m_platformLayer need to be guarded with #if USE(ACCELERATED_COMPOSITING)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303753</commentid>
    <comment_count>20</comment_count>
      <attachid>72758</attachid>
    <who name="Al">apatrick</who>
    <bug_when>2010-11-02 16:05:15 -0700</bug_when>
    <thetext>Created attachment 72758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303759</commentid>
    <comment_count>21</comment_count>
      <attachid>72758</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-11-02 16:07:45 -0700</bug_when>
    <thetext>Comment on attachment 72758
Patch

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303884</commentid>
    <comment_count>22</comment_count>
      <attachid>72758</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-02 21:17:15 -0700</bug_when>
    <thetext>Comment on attachment 72758
Patch

Clearing flags on attachment: 72758

Committed r71210: &lt;http://trac.webkit.org/changeset/71210&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303885</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-11-02 21:17:22 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71375</attachid>
            <date>2010-10-20 17:52:27 -0700</date>
            <delta_ts>2010-10-22 12:51:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48032-20101020175225.patch</filename>
            <type>text/plain</type>
            <size>22761</size>
            <attacher name="Al">apatrick</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MDMyCisKKyAgICAgICAg
QWRkZWQgUGx1Z2luTGF5ZXJDaHJvbWl1bSwgd2hpY2ggY29tcG9zaXRlcyBwbHVnaW4gaW5zdGFu
Y2VzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkIE9wZW5HTCBiYWNraW5nIHRleHR1cmUuCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxheSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoYXJlZE9i
amVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVw
U2hhcmVkT2JqZWN0cyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OnBsdWdpbkxheWVyU2hhcmVkVmFsdWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyk6
CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5T
aGFyZWRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVy
Q2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1
bS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmRyYXdz
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0
dXJlSWQpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFs
dWVzOjpzaGFkZXJQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlczo6c2hhZGVyU2FtcGxlckxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6c2hhZGVyTWF0cml4TG9jYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
OjpzaGFkZXJBbHBoYUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6aW5pdGlhbGl6ZWQpOgorCiAyMDEwLTEwLTIwICBTaGVyaWZm
IEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByNzAxNjUuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzAxNzUpCisrKyBXZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjQzOCw2ICsyNDM4LDggQEAKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQ
cml2YXRlQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGxhdGZvcm1JY29uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4
LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJl
bmN5V2luLmNwcCcsCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA3
MDE3NSkKKysrIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzY3LDcgKzM2Nyw3IEBAIGJvb2wgU3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4oSFRN
TFBsdWcKICAgICByZW5kZXJlci0+c2V0V2lkZ2V0KHdpZGdldCk7CiAgICAgbV9jb250YWluc1Bs
dWdpbnMgPSB0cnVlOwogCi0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisjaWYg
RU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pIHx8IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKICAgICBwbHVnaW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0
eWxlQ2hhbmdlKTsKICNlbmRpZgogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCShyZXZp
c2lvbiA3MDE3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2OCw2ICszNjgsNyBAQCB2b2lkIExheWVy
Q2hyb21pdW06OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZSht
X2JvdW5kcyk7CiAgICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKKyAgICBzZXROZWVkc0NvbW1p
dCgpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDcwMTc1KQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03MzAsNyArNzMwLDEwIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpp
bml0aWFsaXplU2gKICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5l
dyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwog
ICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fdmlkZW9MYXll
clNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZh
bHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmlu
aXRpYWxpemVkKCkgfHwgIW1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgp
IHx8ICFtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX3ZpZGVv
TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICBtX3BsdWdpbkxheWVyU2hh
cmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVl
cyhtX2NvbnRleHQuZ2V0KCkpKTsKKworICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5p
dGlhbGl6ZWQoKSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkg
fHwgIW1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkKKyAgICAgICAgICAg
IHx8ICFtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fcGx1Z2lu
TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgY2xlYW51cFNoYXJl
ZE9iamVjdHMoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTc0Niw2ICs3NDks
NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlCiAgICAgbV9jb250
ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFs
dWVzLmNsZWFyKCk7CiAgICAgbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAg
bV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOwogCiAgICAgaWYgKG1fc2Nyb2xsU2hh
ZGVyUHJvZ3JhbSkgewogICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVBy
b2dyYW0obV9zY3JvbGxTaGFkZXJQcm9ncmFtKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJ
KHJldmlzaW9uIDcwMTc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAog
I2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0u
aCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMTA2LDYgKzEwNyw3IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5
ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVl
cy5nZXQoKTsgfQogICAgIGNvbnN0IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyog
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhc0xheWVyU2hh
cmVkVmFsdWVzLmdldCgpOyB9CiAgICAgY29uc3QgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXMqIHZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5
ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KKyAgICBjb25zdCBQbHVnaW5MYXllckNocm9taXVtOjpT
aGFyZWRWYWx1ZXMqIHBsdWdpbkxheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9w
bHVnaW5MYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVl
bkNvbnRlbnQoY29uc3QgSW50U2l6ZSYpOwogCkBAIC0xNzksNiArMTgxLDcgQEAgcHJpdmF0ZToK
ICAgICBPd25QdHI8Q29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9jb250ZW50
TGF5ZXJTaGFyZWRWYWx1ZXM7CiAgICAgT3duUHRyPENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlcz4gbV9jYW52YXNMYXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8VmlkZW9MYXll
ckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1fdmlkZW9MYXllclNoYXJlZFZhbHVlczsKKyAgICBP
d25QdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX3BsdWdpbkxheWVyU2hh
cmVkVmFsdWVzOwogCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiB9
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCisK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1BsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X3NoYWRlclByb2dyYW0oMCkKKyAgICAsIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uKC0xKQorICAg
ICwgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyQWxwaGFMb2NhdGlv
bigtMSkKKyAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCit7CisgICAgY2hhciB2ZXJ0ZXhTaGFk
ZXJTdHJpbmdbXSA9CisgICAgICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgor
ICAgICAgICAiYXR0cmlidXRlIHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgInVuaWZv
cm0gbWF0NCBtYXRyaXg7ICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhD
b29yZDsgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIK
KyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGds
X1Bvc2l0aW9uID0gbWF0cml4ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICIgIHZfdGV4Q29v
cmQgPSBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcbiI7CisKKyAgICBjaGFyIGZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
ICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICB2
ZWM0IHRleENvbG9yID0gdGV4dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIHZf
dGV4Q29vcmQueSkpOyBcbiIKKyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xv
ci54LCB0ZXhDb2xvci55LCB0ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyAg
ICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiI7CisKKyAgICBtX3NoYWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKG1fY29u
dGV4dCwgdmVydGV4U2hhZGVyU3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgaWYg
KCFtX3NoYWRlclByb2dyYW0pIHsKKyAgICAgICAgTE9HX0VSUk9SKCJQbHVnaW5MYXllckNocm9t
aXVtOiBGYWlsZWQgdG8gY3JlYXRlIHNoYWRlciBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1fc2hhZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOworICAgIG1fc2hhZGVy
TWF0cml4TG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclBy
b2dyYW0sICJtYXRyaXgiKTsKKyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW0sICJhbHBoYSIpOworICAgIEFTU0VS
VChtX3NoYWRlclNhbXBsZXJMb2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fc2hhZGVyTWF0
cml4TG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3NoYWRlckFscGhhTG9jYXRpb24gIT0g
LTEpOworCisgICAgbV9pbml0aWFsaXplZCA9IHRydWU7Cit9CisKK1BsdWdpbkxheWVyQ2hyb21p
dW06OlNoYXJlZFZhbHVlczo6flNoYXJlZFZhbHVlcygpCit7CisgICAgaWYgKG1fc2hhZGVyUHJv
Z3JhbSkKKyAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1f
c2hhZGVyUHJvZ3JhbSkpOworfQorCitQYXNzUmVmUHRyPFBsdWdpbkxheWVyQ2hyb21pdW0+IFBs
dWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQor
eworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bShvd25lcikpOwor
fQorCitQbHVnaW5MYXllckNocm9taXVtOjpQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpCisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQoreworfQorCit2
b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKK3sKK30KKwordm9pZCBQ
bHVnaW5MYXllckNocm9taXVtOjpkcmF3KCkKK3sKKyAgICBBU1NFUlQobGF5ZXJSZW5kZXJlcigp
KTsKKyAgICBjb25zdCBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHN2ID0gbGF5
ZXJSZW5kZXJlcigpLT5wbHVnaW5MYXllclNoYXJlZFZhbHVlcygpOworICAgIEFTU0VSVChzdiAm
JiBzdi0+aW5pdGlhbGl6ZWQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBs
YXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3RpdmVU
ZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBH
TF9ORUFSRVNUKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFSRVNUKSk7CisgICAgR0xD
KGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVS
RV9XUkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBf
VE9fRURHRSkpOworICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5zaGFkZXJQcm9n
cmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnNoYWRlclNh
bXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBsYXll
clJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAorICAgICAg
ICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRyYXdP
cGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyTWF0cml4TG9jYXRpb24o
KSwgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7Cit9CisKK30KKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1
bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFBsdWdpbkxheWVyQ2hy
b21pdW1faAorI2RlZmluZSBQbHVnaW5MYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBBIExheWVyIGNvbnRhaW5pbmcgYSBXZWJHTCBvciBhY2NlbGVy
YXRlZCAyZCBjYW52YXMKK2NsYXNzIFBsdWdpbkxheWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJD
aHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8UGx1Z2luTGF5ZXJDaHJv
bWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIgPSAwKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb250ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3KCk7CisgICAgCisgICAg
dm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKQorICAgIHsKKyAgICAgICAgbV90
ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CisgICAgfQorICAgIAorICAgIGNsYXNzIFNoYXJlZFZhbHVl
cyB7CisgICAgcHVibGljOgorICAgICAgICBTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpOworICAgICAgICB+U2hhcmVkVmFsdWVzKCk7CisKKyAgICAgICAgdW5zaWduZWQg
c2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyUHJvZ3JhbTsgfQorICAgICAg
ICBpbnQgc2hhZGVyU2FtcGxlckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJTYW1w
bGVyTG9jYXRpb247IH0KKyAgICAgICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBpbnQgc2hhZGVyQWxw
aGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsgfQorICAg
ICAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAg
ICAgICAgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtOworICAgICAgICBpbnQgbV9zaGFkZXJTYW1w
bGVyTG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlck1hdHJpeExvY2F0aW9uOworICAgICAg
ICBpbnQgbV9zaGFkZXJBbHBoYUxvY2F0aW9uOworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7
CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworfTsKKworfQor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcwMTk0KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEwLTEwLTIwICBBbCBQYXRyaWNrICA8
YXBhdHJpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
ODAzMgorCisgICAgICAgIFBsdWdpbiBpbnN0YW5jZXMgY2FuIHByb3BhZ2F0ZSB0aGUgSUQgb2Yg
dGhlIE9wZW5HTCB0ZXh0dXJlIHRoeSByZW5kZXIgdG8uCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
UGx1Z2luLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbjo6Z2V0QmFja2luZ1RleHR1cmVJ
ZCk6CisgICAgICAgICogcHVibGljL1dlYlBsdWdpbkNvbnRhaW5lci5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQbHVnaW5Db250YWluZXI6OmdldEJhY2tpbmdUZXh0dXJlSWQpOgorICAgICAgICAo
V2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXI6OmNvbW1pdEJhY2tpbmdUZXh0dXJlKToKKyAgICAg
ICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBsdWdpbkNvbnRhaW5lckltcGw6OmdldEJhY2tpbmdUZXh0dXJlSWQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb21taXRCYWNraW5nVGV4dHVyZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OnBsYXRmb3JtTGF5ZXIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpXZWJQbHVnaW5Db250YWluZXJJ
bXBsKToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oOgorCiAyMDEwLTEw
LTIwICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNzAxNjUuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGx1Z2luLmgJKHJldmlzaW9uIDcwMTc1KQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJQbHVnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTAgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeSgKICAgICAgICAgY29uc3QgV2ViUmVjdCYgZnJh
bWVSZWN0LCBjb25zdCBXZWJSZWN0JiBjbGlwUmVjdCwKICAgICAgICAgY29uc3QgV2ViVmVjdG9y
PFdlYlJlY3Q+JiBjdXRPdXRzUmVjdHMsIGJvb2wgaXNWaXNpYmxlKSA9IDA7CisgICAgCisgICAg
Ly8gSWYgdGhlIHBsdWdpbiBpbnN0YW5jZSBpcyBiYWNrZWQgYnkgYW4gT3BlbkdMLCByZXR1cm4g
aXRzIElEIGluIHRoZQorICAgIC8vIGNvbXBvc2l0b3JzIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIHJl
dHVybiAwLiBSZXR1cm5zIDAgYnkgZGVmYXVsdC4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGdldEJh
Y2tpbmdUZXh0dXJlSWQoKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
Rm9jdXMoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmlsaXR5KGJvb2wp
ID0gMDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5Db250YWluZXIu
aAkocmV2aXNpb24gNzAxNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbkNv
bnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxMyBAQCBwdWJsaWM6CiAgICAg
Ly8gV2ViUGx1Z2luOjp1cGRhdGVHZW9tZXRyeS4KICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0R2Vv
bWV0cnkoKSA9IDA7CiAKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGluc3RhbmNlIGlzIGJhY2tlZCBi
eSBhbiBPcGVuR0wsIHJldHVybiBpdHMgSUQgaW4gdGhlCisgICAgLy8gY29tcG9zaXRvcnMgbmFt
ZXNwYWNlLiBPdGhlcndpc2UgcmV0dXJuIDAuIFJldHVybnMgMCBieSBkZWZhdWx0LgorICAgIHZp
cnR1YWwgdW5zaWduZWQgZ2V0QmFja2luZ1RleHR1cmVJZCgpIHsgcmV0dXJuIDA7IH0KKyAgICAK
KyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYmFja2luZyB0ZXh0dXJlIGlzIHJlYWR5IHRvIGJlIGNv
bXBvc2l0ZWQuCisgICAgdmlydHVhbCB2b2lkIGNvbW1pdEJhY2tpbmdUZXh0dXJlKCkge30KKyAg
ICAKICAgICAvLyBEcm9wIGFueSByZWZlcmVuY2VzIHRvIHNjcmlwdCBvYmplY3RzIGFsbG9jYXRl
ZCBieSB0aGUgcGx1Z2luLgogICAgIC8vIFRoZXNlIGFyZSBvYmplY3RzIGRlcml2ZWQgZnJvbSBX
ZWJQbHVnaW46OnNjcmlwdGFibGVPYmplY3QuICBUaGlzIGlzCiAgICAgLy8gY2FsbGVkIHdoZW4g
dGhlIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQgb3IgaWYgaXQgbmVlZHMgdG8gYmUKSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2
aXNpb24gNzAxNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lcklt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJDaHJv
bWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luTGF5
ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIldlYkN1
cnNvckluZm8uaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgpAQCAtMjg3LDYgKzI4
OCwxNyBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcG9ydEdlb21lCiAgICAgbV93
ZWJQbHVnaW4tPnVwZGF0ZUdlb21ldHJ5KHdpbmRvd1JlY3QsIGNsaXBSZWN0LCBjdXRPdXRSZWN0
cywgaXNWaXNpYmxlKCkpOwogfQogCit1bnNpZ25lZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpn
ZXRCYWNraW5nVGV4dHVyZUlkKCkKK3sKKyAgICByZXR1cm4gbV93ZWJQbHVnaW4tPmdldEJhY2tp
bmdUZXh0dXJlSWQoKTsKK30KKwordm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb21taXRC
YWNraW5nVGV4dHVyZSgpCit7CisgICAgaWYgKHBsYXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgcGxh
dGZvcm1MYXllcigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKwogdm9pZCBXZWJQbHVnaW5Db250
YWluZXJJbXBsOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1f
ZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTM5Myw4ICs0MDUsMjcgQEAgdm9pZCBX
ZWJQbHVnaW5Db250YWluZXJJbXBsOjp3aWxsRGVzdHJveQogICAgIG1fcGx1Z2luTG9hZE9ic2Vy
dmVycy5yZW1vdmUocG9zKTsKIH0KIAorV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSogV2ViUGx1Z2lu
Q29udGFpbmVySW1wbDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgYmFj
a2luZ1RleHR1cmVJZCA9IG1fd2ViUGx1Z2luLT5nZXRCYWNraW5nVGV4dHVyZUlkKCk7CisgICAg
aWYgKCFiYWNraW5nVGV4dHVyZUlkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN0YXRpY19j
YXN0PFBsdWdpbkxheWVyQ2hyb21pdW0qPihtX3BsYXRmb3JtTGF5ZXIuZ2V0KCkpLT5zZXRUZXh0
dXJlSWQoYmFja2luZ1RleHR1cmVJZCk7CisKKyAgICByZXR1cm4gbV9wbGF0Zm9ybUxheWVyLmdl
dCgpOworfQorCiAvLyBQcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXZWJQbHVnaW5Db250YWluZXJJ
bXBsOjpXZWJQbHVnaW5Db250YWluZXJJbXBsKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBl
bGVtZW50LCBXZWJQbHVnaW4qIHdlYlBsdWdpbikKKyAgICA6IFdlYkNvcmU6OlBsdWdpblZpZXdC
YXNlKDApCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fd2ViUGx1Z2luKHdlYlBs
dWdpbikKKyAgICAsIG1fcGxhdGZvcm1MYXllcihQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGUo
MCkpCit7Cit9CisKIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWluZXJJ
bXBsKCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9ic2VydmVy
cy5zaXplKCk7ICsraSkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFp
bmVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5oCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGx1Z2luQ29udGFpbmVySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQAog
I2lmbmRlZiBXZWJQbHVnaW5Db250YWluZXJJbXBsX2gKICNkZWZpbmUgV2ViUGx1Z2luQ29udGFp
bmVySW1wbF9oCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUgIldlYlBs
dWdpbkNvbnRhaW5lci5oIgotCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCisKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDMsNiArNDQsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKIGNsYXNzIElu
dFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNz
IE1vdXNlRXZlbnQ7CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZTsKQEAgLTU0LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQbHVnaW47
CiBjbGFzcyBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXI7CiAKLWNsYXNzIFdlYlBsdWdpbkNvbnRhaW5l
ckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6V2lkZ2V0LCBwdWJsaWMgV2ViUGx1Z2luQ29udGFpbmVy
IHsKK2NsYXNzIFdlYlBsdWdpbkNvbnRhaW5lckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6UGx1Z2lu
Vmlld0Jhc2UsIHB1YmxpYyBXZWJQbHVnaW5Db250YWluZXIgewogcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYlBsdWdpbkNvbnRhaW5lckltcGw+IGNyZWF0ZShXZWJDb3JlOjpIVE1M
UGx1Z0luRWxlbWVudCogZWxlbWVudCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pCiAgICAgewpAQCAt
ODAsNiArODIsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGUoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3QgV2ViUmVjdCYpOwogICAgIHZpcnR1
YWwgdm9pZCByZXBvcnRHZW9tZXRyeSgpOworICAgIHZpcnR1YWwgdW5zaWduZWQgZ2V0QmFja2lu
Z1RleHR1cmVJZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRCYWNraW5nVGV4dHVyZSgpOwog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclNjcmlwdE9iamVjdHMoKTsKICAgICB2aXJ0dWFsIE5QT2Jq
ZWN0KiBzY3JpcHRhYmxlT2JqZWN0Rm9yRWxlbWVudCgpOwogICAgIHZpcnR1YWwgV2ViU3RyaW5n
IGV4ZWN1dGVTY3JpcHRVUkwoY29uc3QgV2ViVVJMJiwgYm9vbCBwb3B1cHNBbGxvd2VkKTsKQEAg
LTExNywxMCArMTIxLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2lsbERlc3Ryb3lQbHVnaW5M
b2FkT2JzZXJ2ZXIoV2ViUGx1Z2luTG9hZE9ic2VydmVyKik7CiAKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBXZWJDb3JlOjpMYXllckNocm9taXVtKiBwbGF0
Zm9ybUxheWVyKCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKLSAgICBXZWJQbHVnaW5Db250
YWluZXJJbXBsKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBXZWJQbHVnaW4q
IHdlYlBsdWdpbikKLSAgICAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCBtX3dl
YlBsdWdpbih3ZWJQbHVnaW4pIHsgfQorICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwoV2ViQ29y
ZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2luKTsKICAg
ICB+V2ViUGx1Z2luQ29udGFpbmVySW1wbCgpOwogCiAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50
KFdlYkNvcmU6Ok1vdXNlRXZlbnQqKTsKQEAgLTEzNyw2ICsxNDMsNyBAQCBwcml2YXRlOgogCiAg
ICAgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBXZWJQbHVnaW4q
IG1fd2ViUGx1Z2luOworICAgIFJlZlB0cjxXZWJDb3JlOjpMYXllckNocm9taXVtPiBtX3BsYXRm
b3JtTGF5ZXI7CiAgICAgVmVjdG9yPFdlYlBsdWdpbkxvYWRPYnNlcnZlcio+IG1fcGx1Z2luTG9h
ZE9ic2VydmVyczsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71587</attachid>
            <date>2010-10-22 12:51:34 -0700</date>
            <delta_ts>2010-10-22 17:26:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48032-20101022125133.patch</filename>
            <type>text/plain</type>
            <size>23328</size>
            <attacher name="Al">apatrick</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W2Nocm9taXVtXSBBZGRlZCBQbHVnaW5MYXllckNocm9taXVtLCB3aGljaCBjb21wb3NpdGVzIHBs
dWdpbiBpbnN0YW5jZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQgT3BlbkdMIGJhY2tpbmcgdGV4
dHVyZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDgwMzIKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVn
aW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNsZWFudXBTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6cGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hh
cmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlczo6flNoYXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNo
cm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6
UGx1Z2luTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21p
dW06OnNldFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM6OnNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJN
YXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpT
aGFyZWRWYWx1ZXM6OnNoYWRlckFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAtMTAt
MjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDE2NS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MDE3NSkK
KysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDM4LDYgKzI0Mzgs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
ZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbGF0Zm9ybUljb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdp
bi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZv
bnREYXRhTGludXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9h
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJ
KHJldmlzaW9uIDcwMTc1KQorKysgV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjcsNyArMzY3LDcgQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6bG9h
ZFBsdWdpbihIVE1MUGx1ZwogICAgIHJlbmRlcmVyLT5zZXRXaWRnZXQod2lkZ2V0KTsKICAgICBt
X2NvbnRhaW5zUGx1Z2lucyA9IHRydWU7CiAKLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9W
SURFTykKKyNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykgfHwgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIHBsdWdpbkVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMo
U3ludGhldGljU3R5bGVDaGFuZ2UpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDcwMTc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBA
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBtX2RpcnR5UmVj
dC5zZXRTaXplKG1fYm91bmRzKTsKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOworICAgIHNl
dE5lZWRzQ29tbWl0KCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzZXROZWVkc0Rpc3Bs
YXkoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzAxNzUpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTczMCw3ICs3MzAsMTAgQEAgYm9vbCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmluaXRpYWxpemVTaAogICAgIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzID0g
YWRvcHRQdHIobmV3IENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0
LmdldCgpKSk7CiAgICAgbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBD
YW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7CiAgICAg
bV92aWRlb0xheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV9sYXllclNoYXJl
ZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmlu
aXRpYWxpemVkKCkgfHwgIW1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkg
fHwgIW1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSkgeworICAgIG1fcGx1
Z2luTGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOworCisgICAgaWYgKCFtX2xheWVyU2hhcmVk
VmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy0+aW5p
dGlhbGl6ZWQoKSB8fCAhbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8
fAorICAgICAgICAhbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFt
X3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIGNsZWFu
dXBTaGFyZWRPYmplY3RzKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03NDYs
NiArNzQ5LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZQogICAg
IG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9jYW52YXNMYXllclNo
YXJlZFZhbHVlcy5jbGVhcigpOwogICAgIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy5jbGVhcigp
OworICAgIG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKIAogICAgIGlmIChtX3Nj
cm9sbFNoYWRlclByb2dyYW0pIHsKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5k
ZWxldGVQcm9ncmFtKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkpOwpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDcgQEAKICNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJD
aHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEwNiw2ICsxMDcsNyBAQCBw
dWJsaWM6CiAgICAgY29uc3QgQ29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29u
dGVudExheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJTaGFy
ZWRWYWx1ZXMuZ2V0KCk7IH0KICAgICBjb25zdCBDYW52YXNMYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXMqIGNhbnZhc0xheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXNM
YXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzKiB2aWRlb0xheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92
aWRlb0xheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CisgICAgY29uc3QgUGx1Z2luTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzKiBwbHVnaW5MYXllclNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0
dXJuIG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KIAogICAgIHZvaWQgcmVzaXpl
T25zY3JlZW5Db250ZW50KGNvbnN0IEludFNpemUmKTsKIApAQCAtMTc5LDYgKzE4MSw3IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1f
Y29udGVudExheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxDYW52YXNMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM+IG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXM7CiAgICAgT3duUHRyPFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXM7
CisgICAgT3duUHRyPFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9wbHVnaW5M
YXllclNoYXJlZFZhbHVlczsKIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250
ZXh0OwogfTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1
bS5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJl
bmRlcmVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVl
cyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQor
ICAgICwgbV9zaGFkZXJQcm9ncmFtKDApCisgICAgLCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbigt
MSkKKyAgICAsIG1fc2hhZGVyTWF0cml4TG9jYXRpb24oLTEpCisgICAgLCBtX3NoYWRlckFscGhh
TG9jYXRpb24oLTEpCisgICAgLCBtX2luaXRpYWxpemVkKGZhbHNlKQoreworICAgIGNoYXIgdmVy
dGV4U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsg
ICBcbiIKKyAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAg
ICJ1bmlmb3JtIG1hdDQgbWF0cml4OyAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMy
IHZfdGV4Q29vcmQ7ICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAg
ICAiICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgorICAgICAgICAiICB2
X3RleENvb3JkID0gYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iOworCisgICAgY2hhciBmcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAg
ICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAg
ICAgIiAgdmVjNCB0ZXhDb2xvciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZlYzIodl90ZXhDb29y
ZC54LCB2X3RleENvb3JkLnkpKTsgXG4iCisgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
dGV4Q29sb3IueCwgdGV4Q29sb3IueSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYTsg
XG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXG4iOworCisgICAgbV9zaGFkZXJQcm9ncmFtID0gY3JlYXRlU2hhZGVyUHJvZ3Jh
bShtX2NvbnRleHQsIHZlcnRleFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFkZXJTdHJpbmcpOwor
ICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigiUGx1Z2luTGF5
ZXJDaHJvbWl1bTogRmFpbGVkIHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKTsKKyAgICBt
X3NoYWRlck1hdHJpeExvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9z
aGFkZXJQcm9ncmFtLCAibWF0cml4Iik7CisgICAgbV9zaGFkZXJBbHBoYUxvY2F0aW9uID0gbV9j
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9zaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKKyAg
ICBBU1NFUlQobV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3No
YWRlck1hdHJpeExvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxvY2F0
aW9uICE9IC0xKTsKKworICAgIG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitQbHVnaW5MYXll
ckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6On5TaGFyZWRWYWx1ZXMoKQoreworICAgIGlmIChtX3No
YWRlclByb2dyYW0pCisgICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJv
Z3JhbShtX3NoYWRlclByb2dyYW0pKTsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5MYXllckNocm9t
aXVtPiBQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBv
d25lcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBsdWdpbkxheWVyQ2hyb21pdW0ob3du
ZXIpKTsKK30KKworUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKK3sK
K30KKwordm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQp
Cit7CisgICAgbV90ZXh0dXJlSWQgPSBpZDsKK30KKwordm9pZCBQbHVnaW5MYXllckNocm9taXVt
Ojp1cGRhdGVDb250ZW50cygpCit7Cit9CisKK3ZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJh
dygpCit7CisgICAgQVNTRVJUKGxheWVyUmVuZGVyZXIoKSk7CisgICAgY29uc3QgUGx1Z2luTGF5
ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+cGx1Z2luTGF5
ZXJTaGFyZWRWYWx1ZXMoKTsKKyAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsK
KyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3Rl
eHR1cmVJZCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFSKSk7CisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9N
QUdfRklMVEVSLCBHTF9MSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywgR0xfQ0xBTVBfVE9fRURH
RSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVf
MkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7CisgICAgbGF5ZXJSZW5k
ZXJlcigpLT51c2VTaGFkZXIoc3YtPnNoYWRlclByb2dyYW0oKSk7CisgICAgR0xDKGNvbnRleHQs
IGNvbnRleHQtPnVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxlckxvY2F0aW9uKCksIDApKTsKKyAg
ICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVuZGVyZXIoKS0+cHJvamVjdGlvbk1h
dHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS53
aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNpdHkoKSwKKyAgICAgICAgICAgICAg
ICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBzdi0+c2hhZGVyQWxwaGFMb2NhdGlv
bigpKTsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1
bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1
Z2luTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisKKyNpZm5kZWYgUGx1Z2luTGF5ZXJDaHJvbWl1bV9oCisjZGVmaW5lIFBsdWdpbkxh
eWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgTGF5
ZXIgY29udGFpbmluZyBhIHRoZSByZW5kZXJlZCBvdXRwdXQgb2YgYSBwbHVnaW4gaW5zdGFuY2Uu
CitjbGFzcyBQbHVnaW5MYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsdWdpbkxheWVyQ2hyb21pdW0+IGNyZWF0ZShH
cmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyID0gMCk7CisgICAgdmlydHVhbCBib29sIGRyYXdz
Q29udGVudCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVu
dHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhdygpOworICAgIAorICAgIHZvaWQgc2V0VGV4dHVy
ZUlkKHVuc2lnbmVkIHRleHR1cmVJZCk7CisgICAgICAgIAorICAgIGNsYXNzIFNoYXJlZFZhbHVl
cyB7CisgICAgcHVibGljOgorICAgICAgICBTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpOworICAgICAgICB+U2hhcmVkVmFsdWVzKCk7CisKKyAgICAgICAgdW5zaWduZWQg
c2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyUHJvZ3JhbTsgfQorICAgICAg
ICBpbnQgc2hhZGVyU2FtcGxlckxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJTYW1w
bGVyTG9jYXRpb247IH0KKyAgICAgICAgaW50IHNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9zaGFkZXJNYXRyaXhMb2NhdGlvbjsgfQorICAgICAgICBpbnQgc2hhZGVyQWxw
aGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsgfQorICAg
ICAgICBib29sIGluaXRpYWxpemVkKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAg
ICAgICAgdW5zaWduZWQgbV9zaGFkZXJQcm9ncmFtOworICAgICAgICBpbnQgbV9zaGFkZXJTYW1w
bGVyTG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlck1hdHJpeExvY2F0aW9uOworICAgICAg
ICBpbnQgbV9zaGFkZXJBbHBoYUxvY2F0aW9uOworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7
CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5
ZXJDaHJvbWl1bSogb3duZXIpOworICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOworfTsKKworfQor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cJKHJldmlzaW9uIDcwMTk0KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzIEBACisyMDEwLTEwLTIwICBBbCBQYXRyaWNrICA8
YXBhdHJpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFBsdWdpbiBpbnN0YW5jZXMgY2FuIHByb3BhZ2F0ZSB0aGUgSUQgb2Yg
dGhlIE9wZW5HTCB0ZXh0dXJlIHRoZXkgcmVuZGVyIHRvLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00ODAzMgorCisgICAgICAgICogcHVibGljL1dl
YlBsdWdpbi5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW46OmdldEJhY2tpbmdUZXh0dXJl
SWQpOgorICAgICAgICAqIHB1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGx1Z2luQ29udGFpbmVyOjpnZXRCYWNraW5nVGV4dHVyZUlkKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVyOjpjb21taXRCYWNraW5nVGV4dHVyZSk6CisgICAg
ICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQbHVnaW5Db250YWluZXJJbXBsOjpnZXRCYWNraW5nVGV4dHVyZUlkKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6Y29tbWl0QmFja2luZ1RleHR1cmUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJbXBsOjpwbGF0Zm9ybUxheWVyKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6V2ViUGx1Z2luQ29udGFpbmVy
SW1wbCk6CisgICAgICAgICogc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaDoKKwogMjAxMC0x
MC0yMCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjcwMTY1LgpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlBsdWdpbi5oCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2VvbWV0cnkoCiAgICAgICAgIGNvbnN0IFdlYlJlY3QmIGZy
YW1lUmVjdCwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QsCiAgICAgICAgIGNvbnN0IFdlYlZlY3Rv
cjxXZWJSZWN0PiYgY3V0T3V0c1JlY3RzLCBib29sIGlzVmlzaWJsZSkgPSAwOworICAgIAorICAg
IC8vIElmIHRoZSBwbHVnaW4gaW5zdGFuY2UgaXMgYmFja2VkIGJ5IGFuIE9wZW5HTCwgcmV0dXJu
IGl0cyBJRCBpbiB0aGUKKyAgICAvLyBjb21wb3NpdG9ycyBuYW1lc3BhY2UuIE90aGVyd2lzZSBy
ZXR1cm4gMC4gUmV0dXJucyAwIGJ5IGRlZmF1bHQuCisgICAgLy8gVE9ETyhhcGF0cmljayk6IE1h
a2UgdGhpcyBwdXJlIHZpcnR1YWwgb25jZSB0aGlzIGNoYW5nZSBpcyByb2xsZWQgaW50byBjaHJv
bWl1bS4KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGdldEJhY2tpbmdUZXh0dXJlSWQoKSB7IHJldHVy
biAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRm9jdXMoYm9vbCkgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVWaXNpYmlsaXR5KGJvb2wpID0gMDsKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaAkocmV2aXNpb24gNzAxNzUpCisrKyBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbkNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NCw2ICs1NCwxNSBAQCBwdWJsaWM6CiAgICAgLy8gV2ViUGx1Z2luOjp1cGRhdGVHZW9t
ZXRyeS4KICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0R2VvbWV0cnkoKSA9IDA7CiAKKyAgICAvLyBJ
ZiB0aGUgcGx1Z2luIGluc3RhbmNlIGlzIGJhY2tlZCBieSBhbiBPcGVuR0wsIHJldHVybiBpdHMg
SUQgaW4gdGhlCisgICAgLy8gY29tcG9zaXRvcnMgbmFtZXNwYWNlLiBPdGhlcndpc2UgcmV0dXJu
IDAuCisgICAgLy8gVE9ETyhhcGF0cmljayk6IE1ha2UgdGhpcyBwdXJlIHZpcnR1YWwgb25jZSB0
aGlzIGNoYW5nZSBpcyByb2xsZWQgaW50byBjaHJvbWl1bS4KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGdldEJhY2tpbmdUZXh0dXJlSWQoKSB7IHJldHVybiAwOyB9OworICAgIAorICAgIC8vIENhbGxl
ZCB3aGVuIHRoZSBiYWNraW5nIHRleHR1cmUgaXMgcmVhZHkgdG8gYmUgY29tcG9zaXRlZC4KKyAg
ICAvLyBUT0RPKGFwYXRyaWNrKTogTWFrZSB0aGlzIHB1cmUgdmlydHVhbCBvbmNlIHRoaXMgY2hh
bmdlIGlzIHJvbGxlZCBpbnRvIGNocm9taXVtLgorICAgIHZpcnR1YWwgdm9pZCBjb21taXRCYWNr
aW5nVGV4dHVyZSgpIHt9OworICAgIAogICAgIC8vIERyb3AgYW55IHJlZmVyZW5jZXMgdG8gc2Ny
aXB0IG9iamVjdHMgYWxsb2NhdGVkIGJ5IHRoZSBwbHVnaW4uCiAgICAgLy8gVGhlc2UgYXJlIG9i
amVjdHMgZGVyaXZlZCBmcm9tIFdlYlBsdWdpbjo6c2NyaXB0YWJsZU9iamVjdC4gIFRoaXMgaXMK
ICAgICAvLyBjYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZCBvciBpZiBp
dCBuZWVkcyB0byBiZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWlu
ZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNv
bnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIK
KyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiV2ViQ2xpcGJvYXJk
LmgiCiAjaW5jbHVkZSAiV2ViQ3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJ
bXBsLmgiCkBAIC0yODcsNiArMjg4LDIxIEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6
cmVwb3J0R2VvbWUKICAgICBtX3dlYlBsdWdpbi0+dXBkYXRlR2VvbWV0cnkod2luZG93UmVjdCwg
Y2xpcFJlY3QsIGN1dE91dFJlY3RzLCBpc1Zpc2libGUoKSk7CiB9CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisKK3Vuc2lnbmVkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6Omdl
dEJhY2tpbmdUZXh0dXJlSWQoKQoreworICAgIHJldHVybiBtX3dlYlBsdWdpbi0+Z2V0QmFja2lu
Z1RleHR1cmVJZCgpOworfQorCit2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmNvbW1pdEJh
Y2tpbmdUZXh0dXJlKCkKK3sKKyAgICBpZiAocGxhdGZvcm1MYXllcigpKQorICAgICAgICBwbGF0
Zm9ybUxheWVyKCktPnNldE5lZWRzRGlzcGxheSgpOworfQorCisjZW5kaWYKKwogdm9pZCBXZWJQ
bHVnaW5Db250YWluZXJJbXBsOjpjbGVhclNjcmlwdE9iamVjdHMoKQogewogICAgIEZyYW1lKiBm
cmFtZSA9IG1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTM5Myw4ICs0MDksMzEg
QEAgdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjp3aWxsRGVzdHJveQogICAgIG1fcGx1Z2lu
TG9hZE9ic2VydmVycy5yZW1vdmUocG9zKTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSogV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgdW5zaWduZWQgYmFja2luZ1RleHR1cmVJ
ZCA9IG1fd2ViUGx1Z2luLT5nZXRCYWNraW5nVGV4dHVyZUlkKCk7CisgICAgaWYgKCFiYWNraW5n
VGV4dHVyZUlkKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fcGxhdGZvcm1MYXllci0+c2V0
VGV4dHVyZUlkKGJhY2tpbmdUZXh0dXJlSWQpOworCisgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXll
ci5nZXQoKTsKK30KKworI2VuZGlmCisKIC8vIFByaXZhdGUgbWV0aG9kcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK1dlYlBs
dWdpbkNvbnRhaW5lckltcGw6OldlYlBsdWdpbkNvbnRhaW5lckltcGwoV2ViQ29yZTo6SFRNTFBs
dWdJbkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2luKQorICAgIDogV2ViQ29y
ZTo6UGx1Z2luVmlld0Jhc2UoMCkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV93
ZWJQbHVnaW4od2ViUGx1Z2luKQorICAgICwgbV9wbGF0Zm9ybUxheWVyKFBsdWdpbkxheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKSkKK3sKK30KKwogV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6fldlYlBs
dWdpbkNvbnRhaW5lckltcGwoKQogewogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wbHVn
aW5Mb2FkT2JzZXJ2ZXJzLnNpemUoKTsgKytpKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJQbHVnaW5Db250YWluZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHJldmlzaW9uIDcwMTc1KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDkgKzMxLDEwIEBACiAjaWZuZGVmIFdlYlBsdWdpbkNvbnRhaW5lckltcGxfaAogI2RlZmluZSBX
ZWJQbHVnaW5Db250YWluZXJJbXBsX2gKIAorI2luY2x1ZGUgIlBsdWdpblZpZXdCYXNlLmgiCiAj
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVyLmgiCi0KICNpbmNsdWRlICJXaWRnZXQuaCIKKwog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBA
IC00Myw3ICs0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxQbHVnSW5FbGVt
ZW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7CitjbGFzcyBMYXllckNo
cm9taXVtOwogY2xhc3MgTW91c2VFdmVudDsKK2NsYXNzIFBsdWdpbkxheWVyQ2hyb21pdW07CiBj
bGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKIGNsYXNzIFdoZWVs
RXZlbnQ7CkBAIC01NCw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViUGx1
Z2luOwogY2xhc3MgV2ViUGx1Z2luTG9hZE9ic2VydmVyOwogCi1jbGFzcyBXZWJQbHVnaW5Db250
YWluZXJJbXBsIDogcHVibGljIFdlYkNvcmU6OldpZGdldCwgcHVibGljIFdlYlBsdWdpbkNvbnRh
aW5lciB7CitjbGFzcyBXZWJQbHVnaW5Db250YWluZXJJbXBsIDogcHVibGljIFdlYkNvcmU6OlBs
dWdpblZpZXdCYXNlLCBwdWJsaWMgV2ViUGx1Z2luQ29udGFpbmVyIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJQbHVnaW5Db250YWluZXJJbXBsPiBjcmVhdGUoV2ViQ29yZTo6
SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2luKQogICAgIHsK
QEAgLTg1LDYgKzg4LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBleGVjdXRl
U2NyaXB0VVJMKGNvbnN0IFdlYlVSTCYsIGJvb2wgcG9wdXBzQWxsb3dlZCk7CiAgICAgdmlydHVh
bCB2b2lkIGxvYWRGcmFtZVJlcXVlc3QoY29uc3QgV2ViVVJMUmVxdWVzdCYsIGNvbnN0IFdlYlN0
cmluZyYgdGFyZ2V0LCBib29sIG5vdGlmeU5lZWRlZCwgdm9pZCogbm90aWZ5RGF0YSk7CiAgICAg
dmlydHVhbCB2b2lkIHpvb21MZXZlbENoYW5nZWQoZG91YmxlIHpvb21MZXZlbCk7CisgICAgCisj
aWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgdW5zaWduZWQgZ2V0
QmFja2luZ1RleHR1cmVJZCgpOworICAgIHZpcnR1YWwgdm9pZCBjb21taXRCYWNraW5nVGV4dHVy
ZSgpOworI2VuZGlmCiAKICAgICAvLyBUaGlzIGNhbm5vdCBiZSBudWxsLgogICAgIFdlYlBsdWdp
biogcGx1Z2luKCkgeyByZXR1cm4gbV93ZWJQbHVnaW47IH0KQEAgLTExNywxMCArMTI1LDEyIEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgd2lsbERlc3Ryb3lQbHVnaW5Mb2FkT2JzZXJ2ZXIoV2ViUGx1
Z2luTG9hZE9ic2VydmVyKik7CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisg
ICAgdmlydHVhbCBXZWJDb3JlOjpMYXllckNocm9taXVtKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Q7
CisjZW5kaWYKKwogcHJpdmF0ZToKLSAgICBXZWJQbHVnaW5Db250YWluZXJJbXBsKFdlYkNvcmU6
OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBXZWJQbHVnaW4qIHdlYlBsdWdpbikKLSAgICAg
ICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCBtX3dlYlBsdWdpbih3ZWJQbHVnaW4p
IHsgfQorICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1l
bnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2luKTsKICAgICB+V2ViUGx1Z2luQ29udGFp
bmVySW1wbCgpOwogCiAgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KFdlYkNvcmU6Ok1vdXNlRXZl
bnQqKTsKQEAgLTEzOCw2ICsxNDgsMTAgQEAgcHJpdmF0ZToKICAgICBXZWJDb3JlOjpIVE1MUGx1
Z0luRWxlbWVudCogbV9lbGVtZW50OwogICAgIFdlYlBsdWdpbiogbV93ZWJQbHVnaW47CiAgICAg
VmVjdG9yPFdlYlBsdWdpbkxvYWRPYnNlcnZlcio+IG1fcGx1Z2luTG9hZE9ic2VydmVyczsKKwor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBSZWZQdHI8V2ViQ29yZTo6UGx1
Z2luTGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOworI2VuZGlmCiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71615</attachid>
            <date>2010-10-22 17:26:52 -0700</date>
            <delta_ts>2010-10-25 16:09:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48032-20101022172651.patch</filename>
            <type>text/plain</type>
            <size>22801</size>
            <attacher name="Al">apatrick</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W2Nocm9taXVtXSBBZGRlZCBQbHVnaW5MYXllckNocm9taXVtLCB3aGljaCBjb21wb3NpdGVzIHBs
dWdpbiBpbnN0YW5jZXMgdGhhdCBoYXZlIGFuIGFzc29jaWF0ZWQgT3BlbkdMIGJhY2tpbmcgdGV4
dHVyZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDgwMzIKKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBsb2FkZXIvU3ViZnJh
bWVMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVn
aW4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNsZWFudXBTaGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6cGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hh
cmVkVmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlczo6flNoYXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNo
cm9taXVtOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6
UGx1Z2luTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjp1cGRhdGVDb250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9t
aXVtOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6ZHJhd3NDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21p
dW06OnNldFRleHR1cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXM6OnNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJN
YXRyaXhMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpT
aGFyZWRWYWx1ZXM6OnNoYWRlckFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1
Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAtMTAt
MjAgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDE2NS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MDE3NSkK
KysrIFdlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDM4LDYgKzI0Mzgs
OCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
ZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbGF0Zm9ybUljb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdp
bi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZv
bnREYXRhTGludXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzAxNzUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjgsNiArMzY4LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXRO
ZWVkc0Rpc3BsYXkoKQogewogICAgIG1fZGlydHlSZWN0LnNldFNpemUobV9ib3VuZHMpOwogICAg
IG1fY29udGVudHNEaXJ0eSA9IHRydWU7CisgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9p
ZCBMYXllckNocm9taXVtOjpyZXNldE5lZWRzRGlzcGxheSgpCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMw
LDcgKzczMCwxMCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiAg
ICAgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ29udGVudExheWVy
Q2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2NhbnZhc0xh
eWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMg
PSBhZG9wdFB0cihuZXcgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0
LmdldCgpKSk7Ci0gICAgaWYgKCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8
ICFtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jYW52YXNM
YXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV92aWRlb0xheWVyU2hhcmVkVmFs
dWVzLT5pbml0aWFsaXplZCgpKSB7CisgICAgbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcyA9IGFk
b3B0UHRyKG5ldyBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0Lmdl
dCgpKSk7CisKKyAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwg
IW1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NhbnZhc0xh
eWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8CisgICAgICAgICFtX3ZpZGVvTGF5ZXJT
aGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMt
PmluaXRpYWxpemVkKCkpIHsKICAgICAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KQEAgLTc0Niw2ICs3NDksNyBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlCiAgICAgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1
ZXMuY2xlYXIoKTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAgICAg
bV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAgbV9wbHVnaW5MYXllclNoYXJl
ZFZhbHVlcy5jbGVhcigpOwogCiAgICAgaWYgKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkgewogICAg
ICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9zY3JvbGxTaGFk
ZXJQcm9ncmFtKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDcwMTc1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNvbnRlbnRM
YXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKKyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tC
aXRtYXAuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgpAQCAtMTA2LDYgKzEwNyw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb250ZW50
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNv
bnN0IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY2FudmFzTGF5ZXJTaGFyZWRW
YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9
CiAgICAgY29uc3QgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHZpZGVvTGF5ZXJT
aGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0
KCk7IH0KKyAgICBjb25zdCBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHBsdWdp
bkxheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5MYXllclNoYXJlZFZh
bHVlcy5nZXQoKTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50
U2l6ZSYpOwogCkBAIC0xNzksNiArMTgxLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q29udGVu
dExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXM7
CiAgICAgT3duUHRyPENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9jYW52YXNM
YXllclNoYXJlZFZhbHVlczsKICAgICBPd25QdHI8VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXM+IG1fdmlkZW9MYXllclNoYXJlZFZhbHVlczsKKyAgICBPd25QdHI8UGx1Z2luTGF5ZXJD
aHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzOwogCiAgICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiB9OwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkxheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NoYWRlclByb2dyYW0oMCkK
KyAgICAsIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJNYXRyaXhM
b2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyQWxwaGFMb2NhdGlvbigtMSkKKyAgICAsIG1faW5p
dGlhbGl6ZWQoZmFsc2UpCit7CisgICAgY2hhciB2ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAg
ICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgorICAgICAgICAiYXR0cmlidXRl
IHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAg
ICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAg
ICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9uID0gbWF0cml4
ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAg
IFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBj
aGFyIGZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2
ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
dW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
ICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4
dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIHZfdGV4Q29vcmQueSkpOyBcbiIK
KyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0
ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBtX3No
YWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKG1fY29udGV4dCwgdmVydGV4U2hhZGVy
U3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgaWYgKCFtX3NoYWRlclByb2dyYW0p
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJQbHVnaW5MYXllckNocm9taXVtOiBGYWlsZWQgdG8gY3Jl
YXRlIHNoYWRlciBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3No
YWRlclNhbXBsZXJMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2hh
ZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOworICAgIG1fc2hhZGVyTWF0cml4TG9jYXRpb24gPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW0sICJtYXRyaXgiKTsK
KyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihtX3NoYWRlclByb2dyYW0sICJhbHBoYSIpOworICAgIEFTU0VSVChtX3NoYWRlclNhbXBsZXJM
b2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fc2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEp
OworICAgIEFTU0VSVChtX3NoYWRlckFscGhhTG9jYXRpb24gIT0gLTEpOworCisgICAgbV9pbml0
aWFsaXplZCA9IHRydWU7Cit9CisKK1BsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6
flNoYXJlZFZhbHVlcygpCit7CisgICAgaWYgKG1fc2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2hhZGVyUHJvZ3JhbSkpOwor
fQorCitQYXNzUmVmUHRyPFBsdWdpbkxheWVyQ2hyb21pdW0+IFBsdWdpbkxheWVyQ2hyb21pdW06
OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bShvd25lcikpOworfQorCitQbHVnaW5MYXllckNo
cm9taXVtOjpQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
CisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQoreworfQorCit2b2lkIFBsdWdpbkxheWVyQ2hy
b21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKK3sKKyAgICBtX3RleHR1cmVJZCA9IGlk
OworfQorCit2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKK3sKK30K
Kwordm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KCkKK3sKKyAgICBBU1NFUlQobGF5ZXJS
ZW5kZXJlcigpKTsKKyAgICBjb25zdCBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMq
IHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5wbHVnaW5MYXllclNoYXJlZFZhbHVlcygpOworICAgIEFT
U0VSVChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5f
RklMVEVSLCBHTF9MSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOwor
ICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSk7CisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdM
X0NMQU1QX1RPX0VER0UpKTsKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+c2hh
ZGVyUHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5z
aGFkZXJTYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4
dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwK
KyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgp
LCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworfQorCit9CisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVy
Q2hyb21pdW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBQbHVnaW5M
YXllckNocm9taXVtX2gKKyNkZWZpbmUgUGx1Z2luTGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBMYXllciBjb250YWluaW5nIGEgdGhlIHJlbmRl
cmVkIG91dHB1dCBvZiBhIHBsdWdpbiBpbnN0YW5jZS4KK2NsYXNzIFBsdWdpbkxheWVyQ2hyb21p
dW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8UGx1Z2luTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBk
cmF3KCk7CisgICAgCisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKTsK
KyAgICAgICAgCisgICAgY2xhc3MgU2hhcmVkVmFsdWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CisgICAgICAgIH5TaGFy
ZWRWYWx1ZXMoKTsKKworICAgICAgICB1bnNpZ25lZCBzaGFkZXJQcm9ncmFtKCkgY29uc3QgeyBy
ZXR1cm4gbV9zaGFkZXJQcm9ncmFtOyB9CisgICAgICAgIGludCBzaGFkZXJTYW1wbGVyTG9jYXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsgfQorICAgICAgICBp
bnQgc2hhZGVyTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlck1hdHJpeExv
Y2F0aW9uOyB9CisgICAgICAgIGludCBzaGFkZXJBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFkZXJBbHBoYUxvY2F0aW9uOyB9CisgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBj
b25zdCB7IHJldHVybiBtX2luaXRpYWxpemVkOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBH
cmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgICAgICB1bnNpZ25lZCBtX3NoYWRlclBy
b2dyYW07CisgICAgICAgIGludCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKKyAgICAgICAgaW50
IG1fc2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlckFscGhhTG9jYXRp
b247CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB9OworCitwcml2YXRlOgorICAg
IFBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAg
dW5zaWduZWQgbV90ZXh0dXJlSWQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzAxOTQp
CisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjMgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVt
XSBQbHVnaW4gaW5zdGFuY2VzIGNhbiBwcm9wYWdhdGUgdGhlIElEIG9mIHRoZSBPcGVuR0wgdGV4
dHVyZSB0aGV5IHJlbmRlciB0by4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDgwMzIKKworICAgICAgICAqIHB1YmxpYy9XZWJQbHVnaW4uaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGx1Z2luOjpnZXRCYWNraW5nVGV4dHVyZUlkKToKKyAgICAgICAg
KiBwdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdp
bkNvbnRhaW5lcjo6Z2V0QmFja2luZ1RleHR1cmVJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBs
dWdpbkNvbnRhaW5lcjo6Y29tbWl0QmFja2luZ1RleHR1cmUpOgorICAgICAgICAqIHNyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFp
bmVySW1wbDo6Z2V0QmFja2luZ1RleHR1cmVJZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdp
bkNvbnRhaW5lckltcGw6OmNvbW1pdEJhY2tpbmdUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OldlYlBsdWdpbkNvbnRhaW5lckltcGwpOgorICAgICAg
ICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmg6CisKIDIwMTAtMTAtMjAgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI3MDE2NS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1
Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4uaAko
cmV2aXNpb24gNzAxNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUdlb21ldHJ5KAogICAgICAgICBjb25zdCBXZWJSZWN0JiBmcmFtZVJlY3QsIGNvbnN0
IFdlYlJlY3QmIGNsaXBSZWN0LAogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViUmVjdD4mIGN1
dE91dHNSZWN0cywgYm9vbCBpc1Zpc2libGUpID0gMDsKKyAgICAKKyAgICAvLyBJZiB0aGUgcGx1
Z2luIGluc3RhbmNlIGlzIGJhY2tlZCBieSBhbiBPcGVuR0wsIHJldHVybiBpdHMgSUQgaW4gdGhl
CisgICAgLy8gY29tcG9zaXRvcnMgbmFtZXNwYWNlLiBPdGhlcndpc2UgcmV0dXJuIDAuIFJldHVy
bnMgMCBieSBkZWZhdWx0LgorICAgIC8vIFRPRE8oYXBhdHJpY2spOiBNYWtlIHRoaXMgcHVyZSB2
aXJ0dWFsIG9uY2UgdGhpcyBjaGFuZ2UgaXMgcm9sbGVkIGludG8gY2hyb21pdW0uCisgICAgdmly
dHVhbCB1bnNpZ25lZCBnZXRCYWNraW5nVGV4dHVyZUlkKCkgeyByZXR1cm4gMDsgfQogCiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzKGJvb2wpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlVmlzaWJpbGl0eShib29sKSA9IDA7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlBsdWdpbkNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGx1Z2luQ29udGFpbmVyLmgJKHJldmlzaW9uIDcwMTc1KQorKysgV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQs
MTUgQEAgcHVibGljOgogICAgIC8vIFdlYlBsdWdpbjo6dXBkYXRlR2VvbWV0cnkuCiAgICAgdmly
dHVhbCB2b2lkIHJlcG9ydEdlb21ldHJ5KCkgPSAwOwogCisgICAgLy8gSWYgdGhlIHBsdWdpbiBp
bnN0YW5jZSBpcyBiYWNrZWQgYnkgYW4gT3BlbkdMLCByZXR1cm4gaXRzIElEIGluIHRoZQorICAg
IC8vIGNvbXBvc2l0b3JzIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIHJldHVybiAwLgorICAgIC8vIFRP
RE8oYXBhdHJpY2spOiBNYWtlIHRoaXMgcHVyZSB2aXJ0dWFsIG9uY2UgdGhpcyBjaGFuZ2UgaXMg
cm9sbGVkIGludG8gY2hyb21pdW0uCisgICAgdmlydHVhbCB1bnNpZ25lZCBnZXRCYWNraW5nVGV4
dHVyZUlkKCkgeyByZXR1cm4gMDsgfTsKKyAgICAKKyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYmFj
a2luZyB0ZXh0dXJlIGlzIHJlYWR5IHRvIGJlIGNvbXBvc2l0ZWQuCisgICAgLy8gVE9ETyhhcGF0
cmljayk6IE1ha2UgdGhpcyBwdXJlIHZpcnR1YWwgb25jZSB0aGlzIGNoYW5nZSBpcyByb2xsZWQg
aW50byBjaHJvbWl1bS4KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0QmFja2luZ1RleHR1cmUoKSB7
fTsKKyAgICAKICAgICAvLyBEcm9wIGFueSByZWZlcmVuY2VzIHRvIHNjcmlwdCBvYmplY3RzIGFs
bG9jYXRlZCBieSB0aGUgcGx1Z2luLgogICAgIC8vIFRoZXNlIGFyZSBvYmplY3RzIGRlcml2ZWQg
ZnJvbSBXZWJQbHVnaW46OnNjcmlwdGFibGVPYmplY3QuICBUaGlzIGlzCiAgICAgLy8gY2FsbGVk
IHdoZW4gdGhlIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQgb3IgaWYgaXQgbmVlZHMgdG8gYmUK
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNw
cAkocmV2aXNpb24gNzAxNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRh
aW5lckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiUGx1
Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkNsaXBib2FyZC5oIgogI2luY2x1ZGUg
IldlYkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJXZWJEYXRhU291cmNlSW1wbC5oIgpAQCAtMjg3
LDYgKzI4OCwyMSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnJlcG9ydEdlb21lCiAg
ICAgbV93ZWJQbHVnaW4tPnVwZGF0ZUdlb21ldHJ5KHdpbmRvd1JlY3QsIGNsaXBSZWN0LCBjdXRP
dXRSZWN0cywgaXNWaXNpYmxlKCkpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCit1bnNpZ25lZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpnZXRCYWNraW5nVGV4dHVy
ZUlkKCkKK3sKKyAgICByZXR1cm4gbV93ZWJQbHVnaW4tPmdldEJhY2tpbmdUZXh0dXJlSWQoKTsK
K30KKwordm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb21taXRCYWNraW5nVGV4dHVyZSgp
Cit7CisgICAgaWYgKHBsYXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgcGxhdGZvcm1MYXllcigpLT5z
ZXROZWVkc0Rpc3BsYXkoKTsKK30KKworI2VuZGlmCisKIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVy
SW1wbDo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC0zOTMsOCArNDA5LDMxIEBAIHZvaWQgV2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6d2lsbERlc3Ryb3kKICAgICBtX3BsdWdpbkxvYWRPYnNlcnZlcnMu
cmVtb3ZlKHBvcyk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKK1dl
YkNvcmU6OkxheWVyQ2hyb21pdW0qIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnBsYXRmb3JtTGF5
ZXIoKSBjb25zdAoreworICAgIHVuc2lnbmVkIGJhY2tpbmdUZXh0dXJlSWQgPSBtX3dlYlBsdWdp
bi0+Z2V0QmFja2luZ1RleHR1cmVJZCgpOworICAgIGlmICghYmFja2luZ1RleHR1cmVJZCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZChiYWNr
aW5nVGV4dHVyZUlkKTsKKworICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7Cit9CisK
KyNlbmRpZgorCiAvLyBQcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXZWJQbHVnaW5Db250YWluZXJJ
bXBsOjpXZWJQbHVnaW5Db250YWluZXJJbXBsKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBl
bGVtZW50LCBXZWJQbHVnaW4qIHdlYlBsdWdpbikKKyAgICA6IFdlYkNvcmU6OlBsdWdpblZpZXdC
YXNlKDApCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fd2ViUGx1Z2luKHdlYlBs
dWdpbikKKyAgICAsIG1fcGxhdGZvcm1MYXllcihQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGUo
MCkpCit7Cit9CisKIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6On5XZWJQbHVnaW5Db250YWluZXJJ
bXBsKCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fcGx1Z2luTG9hZE9ic2VydmVy
cy5zaXplKCk7ICsraSkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFp
bmVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5oCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGx1Z2luQ29udGFpbmVySW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQAog
I2lmbmRlZiBXZWJQbHVnaW5Db250YWluZXJJbXBsX2gKICNkZWZpbmUgV2ViUGx1Z2luQ29udGFp
bmVySW1wbF9oCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3QmFzZS5oIgogI2luY2x1ZGUgIldlYlBs
dWdpbkNvbnRhaW5lci5oIgotCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCisKICNpbmNsdWRlIDx3dGYv
UGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIApAQCAtNDMsNyArNDQsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MUGx1Z0luRWxlbWVudDsKIGNsYXNzIElu
dFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50OworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNz
IE1vdXNlRXZlbnQ7CitjbGFzcyBQbHVnaW5MYXllckNocm9taXVtOwogY2xhc3MgUmVzb3VyY2VF
cnJvcjsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBjbGFzcyBXaGVlbEV2ZW50OwpAQCAtNTQs
NyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYlBsdWdpbjsKIGNsYXNzIFdl
YlBsdWdpbkxvYWRPYnNlcnZlcjsKIAotY2xhc3MgV2ViUGx1Z2luQ29udGFpbmVySW1wbCA6IHB1
YmxpYyBXZWJDb3JlOjpXaWRnZXQsIHB1YmxpYyBXZWJQbHVnaW5Db250YWluZXIgeworY2xhc3Mg
V2ViUGx1Z2luQ29udGFpbmVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpQbHVnaW5WaWV3QmFzZSwg
cHVibGljIFdlYlBsdWdpbkNvbnRhaW5lciB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViUGx1Z2luQ29udGFpbmVySW1wbD4gY3JlYXRlKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVt
ZW50KiBlbGVtZW50LCBXZWJQbHVnaW4qIHdlYlBsdWdpbikKICAgICB7CkBAIC04NSw2ICs4OCwx
MSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXZWJTdHJpbmcgZXhlY3V0ZVNjcmlwdFVSTChjb25z
dCBXZWJVUkwmLCBib29sIHBvcHVwc0FsbG93ZWQpOwogICAgIHZpcnR1YWwgdm9pZCBsb2FkRnJh
bWVSZXF1ZXN0KGNvbnN0IFdlYlVSTFJlcXVlc3QmLCBjb25zdCBXZWJTdHJpbmcmIHRhcmdldCwg
Ym9vbCBub3RpZnlOZWVkZWQsIHZvaWQqIG5vdGlmeURhdGEpOwogICAgIHZpcnR1YWwgdm9pZCB6
b29tTGV2ZWxDaGFuZ2VkKGRvdWJsZSB6b29tTGV2ZWwpOworICAgIAorI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGdldEJhY2tpbmdUZXh0dXJl
SWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0QmFja2luZ1RleHR1cmUoKTsKKyNlbmRpZgog
CiAgICAgLy8gVGhpcyBjYW5ub3QgYmUgbnVsbC4KICAgICBXZWJQbHVnaW4qIHBsdWdpbigpIHsg
cmV0dXJuIG1fd2ViUGx1Z2luOyB9CkBAIC0xMTcsMTAgKzEyNSwxMiBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHdpbGxEZXN0cm95UGx1Z2luTG9hZE9ic2VydmVyKFdlYlBsdWdpbkxvYWRPYnNlcnZl
ciopOwogCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgV2Vi
Q29yZTo6TGF5ZXJDaHJvbWl1bSogcGxhdGZvcm1MYXllcigpIGNvbnN0OworI2VuZGlmCisKIHBy
aXZhdGU6Ci0gICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxl
bWVudCogZWxlbWVudCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pCi0gICAgICAgIDogbV9lbGVtZW50
KGVsZW1lbnQpCi0gICAgICAgICwgbV93ZWJQbHVnaW4od2ViUGx1Z2luKSB7IH0KKyAgICBXZWJQ
bHVnaW5Db250YWluZXJJbXBsKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBX
ZWJQbHVnaW4qIHdlYlBsdWdpbik7CiAgICAgfldlYlBsdWdpbkNvbnRhaW5lckltcGwoKTsKIAog
ICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChXZWJDb3JlOjpNb3VzZUV2ZW50Kik7CkBAIC0xMzgs
NiArMTQ4LDEwIEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIG1f
ZWxlbWVudDsKICAgICBXZWJQbHVnaW4qIG1fd2ViUGx1Z2luOwogICAgIFZlY3RvcjxXZWJQbHVn
aW5Mb2FkT2JzZXJ2ZXIqPiBtX3BsdWdpbkxvYWRPYnNlcnZlcnM7CisKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgUmVmUHRyPFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21p
dW0+IG1fcGxhdGZvcm1MYXllcjsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71809</attachid>
            <date>2010-10-25 16:09:45 -0700</date>
            <delta_ts>2010-10-27 15:59:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48032-20101025160944.patch</filename>
            <type>text/plain</type>
            <size>23603</size>
            <attacher name="Al">apatrick</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDE5NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgUGx1Z2luTGF5ZXJDaHJvbWl1bSwgd2hpY2ggY29tcG9zaXRlcyBwbHVnaW4gaW5zdGFu
Y2VzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkIE9wZW5HTCBiYWNraW5nIHRleHR1cmUuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MDMyCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2Jq
ZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBT
aGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNo
YXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVt
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnNldFRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXM6OnNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJNYXRyaXhMb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
OnNoYWRlckFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAtMTAtMjAgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI3MDE2NS4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDM4LDYgKzI0MzgsOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NZWRpYVBsYXllclBy
aXZhdGVDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbGF0Zm9ybUljb24uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXgu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVu
Y3lXaW4uY3BwJywKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDcw
MTc1KQorKysgV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNjYsOCArMzY2LDggQEAgYm9vbCBTdWJmcmFtZUxvYWRlcjo6bG9hZFBsdWdpbihIVE1M
UGx1ZwogCiAgICAgcmVuZGVyZXItPnNldFdpZGdldCh3aWRnZXQpOwogICAgIG1fY29udGFpbnNQ
bHVnaW5zID0gdHJ1ZTsKLQotI2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQorIAor
I2lmIEVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKSB8fCBFTkFCTEUoM0RfUExVR0lOKQog
ICAgIHBsdWdpbkVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGljU3R5bGVDaGFu
Z2UpOwogI2VuZGlmCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDcw
MTc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY4LDYgKzM2OCw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6c2V0TmVlZHNEaXNwbGF5KCkKIHsKICAgICBtX2RpcnR5UmVjdC5zZXRTaXplKG1fYm91bmRz
KTsKICAgICBtX2NvbnRlbnRzRGlydHkgPSB0cnVlOworICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9
CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6cmVzZXROZWVkc0Rpc3BsYXkoKQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAkocmV2aXNpb24gNzAxNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczMCw3ICs3MzAsMTAgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxp
emVTaAogICAgIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3IENvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV9j
YW52YXNMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDYW52YXNMYXllckNocm9taXVt
OjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7CiAgICAgbV92aWRlb0xheWVyU2hhcmVk
VmFsdWVzID0gYWRvcHRQdHIobmV3IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1f
Y29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6
ZWQoKSB8fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1f
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fdmlkZW9MYXllclNo
YXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSkgeworICAgIG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1
ZXMgPSBhZG9wdFB0cihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29u
dGV4dC5nZXQoKSkpOworCisgICAgaWYgKCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXpl
ZCgpIHx8ICFtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9j
YW52YXNMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKQorICAgICAgICB8fCAhbV92aWRl
b0xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX3BsdWdpbkxheWVyU2hhcmVk
VmFsdWVzLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIGNsZWFudXBTaGFyZWRPYmplY3RzKCk7
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC03NDYsNiArNzQ5LDcgQEAgdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZQogICAgIG1fY29udGVudExheWVyU2hh
cmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy5jbGVhcigp
OwogICAgIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy5jbGVhcigpOworICAgIG1fcGx1Z2luTGF5
ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKIAogICAgIGlmIChtX3Njcm9sbFNoYWRlclByb2dyYW0p
IHsKICAgICAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2Ny
b2xsU2hhZGVyUHJvZ3JhbSkpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA3
MDE3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJD
b250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJM
YXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIlNrQml0bWFwLmgiCiAjaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEwNiw2ICsxMDcsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
Q29udGVudExheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY29udGVudExheWVyU2hhcmVkVmFs
dWVzKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0K
ICAgICBjb25zdCBDYW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNhbnZhc0xheWVy
U2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYW52YXNMYXllclNoYXJlZFZhbHVlcy5n
ZXQoKTsgfQogICAgIGNvbnN0IFZpZGVvTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiB2aWRl
b0xheWVyU2hhcmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92aWRlb0xheWVyU2hhcmVkVmFs
dWVzLmdldCgpOyB9CisgICAgY29uc3QgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVz
KiBwbHVnaW5MYXllclNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fcGx1Z2luTGF5ZXJT
aGFyZWRWYWx1ZXMuZ2V0KCk7IH0KIAogICAgIHZvaWQgcmVzaXplT25zY3JlZW5Db250ZW50KGNv
bnN0IEludFNpemUmKTsKIApAQCAtMTc5LDYgKzE4MSw3IEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PENvbnRlbnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1fY29udGVudExheWVyU2hhcmVk
VmFsdWVzOwogICAgIE93blB0cjxDYW52YXNMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1f
Y2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXM7CiAgICAgT3duUHRyPFZpZGVvTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzPiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXM7CisgICAgT3duUHRyPFBsdWdp
bkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlczsK
IAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwogfTsKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5M
YXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgorCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQbHVnaW5M
YXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6OlNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9zaGFkZXJQcm9n
cmFtKDApCisgICAgLCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVy
TWF0cml4TG9jYXRpb24oLTEpCisgICAgLCBtX3NoYWRlckFscGhhTG9jYXRpb24oLTEpCisgICAg
LCBtX2luaXRpYWxpemVkKGZhbHNlKQoreworICAgIGNoYXIgdmVydGV4U2hhZGVyU3RyaW5nW10g
PQorICAgICAgICAiYXR0cmlidXRlIHZlYzQgYV9wb3NpdGlvbjsgICBcbiIKKyAgICAgICAgImF0
dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgXG4iCisgICAgICAgICJ1bmlmb3JtIG1hdDQgbWF0
cml4OyAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7ICAgICBc
biIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICBnbF9Qb3NpdGlvbiA9
IG1hdHJpeCAqIGFfcG9zaXRpb247IFxuIgorICAgICAgICAiICB2X3RleENvb3JkID0gYV90ZXhD
b29yZDsgICBcbiIKKyAgICAgICAgIn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOwor
CisgICAgY2hhciBmcmFnbWVudFNoYWRlclN0cmluZ1tdID0KKyAgICAgICAgInByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInZh
cnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAg
ICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHNfdGV4dHVyZTsgICAgICAgICAgICAgICAgICAgICAg
ICBcbiIKKyAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcbiIKKyAgICAgICAgInZvaWQgbWFpbigpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgdmVjNCB0ZXhDb2xv
ciA9IHRleHR1cmUyRChzX3RleHR1cmUsIHZlYzIodl90ZXhDb29yZC54LCB2X3RleENvb3JkLnkp
KTsgXG4iCisgICAgICAgICIgIGdsX0ZyYWdDb2xvciA9IHZlYzQodGV4Q29sb3IueCwgdGV4Q29s
b3IueSwgdGV4Q29sb3IueiwgdGV4Q29sb3IudykgKiBhbHBoYTsgXG4iCisgICAgICAgICJ9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iOworCisg
ICAgbV9zaGFkZXJQcm9ncmFtID0gY3JlYXRlU2hhZGVyUHJvZ3JhbShtX2NvbnRleHQsIHZlcnRl
eFNoYWRlclN0cmluZywgZnJhZ21lbnRTaGFkZXJTdHJpbmcpOworICAgIGlmICghbV9zaGFkZXJQ
cm9ncmFtKSB7CisgICAgICAgIExPR19FUlJPUigiUGx1Z2luTGF5ZXJDaHJvbWl1bTogRmFpbGVk
IHRvIGNyZWF0ZSBzaGFkZXIgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihtX3NoYWRlclByb2dyYW0sICJzX3RleHR1cmUiKTsKKyAgICBtX3NoYWRlck1hdHJpeExvY2F0
aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9zaGFkZXJQcm9ncmFtLCAibWF0
cml4Iik7CisgICAgbV9zaGFkZXJBbHBoYUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3Jt
TG9jYXRpb24obV9zaGFkZXJQcm9ncmFtLCAiYWxwaGEiKTsKKyAgICBBU1NFUlQobV9zaGFkZXJT
YW1wbGVyTG9jYXRpb24gIT0gLTEpOworICAgIEFTU0VSVChtX3NoYWRlck1hdHJpeExvY2F0aW9u
ICE9IC0xKTsKKyAgICBBU1NFUlQobV9zaGFkZXJBbHBoYUxvY2F0aW9uICE9IC0xKTsKKworICAg
IG1faW5pdGlhbGl6ZWQgPSB0cnVlOworfQorCitQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRW
YWx1ZXM6On5TaGFyZWRWYWx1ZXMoKQoreworICAgIGlmIChtX3NoYWRlclByb2dyYW0pCisgICAg
ICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3NoYWRlclByb2dy
YW0pKTsKK30KKworUGFzc1JlZlB0cjxQbHVnaW5MYXllckNocm9taXVtPiBQbHVnaW5MYXllckNo
cm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFBsdWdpbkxheWVyQ2hyb21pdW0ob3duZXIpKTsKK30KKworUGx1Z2lu
TGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKQorICAgIDogTGF5ZXJDaHJvbWl1bShvd25lcikKK3sKK30KKwordm9pZCBQbHVnaW5M
YXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCit7CisgICAgbV90ZXh0dXJl
SWQgPSBpZDsKK30KKwordm9pZCBQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVDb250ZW50cygp
Cit7Cit9CisKK3ZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhdygpCit7CisgICAgQVNTRVJU
KGxheWVyUmVuZGVyZXIoKSk7CisgICAgY29uc3QgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVk
VmFsdWVzKiBzdiA9IGxheWVyUmVuZGVyZXIoKS0+cGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMoKTsK
KyAgICBBU1NFUlQoc3YgJiYgc3YtPmluaXRpYWxpemVkKCkpOworICAgIEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0ID0gbGF5ZXJSZW5kZXJlckNvbnRleHQoKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+YWN0aXZlVGV4dHVyZShHTF9URVhUVVJFMCkpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT5iaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmVJZCkpOworICAgIAor
ICAgIC8vIEZJWE1FOiBzZXR0aW5nIHRoZSB0ZXh0dXJlIHBhcmFtZXRlcnMgZXZlcnkgdGltZSBp
cyByZWR1bmRhbnQuIE1vdmUgdGhpcyBjb2RlIHNvbWV3aGVyZQorICAgIC8vIHdoZXJlIGl0IHdp
bGwgb25seSBoYXBwZW4gb25jZSBwZXIgdGV4dHVyZS4KKyAgICBHTEMoY29udGV4dCwgY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdM
X0xJTkVBUikpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTElORUFSKSk7CisgICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9X
UkFQX1MsIEdMX0NMQU1QX1RPX0VER0UpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVBfVE9f
RURHRSkpOworICAgIAorICAgIGxheWVyUmVuZGVyZXIoKS0+dXNlU2hhZGVyKHN2LT5zaGFkZXJQ
cm9ncmFtKCkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkoc3YtPnNoYWRl
clNhbXBsZXJMb2NhdGlvbigpLCAwKSk7CisgICAgZHJhd1RleHR1cmVkUXVhZChjb250ZXh0LCBs
YXllclJlbmRlcmVyKCktPnByb2plY3Rpb25NYXRyaXgoKSwgZHJhd1RyYW5zZm9ybSgpLAorICAg
ICAgICAgICAgICAgICAgICAgYm91bmRzKCkud2lkdGgoKSwgYm91bmRzKCkuaGVpZ2h0KCksIGRy
YXdPcGFjaXR5KCksCisgICAgICAgICAgICAgICAgICAgICBzdi0+c2hhZGVyTWF0cml4TG9jYXRp
b24oKSwgc3YtPnNoYWRlckFscGhhTG9jYXRpb24oKSk7Cit9CisKK30KKyNlbmRpZiAvLyBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJv
bWl1bS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFBsdWdpbkxheWVy
Q2hyb21pdW1faAorI2RlZmluZSBQbHVnaW5MYXllckNocm9taXVtX2gKKworI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBBIExheWVyIGNvbnRhaW5pbmcgYSB0aGUgcmVuZGVyZWQg
b3V0cHV0IG9mIGEgcGx1Z2luIGluc3RhbmNlLgorY2xhc3MgUGx1Z2luTGF5ZXJDaHJvbWl1bSA6
IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxQ
bHVnaW5MYXllckNocm9taXVtPiBjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lciA9
IDApOworICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKCk7CisgICAgdmlydHVhbCB2b2lkIGRyYXco
KTsKKyAgICAKKyAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCB0ZXh0dXJlSWQpOworICAg
ICAgICAKKyAgICBjbGFzcyBTaGFyZWRWYWx1ZXMgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2hh
cmVkVmFsdWVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKKyAgICAgICAgflNoYXJlZFZh
bHVlcygpOworCisgICAgICAgIHVuc2lnbmVkIHNoYWRlclByb2dyYW0oKSBjb25zdCB7IHJldHVy
biBtX3NoYWRlclByb2dyYW07IH0KKyAgICAgICAgaW50IHNoYWRlclNhbXBsZXJMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uOyB9CisgICAgICAgIGludCBz
aGFkZXJNYXRyaXhMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZGVyTWF0cml4TG9jYXRp
b247IH0KKyAgICAgICAgaW50IHNoYWRlckFscGhhTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3NoYWRlckFscGhhTG9jYXRpb247IH0KKyAgICAgICAgYm9vbCBpbml0aWFsaXplZCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5pdGlhbGl6ZWQ7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7CisgICAgICAgIHVuc2lnbmVkIG1fc2hhZGVyUHJvZ3Jh
bTsKKyAgICAgICAgaW50IG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uOworICAgICAgICBpbnQgbV9z
aGFkZXJNYXRyaXhMb2NhdGlvbjsKKyAgICAgICAgaW50IG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsK
KyAgICAgICAgYm9vbCBtX2luaXRpYWxpemVkOworICAgIH07CisKK3ByaXZhdGU6CisgICAgUGx1
Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKKyAgICB1bnNp
Z25lZCBtX3RleHR1cmVJZDsKK307CisKK30KKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisKKyNlbmRpZgpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3MDE5NCkKKysr
IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMyBA
QAorMjAxMC0xMC0yMCAgQWwgUGF0cmljayAgPGFwYXRyaWNrQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFBs
dWdpbiBpbnN0YW5jZXMgY2FuIHByb3BhZ2F0ZSB0aGUgSUQgb2YgdGhlIE9wZW5HTCB0ZXh0dXJl
IHRoZXkgcmVuZGVyIHRvLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00ODAzMgorCisgICAgICAgICogcHVibGljL1dlYlBsdWdpbi5oOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQbHVnaW46OmdldEJhY2tpbmdUZXh0dXJlSWQpOgorICAgICAgICAqIHB1
YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29u
dGFpbmVyOjpnZXRCYWNraW5nVGV4dHVyZUlkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2lu
Q29udGFpbmVyOjpjb21taXRCYWNraW5nVGV4dHVyZSk6CisgICAgICAgICogc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250YWluZXJJ
bXBsOjpnZXRCYWNraW5nVGV4dHVyZUlkKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29u
dGFpbmVySW1wbDo6Y29tbWl0QmFja2luZ1RleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQ
bHVnaW5Db250YWluZXJJbXBsOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
UGx1Z2luQ29udGFpbmVySW1wbDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisgICAgICAgICog
c3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaDoKKwogMjAxMC0xMC0yMCAgU2hlcmlmZiBCb3Qg
IDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9s
bGluZyBvdXQgcjcwMTY1LgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oCShyZXZp
c2lvbiA3MDE3NSkKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY0LDYgKzY0LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlR2VvbWV0cnkoCiAgICAgICAgIGNvbnN0IFdlYlJlY3QmIGZyYW1lUmVjdCwgY29uc3QgV2Vi
UmVjdCYgY2xpcFJlY3QsCiAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJSZWN0PiYgY3V0T3V0
c1JlY3RzLCBib29sIGlzVmlzaWJsZSkgPSAwOworICAgIAorICAgIC8vIElmIHRoZSBwbHVnaW4g
aW5zdGFuY2UgaXMgYmFja2VkIGJ5IGFuIE9wZW5HTCwgcmV0dXJuIGl0cyBJRCBpbiB0aGUKKyAg
ICAvLyBjb21wb3NpdG9ycyBuYW1lc3BhY2UuIE90aGVyd2lzZSByZXR1cm4gMC4gUmV0dXJucyAw
IGJ5IGRlZmF1bHQuCisgICAgLy8gRklYTUU6IE1ha2UgdGhpcyBwdXJlIHZpcnR1YWwgb25jZSB0
aGlzIGNoYW5nZSBpcyByb2xsZWQgaW50byBjaHJvbWl1bS4KKyAgICB2aXJ0dWFsIHVuc2lnbmVk
IGdldEJhY2tpbmdUZXh0dXJlSWQoKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlRm9jdXMoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVWaXNpYmlsaXR5
KGJvb2wpID0gMDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luQ29udGFp
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5Db250
YWluZXIuaAkocmV2aXNpb24gNzAxNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBs
dWdpbkNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCwxNSBAQCBwdWJsaWM6
CiAgICAgLy8gV2ViUGx1Z2luOjp1cGRhdGVHZW9tZXRyeS4KICAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0R2VvbWV0cnkoKSA9IDA7CiAKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGluc3RhbmNlIGlzIGJh
Y2tlZCBieSBhbiBPcGVuR0wsIHJldHVybiBpdHMgSUQgaW4gdGhlCisgICAgLy8gY29tcG9zaXRv
cnMgbmFtZXNwYWNlLiBPdGhlcndpc2UgcmV0dXJuIDAuCisgICAgLy8gRklYTUU6IE1ha2UgdGhp
cyBwdXJlIHZpcnR1YWwgb25jZSB0aGlzIGNoYW5nZSBpcyByb2xsZWQgaW50byBjaHJvbWl1bS4K
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGdldEJhY2tpbmdUZXh0dXJlSWQoKSB7IHJldHVybiAwOyB9
OworICAgIAorICAgIC8vIENhbGxlZCB3aGVuIHRoZSBiYWNraW5nIHRleHR1cmUgaXMgcmVhZHkg
dG8gYmUgY29tcG9zaXRlZC4KKyAgICAvLyBGSVhNRTogTWFrZSB0aGlzIHB1cmUgdmlydHVhbCBv
bmNlIHRoaXMgY2hhbmdlIGlzIHJvbGxlZCBpbnRvIGNocm9taXVtLgorICAgIHZpcnR1YWwgdm9p
ZCBjb21taXRCYWNraW5nVGV4dHVyZSgpIHt9OworICAgIAogICAgIC8vIERyb3AgYW55IHJlZmVy
ZW5jZXMgdG8gc2NyaXB0IG9iamVjdHMgYWxsb2NhdGVkIGJ5IHRoZSBwbHVnaW4uCiAgICAgLy8g
VGhlc2UgYXJlIG9iamVjdHMgZGVyaXZlZCBmcm9tIFdlYlBsdWdpbjo6c2NyaXB0YWJsZU9iamVj
dC4gIFRoaXMgaXMKICAgICAvLyBjYWxsZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGJlaW5nIGRlc3Ry
b3llZCBvciBpZiBpdCBuZWVkcyB0byBiZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCShyZXZpc2lvbiA3MDE3NSkKKysrIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNs
aWVudEltcGwuaCIKKyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
V2ViQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiV2ViQ3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIldl
YkRhdGFTb3VyY2VJbXBsLmgiCkBAIC0yODcsNiArMjg4LDE5IEBAIHZvaWQgV2ViUGx1Z2luQ29u
dGFpbmVySW1wbDo6cmVwb3J0R2VvbWUKICAgICBtX3dlYlBsdWdpbi0+dXBkYXRlR2VvbWV0cnko
d2luZG93UmVjdCwgY2xpcFJlY3QsIGN1dE91dFJlY3RzLCBpc1Zpc2libGUoKSk7CiB9CiAKKyNp
ZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCit1bnNpZ25lZCBXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOjpnZXRCYWNraW5nVGV4dHVyZUlkKCkKK3sKKyAgICByZXR1cm4gbV93ZWJQbHVnaW4t
PmdldEJhY2tpbmdUZXh0dXJlSWQoKTsKK30KKwordm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBs
Ojpjb21taXRCYWNraW5nVGV4dHVyZSgpCit7CisgICAgaWYgKHBsYXRmb3JtTGF5ZXIoKSkKKyAg
ICAgICAgcGxhdGZvcm1MYXllcigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKK30KKyNlbmRpZgorCiB2
b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7CiAgICAg
RnJhbWUqIGZyYW1lID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwpAQCAtMzkzLDgg
KzQwNywzMSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OndpbGxEZXN0cm95CiAgICAg
bV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzLnJlbW92ZShwb3MpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSogV2ViUGx1Z2luQ29udGFp
bmVySW1wbDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEluIHRoZSBl
dmVudCBvZiBhIGNvbnRleHQgbG9zdCwgdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgcmVjcmVhdGVk
IG9uIHRoZSBjb21wb3NpdG9yJ3MKKyAgICAvLyBjb250ZXh0IGFuZCByZWJvdW5kIHRvIHRoZSBw
bGF0Zm9ybSBsYXllciBoZXJlLgorICAgIHVuc2lnbmVkIGJhY2tpbmdUZXh0dXJlSWQgPSBtX3dl
YlBsdWdpbi0+Z2V0QmFja2luZ1RleHR1cmVJZCgpOworICAgIGlmICghYmFja2luZ1RleHR1cmVJ
ZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJ
ZChiYWNraW5nVGV4dHVyZUlkKTsKKworICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7
Cit9CisjZW5kaWYKKwogLy8gUHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2ViUGx1Z2luQ29udGFp
bmVySW1wbDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVu
dCogZWxlbWVudCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pCisgICAgOiBXZWJDb3JlOjpQbHVnaW5W
aWV3QmFzZSgwKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3dlYlBsdWdpbih3
ZWJQbHVnaW4pCisgICAgLCBtX3BsYXRmb3JtTGF5ZXIoUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKDApKQoreworfQorCiBXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFp
bmVySW1wbCgpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpbkxvYWRPYnNl
cnZlcnMuc2l6ZSgpOyArK2kpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNv
bnRhaW5lckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdp
bkNvbnRhaW5lckltcGwuaAkocmV2aXNpb24gNzAxNzUpCisrKyBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBsdWdpbkNvbnRhaW5lckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTAg
QEAKICNpZm5kZWYgV2ViUGx1Z2luQ29udGFpbmVySW1wbF9oCiAjZGVmaW5lIFdlYlBsdWdpbkNv
bnRhaW5lckltcGxfaAogCisjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJX
ZWJQbHVnaW5Db250YWluZXIuaCIKLQogI2luY2x1ZGUgIldpZGdldC5oIgorCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQzLDcgKzQ0
LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CiBjbGFz
cyBJbnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNzIExheWVyQ2hyb21pdW07CiBj
bGFzcyBNb3VzZUV2ZW50OworY2xhc3MgUGx1Z2luTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIFJlc291
cmNlRXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgV2hlZWxFdmVudDsKQEAg
LTU0LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQbHVnaW47CiBjbGFz
cyBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXI7CiAKLWNsYXNzIFdlYlBsdWdpbkNvbnRhaW5lckltcGwg
OiBwdWJsaWMgV2ViQ29yZTo6V2lkZ2V0LCBwdWJsaWMgV2ViUGx1Z2luQ29udGFpbmVyIHsKK2Ns
YXNzIFdlYlBsdWdpbkNvbnRhaW5lckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6UGx1Z2luVmlld0Jh
c2UsIHB1YmxpYyBXZWJQbHVnaW5Db250YWluZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYlBsdWdpbkNvbnRhaW5lckltcGw+IGNyZWF0ZShXZWJDb3JlOjpIVE1MUGx1Z0lu
RWxlbWVudCogZWxlbWVudCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pCiAgICAgewpAQCAtODUsNiAr
ODgsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgV2ViU3RyaW5nIGV4ZWN1dGVTY3JpcHRVUkwo
Y29uc3QgV2ViVVJMJiwgYm9vbCBwb3B1cHNBbGxvd2VkKTsKICAgICB2aXJ0dWFsIHZvaWQgbG9h
ZEZyYW1lUmVxdWVzdChjb25zdCBXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2ViU3RyaW5nJiB0YXJn
ZXQsIGJvb2wgbm90aWZ5TmVlZGVkLCB2b2lkKiBub3RpZnlEYXRhKTsKICAgICB2aXJ0dWFsIHZv
aWQgem9vbUxldmVsQ2hhbmdlZChkb3VibGUgem9vbUxldmVsKTsKKyAgICAKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCB1bnNpZ25lZCBnZXRCYWNraW5nVGV4
dHVyZUlkKCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdEJhY2tpbmdUZXh0dXJlKCk7CisjZW5k
aWYKIAogICAgIC8vIFRoaXMgY2Fubm90IGJlIG51bGwuCiAgICAgV2ViUGx1Z2luKiBwbHVnaW4o
KSB7IHJldHVybiBtX3dlYlBsdWdpbjsgfQpAQCAtMTE3LDEwICsxMjUsMTIgQEAgcHVibGljOgog
CiAgICAgdm9pZCB3aWxsRGVzdHJveVBsdWdpbkxvYWRPYnNlcnZlcihXZWJQbHVnaW5Mb2FkT2Jz
ZXJ2ZXIqKTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0dWFs
IFdlYkNvcmU6OkxheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyNlbmRpZgor
CiBwcml2YXRlOgotICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwoV2ViQ29yZTo6SFRNTFBsdWdJ
bkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2luKQotICAgICAgICA6IG1fZWxl
bWVudChlbGVtZW50KQotICAgICAgICAsIG1fd2ViUGx1Z2luKHdlYlBsdWdpbikgeyB9CisgICAg
V2ViUGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVu
dCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pOwogICAgIH5XZWJQbHVnaW5Db250YWluZXJJbXBsKCk7
CiAKICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoV2ViQ29yZTo6TW91c2VFdmVudCopOwpAQCAt
MTM4LDYgKzE0OCwxMCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50
KiBtX2VsZW1lbnQ7CiAgICAgV2ViUGx1Z2luKiBtX3dlYlBsdWdpbjsKICAgICBWZWN0b3I8V2Vi
UGx1Z2luTG9hZE9ic2VydmVyKj4gbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzOworCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5MYXllckNo
cm9taXVtPiBtX3BsYXRmb3JtTGF5ZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72104</attachid>
            <date>2010-10-27 15:59:13 -0700</date>
            <delta_ts>2010-10-28 17:33:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48032-20101027155912.patch</filename>
            <type>text/plain</type>
            <size>22865</size>
            <attacher name="Al">apatrick</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDY3MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgUGx1Z2luTGF5ZXJDaHJvbWl1bSwgd2hpY2ggY29tcG9zaXRlcyBwbHVnaW4gaW5zdGFu
Y2VzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkIE9wZW5HTCBiYWNraW5nIHRleHR1cmUuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MDMyCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2Jq
ZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBT
aGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNo
YXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVt
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnNldFRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXM6OnNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJNYXRyaXhMb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
OnNoYWRlckFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAtMTAtMjcgIFNhdGlzaCBT
YW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xs
aW5nIG91dCByNzA2NjUuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzA2NzIpCisrKyBXZWJDb3JlL1dlYkNv
cmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtMjQ0NCw2ICsyNDQ0LDggQEAKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRl
Q2hyb21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxh
dGZvcm1JY29uLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2lu
LmNwcCcsCkluZGV4OiBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA3MDY3MikK
KysrIFdlYkNvcmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzY2LDggKzM2Niw4IEBAIGJvb2wgU3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4oSFRNTFBsdWcK
IAogICAgIHJlbmRlcmVyLT5zZXRXaWRnZXQod2lkZ2V0KTsKICAgICBtX2NvbnRhaW5zUGx1Z2lu
cyA9IHRydWU7Ci0KLSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAKKyNpZiBF
TkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykgfHwgRU5BQkxFKDNEX1BMVUdJTikKICAgICBw
bHVnaW5FbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsK
ICNlbmRpZgogICAgIHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MDY3MikK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3MCw2ICszNzAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNl
dE5lZWRzRGlzcGxheSgpCiB7CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShtX2JvdW5kcyk7CiAg
ICAgbV9jb250ZW50c0RpcnR5ID0gdHJ1ZTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2
b2lkIExheWVyQ2hyb21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDcwNjcyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MzAsNyArNzMwLDEwIEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gK
ICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5
ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fY2FudmFz
TGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hh
cmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fdmlkZW9MYXllclNoYXJlZFZhbHVl
cyA9IGFkb3B0UHRyKG5ldyBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRl
eHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkg
fHwgIW1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NhbnZh
c0xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX3ZpZGVvTGF5ZXJTaGFyZWRW
YWx1ZXMtPmluaXRpYWxpemVkKCkpIHsKKyAgICBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzID0g
YWRvcHRQdHIobmV3IFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQu
Z2V0KCkpKTsKKworICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8
fCAhbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2FudmFz
TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkKKyAgICAgICAgfHwgIW1fdmlkZW9MYXll
clNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9wbHVnaW5MYXllclNoYXJlZFZhbHVl
cy0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtNzQ2LDYgKzc0OSw3IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmUKICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZh
bHVlcy5jbGVhcigpOwogICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKICAg
ICBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKKyAgICBtX3BsdWdpbkxheWVyU2hh
cmVkVmFsdWVzLmNsZWFyKCk7CiAKICAgICBpZiAobV9zY3JvbGxTaGFkZXJQcm9ncmFtKSB7CiAg
ICAgICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3Njcm9sbFNo
YWRlclByb2dyYW0pKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gNzA2NzIp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQ29udGVu
dExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIgorI2luY2x1ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJT
a0JpdG1hcC5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CkBAIC0xMDcsNiArMTA4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IENvbnRl
bnRMYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CiAgICAg
Y29uc3QgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjYW52YXNMYXllclNoYXJl
ZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7
IH0KICAgICBjb25zdCBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogdmlkZW9MYXll
clNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy5n
ZXQoKTsgfQorICAgIGNvbnN0IFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogcGx1
Z2luTGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkxheWVyU2hhcmVk
VmFsdWVzLmdldCgpOyB9CiAKICAgICB2b2lkIHJlc2l6ZU9uc2NyZWVuQ29udGVudChjb25zdCBJ
bnRTaXplJik7CiAKQEAgLTE4MCw2ICsxODIsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxDb250
ZW50TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVl
czsKICAgICBPd25QdHI8Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZh
c0xheWVyU2hhcmVkVmFsdWVzOwogICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJl
ZFZhbHVlcz4gbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxQbHVnaW5MYXll
ckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXM7CiAKICAg
ICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIH07CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJD
aHJvbWl1bS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEz
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1
Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2hhZGVy
UHJvZ3JhbSgwKQorICAgICwgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCisgICAgLCBtX3No
YWRlck1hdHJpeExvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQor
ICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKK3sKKyAgICBjaGFyIHZlcnRleFNoYWRlclN0cmlu
Z1tdID0KKyAgICAgICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAgICAg
ICJhdHRyaWJ1dGUgdmVjMiBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQ0
IG1hdHJpeDsgICAgICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAg
ICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAg
ICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRp
b24gPSBtYXRyaXggKiBhX3Bvc2l0aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFf
dGV4Q29vcmQ7ICAgXG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxu
IjsKKworICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAg
ICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4i
CisgICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAgICAgICAg
ICAgICAgXG4iCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIHZlYzQgdGV4
Q29sb3IgPSB0ZXh0dXJlMkQoc190ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgdl90ZXhDb29y
ZC55KSk7IFxuIgorICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRl
eENvbG9yLnksIHRleENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxuIgorICAgICAgICAi
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsK
KworICAgIG1fc2hhZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LCB2
ZXJ0ZXhTaGFkZXJTdHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1fc2hh
ZGVyUHJvZ3JhbSkgeworICAgICAgICBMT0dfRVJST1IoIlBsdWdpbkxheWVyQ2hyb21pdW06IEZh
aWxlZCB0byBjcmVhdGUgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24obV9zaGFkZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgbV9zaGFkZXJNYXRyaXhM
b2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2hhZGVyUHJvZ3JhbSwg
Im1hdHJpeCIpOworICAgIG1fc2hhZGVyQWxwaGFMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKG1fc2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisgICAgQVNTRVJUKG1fc2hh
ZGVyU2FtcGxlckxvY2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV9zaGFkZXJNYXRyaXhMb2Nh
dGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fc2hhZGVyQWxwaGFMb2NhdGlvbiAhPSAtMSk7CisK
KyAgICBtX2luaXRpYWxpemVkID0gdHJ1ZTsKK30KKworUGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hh
cmVkVmFsdWVzOjp+U2hhcmVkVmFsdWVzKCkKK3sKKyAgICBpZiAobV9zaGFkZXJQcm9ncmFtKQor
ICAgICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9zaGFkZXJQ
cm9ncmFtKSk7Cit9CisKK1Bhc3NSZWZQdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bT4gUGx1Z2luTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbHVnaW5MYXllckNocm9taXVtKG93bmVyKSk7Cit9CisKK1Bs
dWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcikKKyAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCit7Cit9CisKK3ZvaWQgUGx1
Z2luTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKQoreworICAgIG1fdGV4
dHVyZUlkID0gaWQ7Cit9CisKK3ZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVu
dHMoKQoreworfQorCit2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OmRyYXcoKQoreworICAgIEFT
U0VSVChsYXllclJlbmRlcmVyKCkpOworICAgIGNvbnN0IFBsdWdpbkxheWVyQ2hyb21pdW06OlNo
YXJlZFZhbHVlcyogc3YgPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxheWVyU2hhcmVkVmFsdWVz
KCk7CisgICAgQVNTRVJUKHN2ICYmIHN2LT5pbml0aWFsaXplZCgpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4
dCwgY29udGV4dC0+YmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAg
ICAKKyAgICAvLyBGSVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRp
bWUgaXMgcmVkdW5kYW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUKKyAgICAvLyB3aGVyZSBp
dCB3aWxsIG9ubHkgaGFwcGVuIG9uY2UgcGVyIHRleHR1cmUuCisgICAgR0xDKGNvbnRleHQsIGNv
bnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVS
LCBHTF9MSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
TF9URVhUVVJFXzJELCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOworICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9TLCBHTF9DTEFNUF9UT19FREdFKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1Q
X1RPX0VER0UpKTsKKyAgICAKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+c2hh
ZGVyUHJvZ3JhbSgpKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5z
aGFkZXJTYW1wbGVyTG9jYXRpb24oKSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4
dCwgbGF5ZXJSZW5kZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwK
KyAgICAgICAgICAgICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgp
LCBkcmF3T3BhY2l0eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExv
Y2F0aW9uKCksIHN2LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworfQorCit9CisjZW5kaWYgLy8g
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVy
Q2hyb21pdW0uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRl
ZiBQbHVnaW5MYXllckNocm9taXVtX2gKKyNkZWZpbmUgUGx1Z2luTGF5ZXJDaHJvbWl1bV9oCisK
KyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBMYXllciBjb250YWluaW5nIGEg
dGhlIHJlbmRlcmVkIG91dHB1dCBvZiBhIHBsdWdpbiBpbnN0YW5jZS4KK2NsYXNzIFBsdWdpbkxh
eWVyQ2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJv
bWl1bSogb3duZXIgPSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOworICAgIHZpcnR1
YWwgdm9pZCBkcmF3KCk7CisgICAgCisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4
dHVyZUlkKTsKKyAgICAgICAgCisgICAgY2xhc3MgU2hhcmVkVmFsdWVzIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFNoYXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CisgICAg
ICAgIH5TaGFyZWRWYWx1ZXMoKTsKKworICAgICAgICB1bnNpZ25lZCBzaGFkZXJQcm9ncmFtKCkg
Y29uc3QgeyByZXR1cm4gbV9zaGFkZXJQcm9ncmFtOyB9CisgICAgICAgIGludCBzaGFkZXJTYW1w
bGVyTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsgfQor
ICAgICAgICBpbnQgc2hhZGVyTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRl
ck1hdHJpeExvY2F0aW9uOyB9CisgICAgICAgIGludCBzaGFkZXJBbHBoYUxvY2F0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9zaGFkZXJBbHBoYUxvY2F0aW9uOyB9CisgICAgICAgIGJvb2wgaW5pdGlh
bGl6ZWQoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxpemVkOyB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgICAgICB1bnNpZ25lZCBt
X3NoYWRlclByb2dyYW07CisgICAgICAgIGludCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKKyAg
ICAgICAgaW50IG1fc2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlckFs
cGhhTG9jYXRpb247CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB9OworCitwcml2
YXRlOgorICAgIFBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25l
cik7CisgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNp
b24gNzA2NzIpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W2Nocm9taXVtXSBQbHVnaW4gaW5zdGFuY2VzIGNhbiBwcm9wYWdhdGUgdGhlIElEIG9mIHRoZSBP
cGVuR0wgdGV4dHVyZSB0aGV5IHJlbmRlciB0by4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDgwMzIKKworICAgICAgICAqIHB1YmxpYy9XZWJQbHVn
aW4uaDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luOjpnZXRCYWNraW5nVGV4dHVyZUlkKToK
KyAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmg6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsdWdpbkNvbnRhaW5lcjo6Z2V0QmFja2luZ1RleHR1cmVJZCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBsdWdpbkNvbnRhaW5lcjo6Y29tbWl0QmFja2luZ1RleHR1cmUpOgorICAgICAgICAq
IHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6Z2V0QmFja2luZ1RleHR1cmVJZCk6CisgICAgICAgIChXZWJLaXQ6
OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OmNvbW1pdEJhY2tpbmdUZXh0dXJlKToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cGxhdGZvcm1MYXllcik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lckltcGw6OldlYlBsdWdpbkNvbnRhaW5lckltcGwp
OgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmg6CisKIDIwMTAtMTAtMjcg
IFNhdGlzaCBTYW1wYXRoICA8c2F0aXNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmll
d2VkLCByb2xsaW5nIG91dCByNzA2NjUuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlBsdWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2lu
LmgJKHJldmlzaW9uIDcwNjcyKQorKysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVHZW9tZXRyeSgKICAgICAgICAgY29uc3QgV2ViUmVjdCYgZnJhbWVSZWN0LCBj
b25zdCBXZWJSZWN0JiBjbGlwUmVjdCwKICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlJlY3Q+
JiBjdXRPdXRzUmVjdHMsIGJvb2wgaXNWaXNpYmxlKSA9IDA7CisgICAgCisgICAgLy8gSWYgdGhl
IHBsdWdpbiBpbnN0YW5jZSBpcyBiYWNrZWQgYnkgYW4gT3BlbkdMIHRleHR1cmUsIHJldHVybiBp
dHMgSUQgaW4gdGhlCisgICAgLy8gY29tcG9zaXRvcnMgbmFtZXNwYWNlLiBPdGhlcndpc2UgcmV0
dXJuIDAuIFJldHVybnMgMCBieSBkZWZhdWx0LgorICAgIHZpcnR1YWwgdW5zaWduZWQgZ2V0QmFj
a2luZ1RleHR1cmVJZCgpIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVG
b2N1cyhib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVZpc2liaWxpdHkoYm9vbCkg
PSAwOwpJbmRleDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbkNvbnRhaW5lci5o
CShyZXZpc2lvbiA3MDY3MikKKysrIFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luQ29u
dGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDEwIEBAIHB1YmxpYzoKICAgICAv
LyBDYXVzZXMgdGhlIGNvbnRhaW5lciB0byByZXBvcnQgaXRzIGN1cnJlbnQgZ2VvbWV0cnkgdmlh
CiAgICAgLy8gV2ViUGx1Z2luOjp1cGRhdGVHZW9tZXRyeS4KICAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0R2VvbWV0cnkoKSA9IDA7Ci0KKyAgICAKKyAgICAvLyBDYWxsZWQgd2hlbiB0aGUgYmFja2lu
ZyB0ZXh0dXJlIGlzIHJlYWR5IHRvIGJlIGNvbXBvc2l0ZWQuCisgICAgdmlydHVhbCB2b2lkIGNv
bW1pdEJhY2tpbmdUZXh0dXJlKCkge30KKyAgICAKICAgICAvLyBEcm9wIGFueSByZWZlcmVuY2Vz
IHRvIHNjcmlwdCBvYmplY3RzIGFsbG9jYXRlZCBieSB0aGUgcGx1Z2luLgogICAgIC8vIFRoZXNl
IGFyZSBvYmplY3RzIGRlcml2ZWQgZnJvbSBXZWJQbHVnaW46OnNjcmlwdGFibGVPYmplY3QuICBU
aGlzIGlzCiAgICAgLy8gY2FsbGVkIHdoZW4gdGhlIHBsdWdpbiBpcyBiZWluZyBkZXN0cm95ZWQg
b3IgaWYgaXQgbmVlZHMgdG8gYmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2lu
Q29udGFpbmVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmNwcAkocmV2aXNpb24gNzA2NzIpCisrKyBXZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2
ICszMyw3IEBACiAKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRJ
bXBsLmgiCisjaW5jbHVkZSAiUGx1Z2luTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIldlYkNs
aXBib2FyZC5oIgogI2luY2x1ZGUgIldlYkN1cnNvckluZm8uaCIKICNpbmNsdWRlICJXZWJEYXRh
U291cmNlSW1wbC5oIgpAQCAtMjg3LDYgKzI4OCwxNCBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5l
ckltcGw6OnJlcG9ydEdlb21lCiAgICAgbV93ZWJQbHVnaW4tPnVwZGF0ZUdlb21ldHJ5KHdpbmRv
d1JlY3QsIGNsaXBSZWN0LCBjdXRPdXRSZWN0cywgaXNWaXNpYmxlKCkpOwogfQogCit2b2lkIFdl
YlBsdWdpbkNvbnRhaW5lckltcGw6OmNvbW1pdEJhY2tpbmdUZXh0dXJlKCkKK3sKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgaWYgKHBsYXRmb3JtTGF5ZXIoKSkKKyAgICAg
ICAgcGxhdGZvcm1MYXllcigpLT5zZXROZWVkc0Rpc3BsYXkoKTsKKyNlbmRpZgorfQorCiB2b2lk
IFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gbV9lbGVtZW50LT5kb2N1bWVudCgpLT5mcmFtZSgpOwpAQCAtMzkzLDggKzQw
MiwzMSBAQCB2b2lkIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OndpbGxEZXN0cm95CiAgICAgbV9w
bHVnaW5Mb2FkT2JzZXJ2ZXJzLnJlbW92ZShwb3MpOwogfQogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSogV2ViUGx1Z2luQ29udGFpbmVy
SW1wbDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IEluIHRoZSBldmVu
dCBvZiBhIGNvbnRleHQgbG9zdCwgdGhlIHRleHR1cmUgbmVlZHMgdG8gYmUgcmVjcmVhdGVkIG9u
IHRoZSBjb21wb3NpdG9yJ3MKKyAgICAvLyBjb250ZXh0IGFuZCByZWJvdW5kIHRvIHRoZSBwbGF0
Zm9ybSBsYXllciBoZXJlLgorICAgIHVuc2lnbmVkIGJhY2tpbmdUZXh0dXJlSWQgPSBtX3dlYlBs
dWdpbi0+Z2V0QmFja2luZ1RleHR1cmVJZCgpOworICAgIGlmICghYmFja2luZ1RleHR1cmVJZCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX3BsYXRmb3JtTGF5ZXItPnNldFRleHR1cmVJZChi
YWNraW5nVGV4dHVyZUlkKTsKKworICAgIHJldHVybiBtX3BsYXRmb3JtTGF5ZXIuZ2V0KCk7Cit9
CisjZW5kaWYKKwogLy8gUHJpdmF0ZSBtZXRob2RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2ViUGx1Z2luQ29udGFpbmVy
SW1wbDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCog
ZWxlbWVudCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pCisgICAgOiBXZWJDb3JlOjpQbHVnaW5WaWV3
QmFzZSgwKQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3dlYlBsdWdpbih3ZWJQ
bHVnaW4pCisgICAgLCBtX3BsYXRmb3JtTGF5ZXIoUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KDApKQoreworfQorCiBXZWJQbHVnaW5Db250YWluZXJJbXBsOjp+V2ViUGx1Z2luQ29udGFpbmVy
SW1wbCgpCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BsdWdpbkxvYWRPYnNlcnZl
cnMuc2l6ZSgpOyArK2kpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRh
aW5lckltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNv
bnRhaW5lckltcGwuaAkocmV2aXNpb24gNzA2NzIpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlBsdWdpbkNvbnRhaW5lckltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTAgQEAK
ICNpZm5kZWYgV2ViUGx1Z2luQ29udGFpbmVySW1wbF9oCiAjZGVmaW5lIFdlYlBsdWdpbkNvbnRh
aW5lckltcGxfaAogCisjaW5jbHVkZSAiUGx1Z2luVmlld0Jhc2UuaCIKICNpbmNsdWRlICJXZWJQ
bHVnaW5Db250YWluZXIuaCIKLQogI2luY2x1ZGUgIldpZGdldC5oIgorCiAjaW5jbHVkZSA8d3Rm
L1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTQzLDcgKzQ0LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTFBsdWdJbkVsZW1lbnQ7CiBjbGFzcyBJ
bnRSZWN0OwogY2xhc3MgS2V5Ym9hcmRFdmVudDsKK2NsYXNzIExheWVyQ2hyb21pdW07CiBjbGFz
cyBNb3VzZUV2ZW50OworY2xhc3MgUGx1Z2luTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIFJlc291cmNl
RXJyb3I7CiBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwogY2xhc3MgV2hlZWxFdmVudDsKQEAgLTU0
LDcgKzU3LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJQbHVnaW47CiBjbGFzcyBX
ZWJQbHVnaW5Mb2FkT2JzZXJ2ZXI7CiAKLWNsYXNzIFdlYlBsdWdpbkNvbnRhaW5lckltcGwgOiBw
dWJsaWMgV2ViQ29yZTo6V2lkZ2V0LCBwdWJsaWMgV2ViUGx1Z2luQ29udGFpbmVyIHsKK2NsYXNz
IFdlYlBsdWdpbkNvbnRhaW5lckltcGwgOiBwdWJsaWMgV2ViQ29yZTo6UGx1Z2luVmlld0Jhc2Us
IHB1YmxpYyBXZWJQbHVnaW5Db250YWluZXIgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYlBsdWdpbkNvbnRhaW5lckltcGw+IGNyZWF0ZShXZWJDb3JlOjpIVE1MUGx1Z0luRWxl
bWVudCogZWxlbWVudCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pCiAgICAgewpAQCAtODAsMTEgKzgz
LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIHZpcnR1
YWwgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBXZWJSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lk
IHJlcG9ydEdlb21ldHJ5KCk7CisgICAgdmlydHVhbCB2b2lkIGNvbW1pdEJhY2tpbmdUZXh0dXJl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyU2NyaXB0T2JqZWN0cygpOwogICAgIHZpcnR1YWwg
TlBPYmplY3QqIHNjcmlwdGFibGVPYmplY3RGb3JFbGVtZW50KCk7CiAgICAgdmlydHVhbCBXZWJT
dHJpbmcgZXhlY3V0ZVNjcmlwdFVSTChjb25zdCBXZWJVUkwmLCBib29sIHBvcHVwc0FsbG93ZWQp
OwogICAgIHZpcnR1YWwgdm9pZCBsb2FkRnJhbWVSZXF1ZXN0KGNvbnN0IFdlYlVSTFJlcXVlc3Qm
LCBjb25zdCBXZWJTdHJpbmcmIHRhcmdldCwgYm9vbCBub3RpZnlOZWVkZWQsIHZvaWQqIG5vdGlm
eURhdGEpOwotICAgIHZpcnR1YWwgdm9pZCB6b29tTGV2ZWxDaGFuZ2VkKGRvdWJsZSB6b29tTGV2
ZWwpOworICAgIHZpcnR1YWwgdm9pZCB6b29tTGV2ZWxDaGFuZ2VkKGRvdWJsZSB6b29tTGV2ZWwp
OyAgICAKIAogICAgIC8vIFRoaXMgY2Fubm90IGJlIG51bGwuCiAgICAgV2ViUGx1Z2luKiBwbHVn
aW4oKSB7IHJldHVybiBtX3dlYlBsdWdpbjsgfQpAQCAtMTE3LDEwICsxMjEsMTIgQEAgcHVibGlj
OgogCiAgICAgdm9pZCB3aWxsRGVzdHJveVBsdWdpbkxvYWRPYnNlcnZlcihXZWJQbHVnaW5Mb2Fk
T2JzZXJ2ZXIqKTsKIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICB2aXJ0
dWFsIFdlYkNvcmU6OkxheWVyQ2hyb21pdW0qIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyNlbmRp
ZgorCiBwcml2YXRlOgotICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwoV2ViQ29yZTo6SFRNTFBs
dWdJbkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2luKQotICAgICAgICA6IG1f
ZWxlbWVudChlbGVtZW50KQotICAgICAgICAsIG1fd2ViUGx1Z2luKHdlYlBsdWdpbikgeyB9Cisg
ICAgV2ViUGx1Z2luQ29udGFpbmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxl
bWVudCwgV2ViUGx1Z2luKiB3ZWJQbHVnaW4pOwogICAgIH5XZWJQbHVnaW5Db250YWluZXJJbXBs
KCk7CiAKICAgICB2b2lkIGhhbmRsZU1vdXNlRXZlbnQoV2ViQ29yZTo6TW91c2VFdmVudCopOwpA
QCAtMTM4LDYgKzE0NCwxMCBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVt
ZW50KiBtX2VsZW1lbnQ7CiAgICAgV2ViUGx1Z2luKiBtX3dlYlBsdWdpbjsKICAgICBWZWN0b3I8
V2ViUGx1Z2luTG9hZE9ic2VydmVyKj4gbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzOworCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFJlZlB0cjxXZWJDb3JlOjpQbHVnaW5MYXll
ckNocm9taXVtPiBtX3BsYXRmb3JtTGF5ZXI7CisjZW5kaWYKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72270</attachid>
            <date>2010-10-28 17:33:16 -0700</date>
            <delta_ts>2010-11-02 16:05:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48032-20101028173315.patch</filename>
            <type>text/plain</type>
            <size>22722</size>
            <attacher name="Al">apatrick</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MDgxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgUGx1Z2luTGF5ZXJDaHJvbWl1bSwgd2hpY2ggY29tcG9zaXRlcyBwbHVnaW4gaW5zdGFu
Y2VzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkIE9wZW5HTCBiYWNraW5nIHRleHR1cmUuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MDMyCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2Jq
ZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBT
aGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNo
YXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVt
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnNldFRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXM6OnNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJNYXRyaXhMb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
OnNoYWRlckFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAtMTAtMjggIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmlu
c29uLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9X
ZWJDb3JlLmd5cGkJKHJldmlzaW9uIDcwODE4KQorKysgV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdv
cmtpbmcgY29weSkKQEAgLTI0NDQsNiArMjQ0NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgnLAogICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01lZGlhUGxheWVyUHJpdmF0ZUNocm9taXVtLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtSWNvbi5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNo
cm9taXVtLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1
Z2luTGF5ZXJDaHJvbWl1bS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLApJbmRl
eDogV2ViQ29yZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24gNzA4MTgpCisrKyBXZWJDb3Jl
L2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2Niw4ICszNjYs
OCBAQCBib29sIFN1YmZyYW1lTG9hZGVyOjpsb2FkUGx1Z2luKEhUTUxQbHVnCiAKICAgICByZW5k
ZXJlci0+c2V0V2lkZ2V0KHdpZGdldCk7CiAgICAgbV9jb250YWluc1BsdWdpbnMgPSB0cnVlOwot
Ci0jaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCisgCisjaWYgRU5BQkxFKFBMVUdJ
Tl9QUk9YWV9GT1JfVklERU8pIHx8IEVOQUJMRSgzRF9QTFVHSU4pCiAgICAgcGx1Z2luRWxlbWVu
dC0+c2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CiAjZW5kaWYKICAg
ICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gNzA4MTgpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNzAsNiArMzcwLDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpzZXROZWVkc0Rpc3Bs
YXkoKQogewogICAgIG1fZGlydHlSZWN0LnNldFNpemUobV9ib3VuZHMpOwogICAgIG1fY29udGVu
dHNEaXJ0eSA9IHRydWU7CisgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAogdm9pZCBMYXllckNo
cm9taXVtOjpyZXNldE5lZWRzRGlzcGxheSgpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA3MDgxOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMwLDcgKzczMCwx
MCBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aW5pdGlhbGl6ZVNoCiAgICAgbV9jb250
ZW50TGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0cihuZXcgQ29udGVudExheWVyQ2hyb21pdW06
OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVk
VmFsdWVzID0gYWRvcHRQdHIobmV3IENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyht
X2NvbnRleHQuZ2V0KCkpKTsKICAgICBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMgPSBhZG9wdFB0
cihuZXcgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7
Ci0gICAgaWYgKCFtX2xheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NvbnRl
bnRMYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jYW52YXNMYXllclNoYXJl
ZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV92aWRlb0xheWVyU2hhcmVkVmFsdWVzLT5pbml0
aWFsaXplZCgpKSB7CisgICAgbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5l
dyBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMobV9jb250ZXh0LmdldCgpKSk7CisK
KyAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY29udGVu
dExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NhbnZhc0xheWVyU2hhcmVk
VmFsdWVzLT5pbml0aWFsaXplZCgpCisgICAgICAgIHx8ICFtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1
ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxp
emVkKCkpIHsKICAgICAgICAgY2xlYW51cFNoYXJlZE9iamVjdHMoKTsKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KQEAgLTc0Niw2ICs3NDksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y2xlYW51cFNoYXJlCiAgICAgbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIo
KTsKICAgICBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CiAgICAgbV92aWRlb0xh
eWVyU2hhcmVkVmFsdWVzLmNsZWFyKCk7CisgICAgbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcy5j
bGVhcigpOwogCiAgICAgaWYgKG1fc2Nyb2xsU2hhZGVyUHJvZ3JhbSkgewogICAgICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9zY3JvbGxTaGFkZXJQcm9ncmFt
KSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDcwODE4KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29y
a2luZyBjb3B5KQpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIK
ICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpAQCAtMTA3LDYgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBDb250ZW50TGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzKiBjb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQogICAgIGNvbnN0IENhbnZh
c0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMoKSBj
b25zdCB7IHJldHVybiBtX2NhbnZhc0xheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CiAgICAgY29u
c3QgVmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHZpZGVvTGF5ZXJTaGFyZWRWYWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KKyAg
ICBjb25zdCBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMqIHBsdWdpbkxheWVyU2hh
cmVkVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcy5nZXQo
KTsgfQogCiAgICAgdm9pZCByZXNpemVPbnNjcmVlbkNvbnRlbnQoY29uc3QgSW50U2l6ZSYpOwog
CkBAIC0xODAsNiArMTgyLDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8Q29udGVudExheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlcz4gbV9jb250ZW50TGF5ZXJTaGFyZWRWYWx1ZXM7CiAgICAgT3du
UHRyPENhbnZhc0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV9jYW52YXNMYXllclNoYXJl
ZFZhbHVlczsKICAgICBPd25QdHI8VmlkZW9MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM+IG1f
dmlkZW9MYXllclNoYXJlZFZhbHVlczsKKyAgICBPd25QdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzPiBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzOwogCiAgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiB9OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVn
aW5MYXllckNocm9taXVtLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcp
CisKKyNpbmNsdWRlICJQbHVnaW5MYXllckNocm9taXVtLmgiCisKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgorI2luY2x1
ZGUgPEdMRVMyL2dsMi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BsdWdpbkxheWVyQ2hy
b21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0KQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3NoYWRlclByb2dyYW0oMCkK
KyAgICAsIG1fc2hhZGVyU2FtcGxlckxvY2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJNYXRyaXhM
b2NhdGlvbigtMSkKKyAgICAsIG1fc2hhZGVyQWxwaGFMb2NhdGlvbigtMSkKKyAgICAsIG1faW5p
dGlhbGl6ZWQoZmFsc2UpCit7CisgICAgY2hhciB2ZXJ0ZXhTaGFkZXJTdHJpbmdbXSA9CisgICAg
ICAgICJhdHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOyAgIFxuIgorICAgICAgICAiYXR0cmlidXRl
IHZlYzIgYV90ZXhDb29yZDsgICBcbiIKKyAgICAgICAgInVuaWZvcm0gbWF0NCBtYXRyaXg7ICAg
ICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgIFxuIgorICAg
ICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIGdsX1Bvc2l0aW9uID0gbWF0cml4
ICogYV9wb3NpdGlvbjsgXG4iCisgICAgICAgICIgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAg
IFxuIgorICAgICAgICAifSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBj
aGFyIGZyYWdtZW50U2hhZGVyU3RyaW5nW10gPQorICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAidmFyeWluZyB2
ZWMyIHZfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAi
dW5pZm9ybSBzYW1wbGVyMkQgc190ZXh0dXJlOyAgICAgICAgICAgICAgICAgICAgICAgIFxuIgor
ICAgICAgICAidW5pZm9ybSBmbG9hdCBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFxuIgorICAgICAgICAidm9pZCBtYWluKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAiICB2ZWM0IHRleENvbG9yID0gdGV4
dHVyZTJEKHNfdGV4dHVyZSwgdmVjMih2X3RleENvb3JkLngsIHZfdGV4Q29vcmQueSkpOyBcbiIK
KyAgICAgICAgIiAgZ2xfRnJhZ0NvbG9yID0gdmVjNCh0ZXhDb2xvci54LCB0ZXhDb2xvci55LCB0
ZXhDb2xvci56LCB0ZXhDb2xvci53KSAqIGFscGhhOyBcbiIKKyAgICAgICAgIn0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiI7CisKKyAgICBtX3No
YWRlclByb2dyYW0gPSBjcmVhdGVTaGFkZXJQcm9ncmFtKG1fY29udGV4dCwgdmVydGV4U2hhZGVy
U3RyaW5nLCBmcmFnbWVudFNoYWRlclN0cmluZyk7CisgICAgaWYgKCFtX3NoYWRlclByb2dyYW0p
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJQbHVnaW5MYXllckNocm9taXVtOiBGYWlsZWQgdG8gY3Jl
YXRlIHNoYWRlciBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3No
YWRlclNhbXBsZXJMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2hh
ZGVyUHJvZ3JhbSwgInNfdGV4dHVyZSIpOworICAgIG1fc2hhZGVyTWF0cml4TG9jYXRpb24gPSBt
X2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihtX3NoYWRlclByb2dyYW0sICJtYXRyaXgiKTsK
KyAgICBtX3NoYWRlckFscGhhTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlv
bihtX3NoYWRlclByb2dyYW0sICJhbHBoYSIpOworICAgIEFTU0VSVChtX3NoYWRlclNhbXBsZXJM
b2NhdGlvbiAhPSAtMSk7CisgICAgQVNTRVJUKG1fc2hhZGVyTWF0cml4TG9jYXRpb24gIT0gLTEp
OworICAgIEFTU0VSVChtX3NoYWRlckFscGhhTG9jYXRpb24gIT0gLTEpOworCisgICAgbV9pbml0
aWFsaXplZCA9IHRydWU7Cit9CisKK1BsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6
flNoYXJlZFZhbHVlcygpCit7CisgICAgaWYgKG1fc2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgR0xD
KG1fY29udGV4dCwgbV9jb250ZXh0LT5kZWxldGVQcm9ncmFtKG1fc2hhZGVyUHJvZ3JhbSkpOwor
fQorCitQYXNzUmVmUHRyPFBsdWdpbkxheWVyQ2hyb21pdW0+IFBsdWdpbkxheWVyQ2hyb21pdW06
OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQoreworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUGx1Z2luTGF5ZXJDaHJvbWl1bShvd25lcikpOworfQorCitQbHVnaW5MYXllckNo
cm9taXVtOjpQbHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
CisgICAgOiBMYXllckNocm9taXVtKG93bmVyKQoreworfQorCit2b2lkIFBsdWdpbkxheWVyQ2hy
b21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKK3sKKyAgICBtX3RleHR1cmVJZCA9IGlk
OworfQorCit2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbnRlbnRzKCkKK3sKK30K
Kwordm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KCkKK3sKKyAgICBBU1NFUlQobGF5ZXJS
ZW5kZXJlcigpKTsKKyAgICBjb25zdCBQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXMq
IHN2ID0gbGF5ZXJSZW5kZXJlcigpLT5wbHVnaW5MYXllclNoYXJlZFZhbHVlcygpOworICAgIEFT
U0VSVChzdiAmJiBzdi0+aW5pdGlhbGl6ZWQoKSk7CisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSBsYXllclJlbmRlcmVyQ29udGV4dCgpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5hY3RpdmVUZXh0dXJlKEdMX1RFWFRVUkUwKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZUlkKSk7CisgICAgCisgICAgLy8g
RklYTUU6IHNldHRpbmcgdGhlIHRleHR1cmUgcGFyYW1ldGVycyBldmVyeSB0aW1lIGlzIHJlZHVu
ZGFudC4gTW92ZSB0aGlzIGNvZGUgc29tZXdoZXJlCisgICAgLy8gd2hlcmUgaXQgd2lsbCBvbmx5
IGhhcHBlbiBvbmNlIHBlciB0ZXh0dXJlLgorICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElORUFS
KSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8y
RCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpKTsKKyAgICBHTEMoY29udGV4dCwg
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfUywg
R0xfQ0xBTVBfVE9fRURHRSkpOworICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKSk7
CisgICAgCisgICAgbGF5ZXJSZW5kZXJlcigpLT51c2VTaGFkZXIoc3YtPnNoYWRlclByb2dyYW0o
KSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnVuaWZvcm0xaShzdi0+c2hhZGVyU2FtcGxl
ckxvY2F0aW9uKCksIDApKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkKGNvbnRleHQsIGxheWVyUmVu
ZGVyZXIoKS0+cHJvamVjdGlvbk1hdHJpeCgpLCBkcmF3VHJhbnNmb3JtKCksCisgICAgICAgICAg
ICAgICAgICAgICBib3VuZHMoKS53aWR0aCgpLCBib3VuZHMoKS5oZWlnaHQoKSwgZHJhd09wYWNp
dHkoKSwKKyAgICAgICAgICAgICAgICAgICAgIHN2LT5zaGFkZXJNYXRyaXhMb2NhdGlvbigpLCBz
di0+c2hhZGVyQWxwaGFMb2NhdGlvbigpKTsKK30KKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgUGx1Z2luTGF5
ZXJDaHJvbWl1bV9oCisjZGVmaW5lIFBsdWdpbkxheWVyQ2hyb21pdW1faAorCisjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgTGF5ZXIgY29udGFpbmluZyBhIHRoZSByZW5kZXJl
ZCBvdXRwdXQgb2YgYSBwbHVnaW4gaW5zdGFuY2UuCitjbGFzcyBQbHVnaW5MYXllckNocm9taXVt
IDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBsdWdpbkxheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
ID0gMCk7CisgICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29udGVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZHJh
dygpOworICAgIAorICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIHRleHR1cmVJZCk7Cisg
ICAgICAgIAorICAgIGNsYXNzIFNoYXJlZFZhbHVlcyB7CisgICAgcHVibGljOgorICAgICAgICBT
aGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOworICAgICAgICB+U2hhcmVk
VmFsdWVzKCk7CisKKyAgICAgICAgdW5zaWduZWQgc2hhZGVyUHJvZ3JhbSgpIGNvbnN0IHsgcmV0
dXJuIG1fc2hhZGVyUHJvZ3JhbTsgfQorICAgICAgICBpbnQgc2hhZGVyU2FtcGxlckxvY2F0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJTYW1wbGVyTG9jYXRpb247IH0KKyAgICAgICAgaW50
IHNoYWRlck1hdHJpeExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zaGFkZXJNYXRyaXhMb2Nh
dGlvbjsgfQorICAgICAgICBpbnQgc2hhZGVyQWxwaGFMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fc2hhZGVyQWxwaGFMb2NhdGlvbjsgfQorICAgICAgICBib29sIGluaXRpYWxpemVkKCkgY29u
c3QgeyByZXR1cm4gbV9pbml0aWFsaXplZDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0QqIG1fY29udGV4dDsKKyAgICAgICAgdW5zaWduZWQgbV9zaGFkZXJQcm9n
cmFtOworICAgICAgICBpbnQgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb247CisgICAgICAgIGludCBt
X3NoYWRlck1hdHJpeExvY2F0aW9uOworICAgICAgICBpbnQgbV9zaGFkZXJBbHBoYUxvY2F0aW9u
OworICAgICAgICBib29sIG1faW5pdGlhbGl6ZWQ7CisgICAgfTsKKworcHJpdmF0ZToKKyAgICBQ
bHVnaW5MYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpOworICAgIHVu
c2lnbmVkIG1fdGV4dHVyZUlkOworfTsKKworfQorI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2VuZGlmCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcwODE4KQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIx
IEBACisyMDEwLTEwLTIwICBBbCBQYXRyaWNrICA8YXBhdHJpY2tAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0g
UGx1Z2luIGluc3RhbmNlcyBjYW4gcHJvcGFnYXRlIHRoZSBJRCBvZiB0aGUgT3BlbkdMIHRleHR1
cmUgdGhleSByZW5kZXIgdG8uCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ4MDMyCisKKyAgICAgICAgKiBwdWJsaWMvV2ViUGx1Z2luLmg6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBsdWdpbjo6Z2V0QmFja2luZ1RleHR1cmVJZCk6CisgICAgICAgICog
cHVibGljL1dlYlBsdWdpbkNvbnRhaW5lci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5D
b250YWluZXI6OmNvbW1pdEJhY2tpbmdUZXh0dXJlKToKKyAgICAgICAgKiBzcmMvV2ViUGx1Z2lu
Q29udGFpbmVySW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNvbnRhaW5lcklt
cGw6OmNvbW1pdEJhY2tpbmdUZXh0dXJlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29u
dGFpbmVySW1wbDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNv
bnRhaW5lckltcGw6OldlYlBsdWdpbkNvbnRhaW5lckltcGwpOgorICAgICAgICAqIHNyYy9XZWJQ
bHVnaW5Db250YWluZXJJbXBsLmg6CisKIDIwMTAtMTAtMjggIEtpbnVrbyBZYXN1ZGEgIDxraW51
a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRl
eDogV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oCShyZXZpc2lvbiA3MDgxOCkKKysrIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0
LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlR2VvbWV0cnkoCiAgICAgICAg
IGNvbnN0IFdlYlJlY3QmIGZyYW1lUmVjdCwgY29uc3QgV2ViUmVjdCYgY2xpcFJlY3QsCiAgICAg
ICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJSZWN0PiYgY3V0T3V0c1JlY3RzLCBib29sIGlzVmlzaWJs
ZSkgPSAwOworICAgIAorICAgIC8vIElmIHRoZSBwbHVnaW4gaW5zdGFuY2UgaXMgYmFja2VkIGJ5
IGFuIE9wZW5HTCB0ZXh0dXJlLCByZXR1cm4gaXRzIElEIGluIHRoZQorICAgIC8vIGNvbXBvc2l0
b3JzIG5hbWVzcGFjZS4gT3RoZXJ3aXNlIHJldHVybiAwLiBSZXR1cm5zIDAgYnkgZGVmYXVsdC4K
KyAgICB2aXJ0dWFsIHVuc2lnbmVkIGdldEJhY2tpbmdUZXh0dXJlSWQoKSB7IHJldHVybiAwOyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRm9jdXMoYm9vbCkgPSAwOwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVWaXNpYmlsaXR5KGJvb2wpID0gMDsKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaAkocmV2aXNpb24gNzA4MTgpCisrKyBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBsdWdpbkNvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw3ICs1MywxMCBAQCBwdWJsaWM6CiAgICAgLy8gQ2F1c2VzIHRoZSBjb250YWluZXIgdG8gcmVw
b3J0IGl0cyBjdXJyZW50IGdlb21ldHJ5IHZpYQogICAgIC8vIFdlYlBsdWdpbjo6dXBkYXRlR2Vv
bWV0cnkuCiAgICAgdmlydHVhbCB2b2lkIHJlcG9ydEdlb21ldHJ5KCkgPSAwOwotCisgICAgCisg
ICAgLy8gQ2FsbGVkIHdoZW4gdGhlIGJhY2tpbmcgdGV4dHVyZSBpcyByZWFkeSB0byBiZSBjb21w
b3NpdGVkLgorICAgIHZpcnR1YWwgdm9pZCBjb21taXRCYWNraW5nVGV4dHVyZSgpIHt9CisgICAg
CiAgICAgLy8gRHJvcCBhbnkgcmVmZXJlbmNlcyB0byBzY3JpcHQgb2JqZWN0cyBhbGxvY2F0ZWQg
YnkgdGhlIHBsdWdpbi4KICAgICAvLyBUaGVzZSBhcmUgb2JqZWN0cyBkZXJpdmVkIGZyb20gV2Vi
UGx1Z2luOjpzY3JpcHRhYmxlT2JqZWN0LiAgVGhpcyBpcwogICAgIC8vIGNhbGxlZCB3aGVuIHRo
ZSBwbHVnaW4gaXMgYmVpbmcgZGVzdHJveWVkIG9yIGlmIGl0IG5lZWRzIHRvIGJlCkluZGV4OiBX
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5jcHAJKHJldmlz
aW9uIDcwODE4KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiQ2hyb21l
LmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIlBsdWdpbkxheWVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJXZWJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJXZWJDdXJz
b3JJbmZvLmgiCiAjaW5jbHVkZSAiV2ViRGF0YVNvdXJjZUltcGwuaCIKQEAgLTI4Nyw2ICsyODgs
MTQgQEAgdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpyZXBvcnRHZW9tZQogICAgIG1fd2Vi
UGx1Z2luLT51cGRhdGVHZW9tZXRyeSh3aW5kb3dSZWN0LCBjbGlwUmVjdCwgY3V0T3V0UmVjdHMs
IGlzVmlzaWJsZSgpKTsKIH0KIAordm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjb21taXRC
YWNraW5nVGV4dHVyZSgpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAg
IGlmIChwbGF0Zm9ybUxheWVyKCkpCisgICAgICAgIHBsYXRmb3JtTGF5ZXIoKS0+c2V0TmVlZHNE
aXNwbGF5KCk7CisjZW5kaWYKK30KKwogdm9pZCBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpjbGVh
clNjcmlwdE9iamVjdHMoKQogewogICAgIEZyYW1lKiBmcmFtZSA9IG1fZWxlbWVudC0+ZG9jdW1l
bnQoKS0+ZnJhbWUoKTsKQEAgLTM5Myw4ICs0MDIsMzEgQEAgdm9pZCBXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOjp3aWxsRGVzdHJveQogICAgIG1fcGx1Z2luTG9hZE9ic2VydmVycy5yZW1vdmUocG9z
KTsKIH0KIAorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK1dlYkNvcmU6OkxheWVy
Q2hyb21pdW0qIFdlYlBsdWdpbkNvbnRhaW5lckltcGw6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAor
eworICAgIC8vIEZJWE1FOiBJbiB0aGUgZXZlbnQgb2YgYSBjb250ZXh0IGxvc3QsIHRoZSB0ZXh0
dXJlIG5lZWRzIHRvIGJlIHJlY3JlYXRlZCBvbiB0aGUgY29tcG9zaXRvcidzCisgICAgLy8gY29u
dGV4dCBhbmQgcmVib3VuZCB0byB0aGUgcGxhdGZvcm0gbGF5ZXIgaGVyZS4KKyAgICB1bnNpZ25l
ZCBiYWNraW5nVGV4dHVyZUlkID0gbV93ZWJQbHVnaW4tPmdldEJhY2tpbmdUZXh0dXJlSWQoKTsK
KyAgICBpZiAoIWJhY2tpbmdUZXh0dXJlSWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9w
bGF0Zm9ybUxheWVyLT5zZXRUZXh0dXJlSWQoYmFja2luZ1RleHR1cmVJZCk7CisKKyAgICByZXR1
cm4gbV9wbGF0Zm9ybUxheWVyLmdldCgpOworfQorI2VuZGlmCisKIC8vIFByaXZhdGUgbWV0aG9k
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCiAKK1dlYlBsdWdpbkNvbnRhaW5lckltcGw6OldlYlBsdWdpbkNvbnRhaW5lckltcGwo
V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2lu
KQorICAgIDogV2ViQ29yZTo6UGx1Z2luVmlld0Jhc2UoMCkKKyAgICAsIG1fZWxlbWVudChlbGVt
ZW50KQorICAgICwgbV93ZWJQbHVnaW4od2ViUGx1Z2luKQorICAgICwgbV9wbGF0Zm9ybUxheWVy
KFBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSkKK3sKK30KKwogV2ViUGx1Z2luQ29udGFp
bmVySW1wbDo6fldlYlBsdWdpbkNvbnRhaW5lckltcGwoKQogewogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXJzLnNpemUoKTsgKytpKQpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHJldmlzaW9uIDcwODE4
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDkgKzMxLDEwIEBACiAjaWZuZGVmIFdlYlBsdWdpbkNvbnRhaW5lcklt
cGxfaAogI2RlZmluZSBXZWJQbHVnaW5Db250YWluZXJJbXBsX2gKIAorI2luY2x1ZGUgIlBsdWdp
blZpZXdCYXNlLmgiCiAjaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVyLmgiCi0KICNpbmNsdWRl
ICJXaWRnZXQuaCIKKwogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCkBAIC00Myw3ICs0NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IEhUTUxQbHVnSW5FbGVtZW50OwogY2xhc3MgSW50UmVjdDsKIGNsYXNzIEtleWJvYXJkRXZlbnQ7
CitjbGFzcyBMYXllckNocm9taXVtOwogY2xhc3MgTW91c2VFdmVudDsKK2NsYXNzIFBsdWdpbkxh
eWVyQ2hyb21pdW07CiBjbGFzcyBSZXNvdXJjZUVycm9yOwogY2xhc3MgUmVzb3VyY2VSZXNwb25z
ZTsKIGNsYXNzIFdoZWVsRXZlbnQ7CkBAIC01NCw3ICs1Nyw3IEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogY2xhc3MgV2ViUGx1Z2luOwogY2xhc3MgV2ViUGx1Z2luTG9hZE9ic2VydmVyOwogCi1jbGFz
cyBXZWJQbHVnaW5Db250YWluZXJJbXBsIDogcHVibGljIFdlYkNvcmU6OldpZGdldCwgcHVibGlj
IFdlYlBsdWdpbkNvbnRhaW5lciB7CitjbGFzcyBXZWJQbHVnaW5Db250YWluZXJJbXBsIDogcHVi
bGljIFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlLCBwdWJsaWMgV2ViUGx1Z2luQ29udGFpbmVyIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJQbHVnaW5Db250YWluZXJJbXBsPiBj
cmVhdGUoV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2Vi
UGx1Z2luKQogICAgIHsKQEAgLTgwLDExICs4MywxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIGludmFsaWRhdGUoKTsKICAgICB2aXJ0dWFsIHZvaWQgaW52YWxpZGF0ZVJlY3QoY29uc3Qg
V2ViUmVjdCYpOwogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRHZW9tZXRyeSgpOworICAgIHZpcnR1
YWwgdm9pZCBjb21taXRCYWNraW5nVGV4dHVyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhclNj
cmlwdE9iamVjdHMoKTsKICAgICB2aXJ0dWFsIE5QT2JqZWN0KiBzY3JpcHRhYmxlT2JqZWN0Rm9y
RWxlbWVudCgpOwogICAgIHZpcnR1YWwgV2ViU3RyaW5nIGV4ZWN1dGVTY3JpcHRVUkwoY29uc3Qg
V2ViVVJMJiwgYm9vbCBwb3B1cHNBbGxvd2VkKTsKICAgICB2aXJ0dWFsIHZvaWQgbG9hZEZyYW1l
UmVxdWVzdChjb25zdCBXZWJVUkxSZXF1ZXN0JiwgY29uc3QgV2ViU3RyaW5nJiB0YXJnZXQsIGJv
b2wgbm90aWZ5TmVlZGVkLCB2b2lkKiBub3RpZnlEYXRhKTsKLSAgICB2aXJ0dWFsIHZvaWQgem9v
bUxldmVsQ2hhbmdlZChkb3VibGUgem9vbUxldmVsKTsKKyAgICB2aXJ0dWFsIHZvaWQgem9vbUxl
dmVsQ2hhbmdlZChkb3VibGUgem9vbUxldmVsKTsgICAgCiAKICAgICAvLyBUaGlzIGNhbm5vdCBi
ZSBudWxsLgogICAgIFdlYlBsdWdpbiogcGx1Z2luKCkgeyByZXR1cm4gbV93ZWJQbHVnaW47IH0K
QEAgLTExNywxMCArMTIxLDEyIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgd2lsbERlc3Ryb3lQbHVn
aW5Mb2FkT2JzZXJ2ZXIoV2ViUGx1Z2luTG9hZE9ic2VydmVyKik7CiAKKyNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCisgICAgdmlydHVhbCBXZWJDb3JlOjpMYXllckNocm9taXVtKiBw
bGF0Zm9ybUxheWVyKCkgY29uc3Q7CisjZW5kaWYKKwogcHJpdmF0ZToKLSAgICBXZWJQbHVnaW5D
b250YWluZXJJbXBsKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBXZWJQbHVn
aW4qIHdlYlBsdWdpbikKLSAgICAgICAgOiBtX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgLCBt
X3dlYlBsdWdpbih3ZWJQbHVnaW4pIHsgfQorICAgIFdlYlBsdWdpbkNvbnRhaW5lckltcGwoV2Vi
Q29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIFdlYlBsdWdpbiogd2ViUGx1Z2luKTsK
ICAgICB+V2ViUGx1Z2luQ29udGFpbmVySW1wbCgpOwogCiAgICAgdm9pZCBoYW5kbGVNb3VzZUV2
ZW50KFdlYkNvcmU6Ok1vdXNlRXZlbnQqKTsKQEAgLTEzOCw2ICsxNDQsMTAgQEAgcHJpdmF0ZToK
ICAgICBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogbV9lbGVtZW50OwogICAgIFdlYlBsdWdp
biogbV93ZWJQbHVnaW47CiAgICAgVmVjdG9yPFdlYlBsdWdpbkxvYWRPYnNlcnZlcio+IG1fcGx1
Z2luTG9hZE9ic2VydmVyczsKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAg
ICBSZWZQdHI8V2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bT4gbV9wbGF0Zm9ybUxheWVyOwor
I2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72758</attachid>
            <date>2010-11-02 16:05:15 -0700</date>
            <delta_ts>2010-11-02 21:17:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-48032-20101102160514.patch</filename>
            <type>text/plain</type>
            <size>22774</size>
            <attacher name="Al">apatrick</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MTAzNCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkZWQgUGx1Z2luTGF5ZXJDaHJvbWl1bSwgd2hpY2ggY29tcG9zaXRlcyBwbHVnaW4gaW5zdGFu
Y2VzIHRoYXQgaGF2ZSBhbiBhc3NvY2lhdGVkIE9wZW5HTCBiYWNraW5nIHRleHR1cmUuCisKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4MDMyCisKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogbG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNw
cAorICAgICAgICAoV2ViQ29yZTo6U3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4pOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2Jq
ZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBT
aGFyZWRPYmplY3RzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6cGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6U2hhcmVkVmFsdWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlczo6flNo
YXJlZFZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJD
aHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjp1cGRhdGVD
b250ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVt
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6ZHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OnNldFRleHR1
cmVJZCk6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1
ZXM6OnNoYWRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJvbWl1
bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJTYW1wbGVyTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6UGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjpzaGFkZXJNYXRyaXhMb2NhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpQbHVnaW5MYXllckNocm9taXVtOjpTaGFyZWRWYWx1ZXM6
OnNoYWRlckFscGhhTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjppbml0aWFsaXplZCk6CisKIDIwMTAtMTAtMjggIFpoZW55YW8g
TW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3Nl
bGwuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dl
YkNvcmUuZ3lwaQkocmV2aXNpb24gNzExMzcpCisrKyBXZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29y
a2luZyBjb3B5KQpAQCAtMjQ1NSw2ICsyNDU1LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1JY29uLmgn
LAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hy
b21pdW0uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVn
aW5MYXllckNocm9taXVtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUxpbnV4LmNwcCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCkluZGV4
OiBXZWJDb3JlL2xvYWRlci9TdWJmcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9sb2FkZXIvU3ViZnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiA3MTEzNykKKysrIFdlYkNvcmUv
bG9hZGVyL1N1YmZyYW1lTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzY2LDggKzM2Niw4
IEBAIGJvb2wgU3ViZnJhbWVMb2FkZXI6OmxvYWRQbHVnaW4oSFRNTFBsdWcKIAogICAgIHJlbmRl
cmVyLT5zZXRXaWRnZXQod2lkZ2V0KTsKICAgICBtX2NvbnRhaW5zUGx1Z2lucyA9IHRydWU7Ci0K
LSNpZiBFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAKKyNpZiBFTkFCTEUoUExVR0lO
X1BST1hZX0ZPUl9WSURFTykgfHwgRU5BQkxFKDNEX1BMVUdJTikKICAgICBwbHVnaW5FbGVtZW50
LT5zZXROZWVkc1N0eWxlUmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKICNlbmRpZgogICAg
IHJldHVybiB0cnVlOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3MTEzNykKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM3MCw2ICszNzAsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldE5lZWRzRGlzcGxh
eSgpCiB7CiAgICAgbV9kaXJ0eVJlY3Quc2V0U2l6ZShtX2JvdW5kcyk7CiAgICAgbV9jb250ZW50
c0RpcnR5ID0gdHJ1ZTsKKyAgICBzZXROZWVkc0NvbW1pdCgpOwogfQogCiB2b2lkIExheWVyQ2hy
b21pdW06OnJlc2V0TmVlZHNEaXNwbGF5KCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDcxMTM3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzAsNyArNzMwLDEw
IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2gKICAgICBtX2NvbnRl
bnRMYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRyKG5ldyBDb250ZW50TGF5ZXJDaHJvbWl1bTo6
U2hhcmVkVmFsdWVzKG1fY29udGV4dC5nZXQoKSkpOwogICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRW
YWx1ZXMgPSBhZG9wdFB0cihuZXcgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKG1f
Y29udGV4dC5nZXQoKSkpOwogICAgIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcyA9IGFkb3B0UHRy
KG5ldyBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsK
LSAgICBpZiAoIW1fbGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY29udGVu
dExheWVyU2hhcmVkVmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX2NhbnZhc0xheWVyU2hhcmVk
VmFsdWVzLT5pbml0aWFsaXplZCgpIHx8ICFtX3ZpZGVvTGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRp
YWxpemVkKCkpIHsKKyAgICBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzID0gYWRvcHRQdHIobmV3
IFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyhtX2NvbnRleHQuZ2V0KCkpKTsKKwor
ICAgIGlmICghbV9sYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9jb250ZW50
TGF5ZXJTaGFyZWRWYWx1ZXMtPmluaXRpYWxpemVkKCkgfHwgIW1fY2FudmFzTGF5ZXJTaGFyZWRW
YWx1ZXMtPmluaXRpYWxpemVkKCkKKyAgICAgICAgfHwgIW1fdmlkZW9MYXllclNoYXJlZFZhbHVl
cy0+aW5pdGlhbGl6ZWQoKSB8fCAhbV9wbHVnaW5MYXllclNoYXJlZFZhbHVlcy0+aW5pdGlhbGl6
ZWQoKSkgewogICAgICAgICBjbGVhbnVwU2hhcmVkT2JqZWN0cygpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQpAQCAtNzQ2LDYgKzc0OSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpjbGVhbnVwU2hhcmUKICAgICBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlcy5jbGVhcigp
OwogICAgIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKICAgICBtX3ZpZGVvTGF5
ZXJTaGFyZWRWYWx1ZXMuY2xlYXIoKTsKKyAgICBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzLmNs
ZWFyKCk7CiAKICAgICBpZiAobV9zY3JvbGxTaGFkZXJQcm9ncmFtKSB7CiAgICAgICAgIEdMQyht
X2NvbnRleHQsIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShtX3Njcm9sbFNoYWRlclByb2dyYW0p
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gNzExMzcpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQ29udGVudExheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgor
I2luY2x1ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgog
I2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CkBAIC0xMDcsNiArMTA4LDcgQEAgcHVibGljOgogICAgIGNvbnN0IENvbnRlbnRMYXllckNocm9t
aXVtOjpTaGFyZWRWYWx1ZXMqIGNvbnRlbnRMYXllclNoYXJlZFZhbHVlcygpIGNvbnN0IHsgcmV0
dXJuIG1fY29udGVudExheWVyU2hhcmVkVmFsdWVzLmdldCgpOyB9CiAgICAgY29uc3QgQ2FudmFz
TGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzKiBjYW52YXNMYXllclNoYXJlZFZhbHVlcygpIGNv
bnN0IHsgcmV0dXJuIG1fY2FudmFzTGF5ZXJTaGFyZWRWYWx1ZXMuZ2V0KCk7IH0KICAgICBjb25z
dCBWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogdmlkZW9MYXllclNoYXJlZFZhbHVl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlkZW9MYXllclNoYXJlZFZhbHVlcy5nZXQoKTsgfQorICAg
IGNvbnN0IFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyogcGx1Z2luTGF5ZXJTaGFy
ZWRWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3BsdWdpbkxheWVyU2hhcmVkVmFsdWVzLmdldCgp
OyB9CiAKICAgICB2b2lkIHJlc2l6ZU9uc2NyZWVuQ29udGVudChjb25zdCBJbnRTaXplJik7CiAK
QEAgLTE4MCw2ICsxODIsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxDb250ZW50TGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NvbnRlbnRMYXllclNoYXJlZFZhbHVlczsKICAgICBPd25Q
dHI8Q2FudmFzTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzPiBtX2NhbnZhc0xheWVyU2hhcmVk
VmFsdWVzOwogICAgIE93blB0cjxWaWRlb0xheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcz4gbV92
aWRlb0xheWVyU2hhcmVkVmFsdWVzOworICAgIE93blB0cjxQbHVnaW5MYXllckNocm9taXVtOjpT
aGFyZWRWYWx1ZXM+IG1fcGx1Z2luTGF5ZXJTaGFyZWRWYWx1ZXM7CiAKICAgICBSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKIH07CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KworI2luY2x1ZGUgIlBsdWdpbkxheWVyQ2hyb21pdW0uaCIKKworI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCisjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCisjaW5jbHVk
ZSA8R0xFUzIvZ2wyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGx1Z2luTGF5ZXJDaHJv
bWl1bTo6U2hhcmVkVmFsdWVzOjpTaGFyZWRWYWx1ZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRl
eHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fc2hhZGVyUHJvZ3JhbSgwKQor
ICAgICwgbV9zaGFkZXJTYW1wbGVyTG9jYXRpb24oLTEpCisgICAgLCBtX3NoYWRlck1hdHJpeExv
Y2F0aW9uKC0xKQorICAgICwgbV9zaGFkZXJBbHBoYUxvY2F0aW9uKC0xKQorICAgICwgbV9pbml0
aWFsaXplZChmYWxzZSkKK3sKKyAgICBjaGFyIHZlcnRleFNoYWRlclN0cmluZ1tdID0KKyAgICAg
ICAgImF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247ICAgXG4iCisgICAgICAgICJhdHRyaWJ1dGUg
dmVjMiBhX3RleENvb3JkOyAgIFxuIgorICAgICAgICAidW5pZm9ybSBtYXQ0IG1hdHJpeDsgICAg
ICAgICBcbiIKKyAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgXG4iCisgICAg
ICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAieyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIiAgZ2xfUG9zaXRpb24gPSBtYXRyaXgg
KiBhX3Bvc2l0aW9uOyBcbiIKKyAgICAgICAgIiAgdl90ZXhDb29yZCA9IGFfdGV4Q29vcmQ7ICAg
XG4iCisgICAgICAgICJ9ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIGNo
YXIgZnJhZ21lbnRTaGFkZXJTdHJpbmdbXSA9CisgICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ2YXJ5aW5nIHZl
YzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJ1
bmlmb3JtIHNhbXBsZXIyRCBzX3RleHR1cmU7ICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisg
ICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXG4iCisgICAgICAgICJ2b2lkIG1haW4oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXG4iCisgICAgICAgICJ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICIgIHZlYzQgdGV4Q29sb3IgPSB0ZXh0
dXJlMkQoc190ZXh0dXJlLCB2ZWMyKHZfdGV4Q29vcmQueCwgdl90ZXhDb29yZC55KSk7IFxuIgor
ICAgICAgICAiICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHRleENvbG9yLngsIHRleENvbG9yLnksIHRl
eENvbG9yLnosIHRleENvbG9yLncpICogYWxwaGE7IFxuIgorICAgICAgICAifSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIjsKKworICAgIG1fc2hh
ZGVyUHJvZ3JhbSA9IGNyZWF0ZVNoYWRlclByb2dyYW0obV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXJT
dHJpbmcsIGZyYWdtZW50U2hhZGVyU3RyaW5nKTsKKyAgICBpZiAoIW1fc2hhZGVyUHJvZ3JhbSkg
eworICAgICAgICBMT0dfRVJST1IoIlBsdWdpbkxheWVyQ2hyb21pdW06IEZhaWxlZCB0byBjcmVh
dGUgc2hhZGVyIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fc2hh
ZGVyU2FtcGxlckxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24obV9zaGFk
ZXJQcm9ncmFtLCAic190ZXh0dXJlIik7CisgICAgbV9zaGFkZXJNYXRyaXhMb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG1fc2hhZGVyUHJvZ3JhbSwgIm1hdHJpeCIpOwor
ICAgIG1fc2hhZGVyQWxwaGFMb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9u
KG1fc2hhZGVyUHJvZ3JhbSwgImFscGhhIik7CisgICAgQVNTRVJUKG1fc2hhZGVyU2FtcGxlckxv
Y2F0aW9uICE9IC0xKTsKKyAgICBBU1NFUlQobV9zaGFkZXJNYXRyaXhMb2NhdGlvbiAhPSAtMSk7
CisgICAgQVNTRVJUKG1fc2hhZGVyQWxwaGFMb2NhdGlvbiAhPSAtMSk7CisKKyAgICBtX2luaXRp
YWxpemVkID0gdHJ1ZTsKK30KKworUGx1Z2luTGF5ZXJDaHJvbWl1bTo6U2hhcmVkVmFsdWVzOjp+
U2hhcmVkVmFsdWVzKCkKK3sKKyAgICBpZiAobV9zaGFkZXJQcm9ncmFtKQorICAgICAgICBHTEMo
bV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtKSk7Cit9
CisKK1Bhc3NSZWZQdHI8UGx1Z2luTGF5ZXJDaHJvbWl1bT4gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBQbHVnaW5MYXllckNocm9taXVtKG93bmVyKSk7Cit9CisKK1BsdWdpbkxheWVyQ2hy
b21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikK
KyAgICA6IExheWVyQ2hyb21pdW0ob3duZXIpCit7Cit9CisKK3ZvaWQgUGx1Z2luTGF5ZXJDaHJv
bWl1bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKQoreworICAgIG1fdGV4dHVyZUlkID0gaWQ7
Cit9CisKK3ZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29udGVudHMoKQoreworfQor
Cit2b2lkIFBsdWdpbkxheWVyQ2hyb21pdW06OmRyYXcoKQoreworICAgIEFTU0VSVChsYXllclJl
bmRlcmVyKCkpOworICAgIGNvbnN0IFBsdWdpbkxheWVyQ2hyb21pdW06OlNoYXJlZFZhbHVlcyog
c3YgPSBsYXllclJlbmRlcmVyKCktPnBsdWdpbkxheWVyU2hhcmVkVmFsdWVzKCk7CisgICAgQVNT
RVJUKHN2ICYmIHN2LT5pbml0aWFsaXplZCgpKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IGxheWVyUmVuZGVyZXJDb250ZXh0KCk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR0xfVEVYVFVSRTApKTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+
YmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpKTsKKyAgICAKKyAgICAvLyBG
SVhNRTogc2V0dGluZyB0aGUgdGV4dHVyZSBwYXJhbWV0ZXJzIGV2ZXJ5IHRpbWUgaXMgcmVkdW5k
YW50LiBNb3ZlIHRoaXMgY29kZSBzb21ld2hlcmUKKyAgICAvLyB3aGVyZSBpdCB3aWxsIG9ubHkg
aGFwcGVuIG9uY2UgcGVyIHRleHR1cmUuCisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBh
cmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUikpOworICAgIEdMQyhjb250ZXh0LCBj
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBH
TF9DTEFNUF9UT19FREdFKSk7CisgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpKTsK
KyAgICAKKyAgICBsYXllclJlbmRlcmVyKCktPnVzZVNoYWRlcihzdi0+c2hhZGVyUHJvZ3JhbSgp
KTsKKyAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHN2LT5zaGFkZXJTYW1wbGVy
TG9jYXRpb24oKSwgMCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWQoY29udGV4dCwgbGF5ZXJSZW5k
ZXJlcigpLT5wcm9qZWN0aW9uTWF0cml4KCksIGRyYXdUcmFuc2Zvcm0oKSwKKyAgICAgICAgICAg
ICAgICAgICAgIGJvdW5kcygpLndpZHRoKCksIGJvdW5kcygpLmhlaWdodCgpLCBkcmF3T3BhY2l0
eSgpLAorICAgICAgICAgICAgICAgICAgICAgc3YtPnNoYWRlck1hdHJpeExvY2F0aW9uKCksIHN2
LT5zaGFkZXJBbHBoYUxvY2F0aW9uKCkpOworfQorCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbHVnaW5MYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBQbHVnaW5MYXll
ckNocm9taXVtX2gKKyNkZWZpbmUgUGx1Z2luTGF5ZXJDaHJvbWl1bV9oCisKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBMYXllciBjb250YWluaW5nIGEgdGhlIHJlbmRlcmVk
IG91dHB1dCBvZiBhIHBsdWdpbiBpbnN0YW5jZS4KK2NsYXNzIFBsdWdpbkxheWVyQ2hyb21pdW0g
OiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
UGx1Z2luTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIg
PSAwKTsKKyAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBkcmF3
KCk7CisgICAgCisgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgdGV4dHVyZUlkKTsKKyAg
ICAgICAgCisgICAgY2xhc3MgU2hhcmVkVmFsdWVzIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNo
YXJlZFZhbHVlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7CisgICAgICAgIH5TaGFyZWRW
YWx1ZXMoKTsKKworICAgICAgICB1bnNpZ25lZCBzaGFkZXJQcm9ncmFtKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFkZXJQcm9ncmFtOyB9CisgICAgICAgIGludCBzaGFkZXJTYW1wbGVyTG9jYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsgfQorICAgICAgICBpbnQg
c2hhZGVyTWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX3NoYWRlck1hdHJpeExvY2F0
aW9uOyB9CisgICAgICAgIGludCBzaGFkZXJBbHBoYUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9zaGFkZXJBbHBoYUxvY2F0aW9uOyB9CisgICAgICAgIGJvb2wgaW5pdGlhbGl6ZWQoKSBjb25z
dCB7IHJldHVybiBtX2luaXRpYWxpemVkOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBHcmFw
aGljc0NvbnRleHQzRCogbV9jb250ZXh0OworICAgICAgICB1bnNpZ25lZCBtX3NoYWRlclByb2dy
YW07CisgICAgICAgIGludCBtX3NoYWRlclNhbXBsZXJMb2NhdGlvbjsKKyAgICAgICAgaW50IG1f
c2hhZGVyTWF0cml4TG9jYXRpb247CisgICAgICAgIGludCBtX3NoYWRlckFscGhhTG9jYXRpb247
CisgICAgICAgIGJvb2wgbV9pbml0aWFsaXplZDsKKyAgICB9OworCitwcml2YXRlOgorICAgIFBs
dWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CisgICAgdW5z
aWduZWQgbV90ZXh0dXJlSWQ7Cit9OworCit9CisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQorCisjZW5kaWYKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzEwMzQpCisr
KyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTAtMTAtMjAgIEFsIFBhdHJpY2sgIDxhcGF0cmlja0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBQ
bHVnaW4gaW5zdGFuY2VzIGNhbiBwcm9wYWdhdGUgdGhlIElEIG9mIHRoZSBPcGVuR0wgdGV4dHVy
ZSB0aGV5IHJlbmRlciB0by4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDgwMzIKKworICAgICAgICAqIHB1YmxpYy9XZWJQbHVnaW4uaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGx1Z2luOjpnZXRCYWNraW5nVGV4dHVyZUlkKToKKyAgICAgICAgKiBw
dWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmg6CisgICAgICAgIChXZWJLaXQ6OldlYlBsdWdpbkNv
bnRhaW5lcjo6Y29tbWl0QmFja2luZ1RleHR1cmUpOgorICAgICAgICAqIHNyYy9XZWJQbHVnaW5D
b250YWluZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6Y29tbWl0QmFja2luZ1RleHR1cmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJQbHVnaW5Db250
YWluZXJJbXBsOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGx1Z2luQ29u
dGFpbmVySW1wbDo6V2ViUGx1Z2luQ29udGFpbmVySW1wbCk6CisgICAgICAgICogc3JjL1dlYlBs
dWdpbkNvbnRhaW5lckltcGwuaDoKKwogMjAxMC0xMS0wMSAgTGVhbmRybyBHcmFjaWEgR2lsICA8
bGVhbmRyb2dyYWNpYUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBP
cmxvdy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW4uaAkocmV2aXNpb24gNzExMzcp
CisrKyBXZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBsdWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NCw2ICs2NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUdlb21ldHJ5
KAogICAgICAgICBjb25zdCBXZWJSZWN0JiBmcmFtZVJlY3QsIGNvbnN0IFdlYlJlY3QmIGNsaXBS
ZWN0LAogICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViUmVjdD4mIGN1dE91dHNSZWN0cywgYm9v
bCBpc1Zpc2libGUpID0gMDsKKyAgICAKKyAgICAvLyBJZiB0aGUgcGx1Z2luIGluc3RhbmNlIGlz
IGJhY2tlZCBieSBhbiBPcGVuR0wgdGV4dHVyZSwgcmV0dXJuIGl0cyBJRCBpbiB0aGUKKyAgICAv
LyBjb21wb3NpdG9ycyBuYW1lc3BhY2UuIE90aGVyd2lzZSByZXR1cm4gMC4gUmV0dXJucyAwIGJ5
IGRlZmF1bHQuCisgICAgdmlydHVhbCB1bnNpZ25lZCBnZXRCYWNraW5nVGV4dHVyZUlkKCkgeyBy
ZXR1cm4gMDsgfQogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZvY3VzKGJvb2wpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlVmlzaWJpbGl0eShib29sKSA9IDA7CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBsdWdpbkNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViUGx1Z2luQ29udGFpbmVyLmgJKHJldmlzaW9uIDcxMTM3KQor
KysgV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQbHVnaW5Db250YWluZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNTMsNyArNTMsMTAgQEAgcHVibGljOgogICAgIC8vIENhdXNlcyB0aGUgY29udGFp
bmVyIHRvIHJlcG9ydCBpdHMgY3VycmVudCBnZW9tZXRyeSB2aWEKICAgICAvLyBXZWJQbHVnaW46
OnVwZGF0ZUdlb21ldHJ5LgogICAgIHZpcnR1YWwgdm9pZCByZXBvcnRHZW9tZXRyeSgpID0gMDsK
LQorICAgIAorICAgIC8vIENhbGxlZCB3aGVuIHRoZSBiYWNraW5nIHRleHR1cmUgaXMgcmVhZHkg
dG8gYmUgY29tcG9zaXRlZC4KKyAgICB2aXJ0dWFsIHZvaWQgY29tbWl0QmFja2luZ1RleHR1cmUo
KSB7fQorICAgIAogICAgIC8vIERyb3AgYW55IHJlZmVyZW5jZXMgdG8gc2NyaXB0IG9iamVjdHMg
YWxsb2NhdGVkIGJ5IHRoZSBwbHVnaW4uCiAgICAgLy8gVGhlc2UgYXJlIG9iamVjdHMgZGVyaXZl
ZCBmcm9tIFdlYlBsdWdpbjo6c2NyaXB0YWJsZU9iamVjdC4gIFRoaXMgaXMKICAgICAvLyBjYWxs
ZWQgd2hlbiB0aGUgcGx1Z2luIGlzIGJlaW5nIGRlc3Ryb3llZCBvciBpZiBpdCBuZWVkcyB0byBi
ZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQbHVnaW5Db250YWluZXJJbXBsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBsdWdpbkNvbnRhaW5lckltcGwu
Y3BwCShyZXZpc2lvbiA3MTEzNykKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29u
dGFpbmVySW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKKyNpbmNsdWRlICJQ
bHVnaW5MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiV2ViQ2xpcGJvYXJkLmgiCiAjaW5jbHVk
ZSAiV2ViQ3Vyc29ySW5mby5oIgogI2luY2x1ZGUgIldlYkRhdGFTb3VyY2VJbXBsLmgiCkBAIC0y
ODcsNiArMjg4LDE0IEBAIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1wbDo6cmVwb3J0R2VvbWUK
ICAgICBtX3dlYlBsdWdpbi0+dXBkYXRlR2VvbWV0cnkod2luZG93UmVjdCwgY2xpcFJlY3QsIGN1
dE91dFJlY3RzLCBpc1Zpc2libGUoKSk7CiB9CiAKK3ZvaWQgV2ViUGx1Z2luQ29udGFpbmVySW1w
bDo6Y29tbWl0QmFja2luZ1RleHR1cmUoKQoreworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKyAgICBpZiAocGxhdGZvcm1MYXllcigpKQorICAgICAgICBwbGF0Zm9ybUxheWVyKCkt
PnNldE5lZWRzRGlzcGxheSgpOworI2VuZGlmCit9CisKIHZvaWQgV2ViUGx1Z2luQ29udGFpbmVy
SW1wbDo6Y2xlYXJTY3JpcHRPYmplY3RzKCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBtX2VsZW1l
bnQtPmRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC0zOTMsOCArNDAyLDMzIEBAIHZvaWQgV2ViUGx1
Z2luQ29udGFpbmVySW1wbDo6d2lsbERlc3Ryb3kKICAgICBtX3BsdWdpbkxvYWRPYnNlcnZlcnMu
cmVtb3ZlKHBvcyk7CiB9CiAKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCitXZWJD
b3JlOjpMYXllckNocm9taXVtKiBXZWJQbHVnaW5Db250YWluZXJJbXBsOjpwbGF0Zm9ybUxheWVy
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogSW4gdGhlIGV2ZW50IG9mIGEgY29udGV4dCBsb3N0
LCB0aGUgdGV4dHVyZSBuZWVkcyB0byBiZSByZWNyZWF0ZWQgb24gdGhlIGNvbXBvc2l0b3Incwor
ICAgIC8vIGNvbnRleHQgYW5kIHJlYm91bmQgdG8gdGhlIHBsYXRmb3JtIGxheWVyIGhlcmUuCisg
ICAgdW5zaWduZWQgYmFja2luZ1RleHR1cmVJZCA9IG1fd2ViUGx1Z2luLT5nZXRCYWNraW5nVGV4
dHVyZUlkKCk7CisgICAgaWYgKCFiYWNraW5nVGV4dHVyZUlkKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIG1fcGxhdGZvcm1MYXllci0+c2V0VGV4dHVyZUlkKGJhY2tpbmdUZXh0dXJlSWQpOwor
CisgICAgcmV0dXJuIG1fcGxhdGZvcm1MYXllci5nZXQoKTsKK30KKyNlbmRpZgorCiAvLyBQcml2
YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCitXZWJQbHVnaW5Db250YWluZXJJbXBsOjpXZWJQbHVnaW5Db250
YWluZXJJbXBsKFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBXZWJQbHVnaW4q
IHdlYlBsdWdpbikKKyAgICA6IFdlYkNvcmU6OlBsdWdpblZpZXdCYXNlKDApCisgICAgLCBtX2Vs
ZW1lbnQoZWxlbWVudCkKKyAgICAsIG1fd2ViUGx1Z2luKHdlYlBsdWdpbikKKyNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgLCBtX3BsYXRmb3JtTGF5ZXIoUGx1Z2luTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApKQorI2VuZGlmCit7Cit9CisKIFdlYlBsdWdpbkNvbnRhaW5lcklt
cGw6On5XZWJQbHVnaW5Db250YWluZXJJbXBsKCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fcGx1Z2luTG9hZE9ic2VydmVycy5zaXplKCk7ICsraSkKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCShyZXZpc2lvbiA3MTEzNykKKysr
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw5ICszMSwxMCBAQAogI2lmbmRlZiBXZWJQbHVnaW5Db250YWluZXJJbXBsX2gK
ICNkZWZpbmUgV2ViUGx1Z2luQ29udGFpbmVySW1wbF9oCiAKKyNpbmNsdWRlICJQbHVnaW5WaWV3
QmFzZS5oIgogI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lci5oIgotCiAjaW5jbHVkZSAiV2lk
Z2V0LmgiCisKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIApAQCAtNDMsNyArNDQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1M
UGx1Z0luRWxlbWVudDsKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBLZXlib2FyZEV2ZW50OworY2xh
c3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBQbHVnaW5MYXllckNo
cm9taXVtOwogY2xhc3MgUmVzb3VyY2VFcnJvcjsKIGNsYXNzIFJlc291cmNlUmVzcG9uc2U7CiBj
bGFzcyBXaGVlbEV2ZW50OwpAQCAtNTQsNyArNTcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIGNs
YXNzIFdlYlBsdWdpbjsKIGNsYXNzIFdlYlBsdWdpbkxvYWRPYnNlcnZlcjsKIAotY2xhc3MgV2Vi
UGx1Z2luQ29udGFpbmVySW1wbCA6IHB1YmxpYyBXZWJDb3JlOjpXaWRnZXQsIHB1YmxpYyBXZWJQ
bHVnaW5Db250YWluZXIgeworY2xhc3MgV2ViUGx1Z2luQ29udGFpbmVySW1wbCA6IHB1YmxpYyBX
ZWJDb3JlOjpQbHVnaW5WaWV3QmFzZSwgcHVibGljIFdlYlBsdWdpbkNvbnRhaW5lciB7CiBwdWJs
aWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViUGx1Z2luQ29udGFpbmVySW1wbD4gY3JlYXRl
KFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBXZWJQbHVnaW4qIHdlYlBsdWdp
bikKICAgICB7CkBAIC04MCwxMSArODMsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBp
bnZhbGlkYXRlKCk7CiAgICAgdmlydHVhbCB2b2lkIGludmFsaWRhdGVSZWN0KGNvbnN0IFdlYlJl
Y3QmKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0R2VvbWV0cnkoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgY29tbWl0QmFja2luZ1RleHR1cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJTY3JpcHRP
YmplY3RzKCk7CiAgICAgdmlydHVhbCBOUE9iamVjdCogc2NyaXB0YWJsZU9iamVjdEZvckVsZW1l
bnQoKTsKICAgICB2aXJ0dWFsIFdlYlN0cmluZyBleGVjdXRlU2NyaXB0VVJMKGNvbnN0IFdlYlVS
TCYsIGJvb2wgcG9wdXBzQWxsb3dlZCk7CiAgICAgdmlydHVhbCB2b2lkIGxvYWRGcmFtZVJlcXVl
c3QoY29uc3QgV2ViVVJMUmVxdWVzdCYsIGNvbnN0IFdlYlN0cmluZyYgdGFyZ2V0LCBib29sIG5v
dGlmeU5lZWRlZCwgdm9pZCogbm90aWZ5RGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIHpvb21MZXZl
bENoYW5nZWQoZG91YmxlIHpvb21MZXZlbCk7CisgICAgdmlydHVhbCB2b2lkIHpvb21MZXZlbENo
YW5nZWQoZG91YmxlIHpvb21MZXZlbCk7ICAgIAogCiAgICAgLy8gVGhpcyBjYW5ub3QgYmUgbnVs
bC4KICAgICBXZWJQbHVnaW4qIHBsdWdpbigpIHsgcmV0dXJuIG1fd2ViUGx1Z2luOyB9CkBAIC0x
MTcsMTAgKzEyMSwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHdpbGxEZXN0cm95UGx1Z2luTG9h
ZE9ic2VydmVyKFdlYlBsdWdpbkxvYWRPYnNlcnZlciopOwogCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorICAgIHZpcnR1YWwgV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bSogcGxhdGZv
cm1MYXllcigpIGNvbnN0OworI2VuZGlmCisKIHByaXZhdGU6Ci0gICAgV2ViUGx1Z2luQ29udGFp
bmVySW1wbChXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgV2ViUGx1Z2luKiB3
ZWJQbHVnaW4pCi0gICAgICAgIDogbV9lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgICwgbV93ZWJQ
bHVnaW4od2ViUGx1Z2luKSB7IH0KKyAgICBXZWJQbHVnaW5Db250YWluZXJJbXBsKFdlYkNvcmU6
OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBXZWJQbHVnaW4qIHdlYlBsdWdpbik7CiAgICAg
fldlYlBsdWdpbkNvbnRhaW5lckltcGwoKTsKIAogICAgIHZvaWQgaGFuZGxlTW91c2VFdmVudChX
ZWJDb3JlOjpNb3VzZUV2ZW50Kik7CkBAIC0xMzgsNiArMTQ0LDEwIEBAIHByaXZhdGU6CiAgICAg
V2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIG1fZWxlbWVudDsKICAgICBXZWJQbHVnaW4qIG1f
d2ViUGx1Z2luOwogICAgIFZlY3RvcjxXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIqPiBtX3BsdWdpbkxv
YWRPYnNlcnZlcnM7CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgUmVm
UHRyPFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW0+IG1fcGxhdGZvcm1MYXllcjsKKyNlbmRp
ZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>