<?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>98990</bug_id>
          
          <creation_ts>2012-10-10 21:24:55 -0700</creation_ts>
          <short_desc>[Texmap][CSS Shaders] Enable CSS Shaders in TextureMapperGL</short_desc>
          <delta_ts>2012-11-13 15:54:10 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>98733</dependson>
    
    <dependson>98989</dependson>
    
    <dependson>99908</dependson>
    
    <dependson>100905</dependson>
    
    <dependson>101071</dependson>
          <blocked>74651</blocked>
    
    <blocked>101801</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Alexandru Chiculita">achicu</assigned_to>
          <cc>achicu</cc>
    
    <cc>dino</cc>
    
    <cc>gustavo</cc>
    
    <cc>noam</cc>
    
    <cc>philn</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>739589</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-10 21:24:55 -0700</bug_when>
    <thetext>Hardware-accelerate CSS Shaders using CustomFilterRenderer in TextureMapperGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746948</commentid>
    <comment_count>1</comment_count>
      <attachid>169766</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-20 01:22:41 -0700</bug_when>
    <thetext>Created attachment 169766
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746950</commentid>
    <comment_count>2</comment_count>
      <attachid>169766</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-20 01:27:08 -0700</bug_when>
    <thetext>Comment on attachment 169766
Patch

Attachment 169766 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14459819</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746951</commentid>
    <comment_count>3</comment_count>
      <attachid>169766</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-20 01:27:59 -0700</bug_when>
    <thetext>Comment on attachment 169766
Patch

Attachment 169766 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14473297</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746952</commentid>
    <comment_count>4</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-20 01:30:19 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 169766 [details])
&gt; Attachment 169766 [details] did not pass qt-ews (qt):
&gt; Output: http://queues.webkit.org/results/14459819

Build fails because this bug depends on Bug 98989. I don&apos;t know why ews run.

Anyway, this is the first enabling CSS Shaders on Accelerated Compositing! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746975</commentid>
    <comment_count>5</comment_count>
      <attachid>169766</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-20 08:26:29 -0700</bug_when>
    <thetext>Comment on attachment 169766
Patch

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

&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h:72
&gt; +class TextureMapperCustomFilterRendererMapHolder {
&gt; +#if ENABLE(CSS_SHADERS)
&gt; +public:
&gt; +    typedef HashMap&lt;const CustomFilterOperation*, RefPtr&lt;CustomFilterRenderer&gt; &gt; CustomFilterRendererMap;
&gt; +    virtual CustomFilterRendererMap* customFilterRendererMap() = 0;
&gt; +    virtual void setCustomFilterGlobalContext(PassOwnPtr&lt;CustomFilterGlobalContext&gt;) = 0;
&gt; +    virtual CustomFilterGlobalContext* customFilterGlobalContext() = 0;
&gt; +#endif

Why not have the renderer map as a member of TextureMapper, instead of virtualizing the holder?
The patch would be a lot shorter and succinct if you did that...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747034</commentid>
    <comment_count>6</comment_count>
      <attachid>169766</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-20 20:18:15 -0700</bug_when>
    <thetext>Comment on attachment 169766
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h:72
&gt;&gt; +#endif
&gt; 
&gt; Why not have the renderer map as a member of TextureMapper, instead of virtualizing the holder?
&gt; The patch would be a lot shorter and succinct if you did that...

Thanks for review. It&apos;s very reasonable concern.

This complexity is because of one requirement: destruction.

We must destruct CustomFilterGlobalContext when we navigate another page, because CustomFilterGlobalContext caches css shaders compiled programs. It is why RenderView holds CustomFilterGlobalContext in software path.
We must destruct CustomFilterRenderer when given RenderLayer dose not have the style including given custom filter. For example, javascript removes css shaders in the given element. It is why RenderLayer holds FilterEffectRenderer and FilterEffectRenderer holds CustomFilterRenderer in software path.
So I decides the root TextureMapperLayer holds CustomFilterGlobalContext like RenderView, and each TxtureMapperLayer holds CustomFilterRenderer like RenderLayer.

I had implemented both as a member of TextureMapper. I had troubles to destruct both in right time.

I wish TextureMapper holds both classes because it would be more succinct as you mentioned. If you give me ideas, I&apos;ll do that :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747121</commentid>
    <comment_count>7</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-21 09:39:59 -0700</bug_when>
    <thetext>
&gt; I had implemented both as a member of TextureMapper. I had troubles to destruct both in right time.
&gt; 
&gt; I wish TextureMapper holds both classes because it would be more succinct as you mentioned. If you give me ideas, I&apos;ll do that :)

How about a pattern similar to adoptImageBackingStore/releaseImageBackingStore, where LayerTreeCoordinator tracks which custom filter programs are actually in use, and sends separate messages to the proxy to create/destroy them?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747219</commentid>
    <comment_count>8</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-21 21:49:31 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; How about a pattern similar to adoptImageBackingStore/releaseImageBackingStore, where LayerTreeCoordinator tracks which custom filter programs are actually in use, and sends separate messages to the proxy to create/destroy them?

Good suggestion for the purpose of TextureMapper holding CustomFilterGlobalContext and CustomFilterRenderer.

However, if we make LayerTreeCoordinator track which custom filter programs are actually in use, we must implement similar code in PageClientQt and AcceleratedCompositingContextGL. IMHO this way which we introduce to reduce complexity may be more complex than previous way (TextureMaperLayer holds CustomFilterRenderer).
On the other hands, I think it is natural for TextureMaperLayer to hold CustomFilterRenderer like RenderLayer. When readers compares the difference of css shaders implementation between software path and TexMap, the approach of this patch helps readers understand easily.

I&apos;m looking forward your feedback again :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747236</commentid>
    <comment_count>9</comment_count>
      <attachid>169766</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2012-10-21 22:59:10 -0700</bug_when>
    <thetext>Comment on attachment 169766
Patch

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

&gt; Source/WebCore/platform/graphics/filters/CustomFilterGlobalContext.cpp:95
&gt; -    m_context = GraphicsContext3D::create(attributes, hostWindow, GraphicsContext3D::RenderOffscreen);
&gt; -    if (!m_context)
&gt; +    RefPtr&lt;GraphicsContext3D&gt; context = GraphicsContext3D::create(attributes, hostWindow, GraphicsContext3D::RenderOffscreen);
&gt; +    if (!context)
&gt;          return;
&gt; +    prepareContextIfNeeded(context.release());
&gt; +}
&gt; +
&gt; +void CustomFilterGlobalContext::prepareContextIfNeeded(PassRefPtr&lt;GraphicsContext3D&gt; context)
&gt; +{
&gt; +    ASSERT(context.get());
&gt; +    if (m_context.get()) {
&gt; +        ASSERT(m_context.get() == context.get());
&gt; +        return;
&gt; +    }

Why not avoid the expensive call to GraphicsContext3D::create if m_context is already set?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747303</commentid>
    <comment_count>10</comment_count>
      <attachid>169766</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-22 01:41:07 -0700</bug_when>
    <thetext>Comment on attachment 169766
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/CustomFilterGlobalContext.cpp:95
&gt;&gt; +    }
&gt; 
&gt; Why not avoid the expensive call to GraphicsContext3D::create if m_context is already set?

Thanks for review.

CustomFilterGlobalContext::prepareContextIfNeeded(HostWindow* hostWindow) already returns without calling GraphicsContext3D::create if m_context is already set.

void CustomFilterGlobalContext::prepareContextIfNeeded(HostWindow* hostWindow)
{
    if (m_context.get())
        return;
    ....
}

In addition, prepareContextIfNeeded(HostWindow* hostWindow) has existed already and only software path uses this method.
TexMap uses prepareContextIfNeeded(PassRefPtr&lt;GraphicsContext3D&gt; context).

Please let me know if you have any concerns more :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747530</commentid>
    <comment_count>11</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-22 07:36:51 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; How about a pattern similar to adoptImageBackingStore/releaseImageBackingStore, where LayerTreeCoordinator tracks which custom filter programs are actually in use, and sends separate messages to the proxy to create/destroy them?
&gt; 
&gt; Good suggestion for the purpose of TextureMapper holding CustomFilterGlobalContext and CustomFilterRenderer.
&gt; 
&gt; However, if we make LayerTreeCoordinator track which custom filter programs are actually in use, we must implement similar code in PageClientQt and AcceleratedCompositingContextGL. IMHO this way which we introduce to reduce complexity may be more complex than previous way (TextureMaperLayer holds CustomFilterRenderer).
&gt; On the other hands, I think it is natural for TextureMaperLayer to hold CustomFilterRenderer like RenderLayer. When readers compares the difference of css shaders implementation between software path and TexMap, the approach of this patch helps readers understand easily.
&gt; 
&gt; I&apos;m looking forward your feedback again :)

OK, another option.
TextureMapperLayer will ref/deref the use of a CustomFilterProgram in a function called from flushCompositingState, when it knows which new filters its receiving. This would be equivalent to how stuff is done in WebCore. The shared context itself will be held inside TextureMapper, but the filters will arrive to the paint functions already prepared during the flush phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748018</commentid>
    <comment_count>12</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-22 15:58:45 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; OK, another option.
&gt; TextureMapperLayer will ref/deref the use of a CustomFilterProgram in a function called from flushCompositingState, when it knows which new filters its receiving. This would be equivalent to how stuff is done in WebCore. The shared context itself will be held inside TextureMapper, but the filters will arrive to the paint functions already prepared during the flush phase.

That&apos;s good idea! I&apos;ll do that :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>750807</commentid>
    <comment_count>13</comment_count>
      <attachid>169766</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-10-25 07:36:09 -0700</bug_when>
    <thetext>Comment on attachment 169766
Patch

Clearing review flag for now, see previous comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763358</commentid>
    <comment_count>14</comment_count>
      <attachid>173377</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-11-09 14:50:41 -0800</bug_when>
    <thetext>Created attachment 173377
Patch V2

I&apos;ve used the new CustomFilterRenderer to draw the filter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763364</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 14:55:12 -0800</bug_when>
    <thetext>Attachment 173377 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/css3...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperGL.cpp:896:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763375</commentid>
    <comment_count>16</comment_count>
      <attachid>173377</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-09 15:01:49 -0800</bug_when>
    <thetext>Comment on attachment 173377
Patch V2

Very nice! Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763376</commentid>
    <comment_count>17</comment_count>
      <attachid>173377</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-09 15:02:28 -0800</bug_when>
    <thetext>Comment on attachment 173377
Patch V2

Clearing cq flags because of the style issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763406</commentid>
    <comment_count>18</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-11-09 15:50:04 -0800</bug_when>
    <thetext>Landed manually in http://trac.webkit.org/changeset/134125 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763427</commentid>
    <comment_count>19</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-09 16:15:02 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; Landed manually in http://trac.webkit.org/changeset/134125 .

Great!

(In reply to comment #11)
&gt; (In reply to comment #8)
&gt; OK, another option.
&gt; TextureMapperLayer will ref/deref the use of a CustomFilterProgram in a function called from flushCompositingState, when it knows which new filters its receiving. This would be equivalent to how stuff is done in WebCore. The shared context itself will be held inside TextureMapper, but the filters will arrive to the paint functions already prepared during the flush phase.

I&apos;ll add the feature to cache programs as you mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764444</commentid>
    <comment_count>20</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-11-12 08:17:44 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; Landed manually in http://trac.webkit.org/changeset/134125 .
&gt; 
&gt; Great!
&gt; 
&gt; (In reply to comment #11)
&gt; &gt; (In reply to comment #8)
&gt; &gt; OK, another option.
&gt; &gt; TextureMapperLayer will ref/deref the use of a CustomFilterProgram in a function called from flushCompositingState, when it knows which new filters its receiving. This would be equivalent to how stuff is done in WebCore. The shared context itself will be held inside TextureMapper, but the filters will arrive to the paint functions already prepared during the flush phase.
&gt; 
&gt; I&apos;ll add the feature to cache programs as you mentioned.

I want to do it in two steps, but I didn&apos;t had the time to analyze it completely yet:
1. CustomFilterValidatedProgram is already unique for that particular combination of filters, so I would like to make sure that that particular feature is transfered to the UI process. We can get rid of the shader serialization. We can do it like this:

Add a new type of object that is going to be referenced by the CustomFilterValidatedProgram as the platform shader.
When initially created, this platform shader will not have an assigned ID yet.
When the shader passes through the ValidatedCustomFilterOperation serialization for the first time, it will retrieve an ID (just increment a static variable) and write down the shader strings and other info like the program type. Next time the serialization code sees the same program, it will just write the ID.

Deallocation is special and can be achieved by injecting a callback into this new platform custom filter program object. It will need to announce the coordinated graphics about the delation of the program. Also, make sure that the callback is removed when the coordinated graphics manager is deleted.

2. After we got the shader on the UI web process, we could reuse the old pre-compiled shader using the ID deserialized from the WebProcess. Note that this ID is not the ID allocated by OpenGL. It&apos;s just allocated on the WebProcess side as needed. We need to keep a hash map in the UI process from these ID to the WebCustomFilterPrograms. We will need to store a reference to the compiled program in WebCustomFilterProgram and use that from the WebCore side. The problem is that WebCustomFilterProgram is a WebKit2 class, so we need a Client like interface in WebCore that will be implemented by the WebKit2&apos;s WebCustomFilterProgram. Something like virtual int getProgramIdUsingContext (GraphicsContext3D*);

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764541</commentid>
    <comment_count>21</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-11-12 10:15:34 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; Landed manually in http://trac.webkit.org/changeset/134125 .
&gt; &gt; 
&gt; &gt; Great!
&gt; &gt; 
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; OK, another option.
&gt; &gt; &gt; TextureMapperLayer will ref/deref the use of a CustomFilterProgram in a function called from flushCompositingState, when it knows which new filters its receiving. This would be equivalent to how stuff is done in WebCore. The shared context itself will be held inside TextureMapper, but the filters will arrive to the paint functions already prepared during the flush phase.
&gt; &gt; 
&gt; &gt; I&apos;ll add the feature to cache programs as you mentioned.
&gt; 
&gt; I want to do it in two steps, but I didn&apos;t had the time to analyze it completely yet:
&gt; 1. CustomFilterValidatedProgram is already unique for that particular combination of filters, so I would like to make sure that that particular feature is transfered to the UI process. We can get rid of the shader serialization. We can do it like this:
&gt; 
&gt; Add a new type of object that is going to be referenced by the CustomFilterValidatedProgram as the platform shader.
&gt; When initially created, this platform shader will not have an assigned ID yet.
&gt; When the shader passes through the ValidatedCustomFilterOperation serialization for the first time, it will retrieve an ID (just increment a static variable) and write down the shader strings and other info like the program type. Next time the serialization code sees the same program, it will just write the ID.
&gt; 
&gt; Deallocation is special and can be achieved by injecting a callback into this new platform custom filter program object. It will need to announce the coordinated graphics about the delation of the program. Also, make sure that the callback is removed when the coordinated graphics manager is deleted.
&gt; 
&gt; 2. After we got the shader on the UI web process, we could reuse the old pre-compiled shader using the ID deserialized from the WebProcess. Note that this ID is not the ID allocated by OpenGL. It&apos;s just allocated on the WebProcess side as needed. We need to keep a hash map in the UI process from these ID to the WebCustomFilterPrograms. We will need to store a reference to the compiled program in WebCustomFilterProgram and use that from the WebCore side. The problem is that WebCustomFilterProgram is a WebKit2 class, so we need a Client like interface in WebCore that will be implemented by the WebKit2&apos;s WebCustomFilterProgram. Something like virtual int getProgramIdUsingContext (GraphicsContext3D*);
&gt; 
&gt; What do you think?
Sounds like a plan!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764838</commentid>
    <comment_count>22</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-12 14:34:16 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; (In reply to comment #20)
&gt; &gt; (In reply to comment #19)
&gt; &gt; I want to do it in two steps, but I didn&apos;t had the time to analyze it completely yet:
&gt; &gt; 1. CustomFilterValidatedProgram is already unique for that particular combination of filters, so I would like to make sure that that particular feature is transfered to the UI process. We can get rid of the shader serialization. We can do it like this:
&gt; &gt; 
&gt; &gt; Add a new type of object that is going to be referenced by the CustomFilterValidatedProgram as the platform shader.
&gt; &gt; When initially created, this platform shader will not have an assigned ID yet.
&gt; &gt; When the shader passes through the ValidatedCustomFilterOperation serialization for the first time, it will retrieve an ID (just increment a static variable) and write down the shader strings and other info like the program type. Next time the serialization code sees the same program, it will just write the ID.
&gt; &gt; 
&gt; &gt; Deallocation is special and can be achieved by injecting a callback into this new platform custom filter program object. It will need to announce the coordinated graphics about the delation of the program. Also, make sure that the callback is removed when the coordinated graphics manager is deleted.
&gt; &gt; 
&gt; &gt; 2. After we got the shader on the UI web process, we could reuse the old pre-compiled shader using the ID deserialized from the WebProcess. Note that this ID is not the ID allocated by OpenGL. It&apos;s just allocated on the WebProcess side as needed. We need to keep a hash map in the UI process from these ID to the WebCustomFilterPrograms. We will need to store a reference to the compiled program in WebCustomFilterProgram and use that from the WebCore side. The problem is that WebCustomFilterProgram is a WebKit2 class, so we need a Client like interface in WebCore that will be implemented by the WebKit2&apos;s WebCustomFilterProgram. Something like virtual int getProgramIdUsingContext (GraphicsContext3D*);
&gt; &gt; 
&gt; &gt; What do you think?
&gt; Sounds like a plan!

Absolutely great plan! I&apos;m looking forward :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766130</commentid>
    <comment_count>23</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-11-13 15:48:30 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Absolutely great plan! I&apos;m looking forward :)

@Huang: Let me know if you want to work on any of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766136</commentid>
    <comment_count>24</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-11-13 15:54:10 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Absolutely great plan! I&apos;m looking forward :)
&gt; 
&gt; @Huang: Let me know if you want to work on any of that.

I&apos;m fine :) Your plan is great. I want you to improve CSS Shaders on TexMap!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169766</attachid>
            <date>2012-10-20 01:22:41 -0700</date>
            <delta_ts>2012-11-09 14:50:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98990-20121020172119.patch</filename>
            <type>text/plain</type>
            <size>33260</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxOTc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzkzYTQ2ZGU1OTA5MTQ1
ZGZhMTQ1OGY3MTg5ZjgwM2FiN2JkY2E1OS4uZGQ4M2U3ODZiOGFjZWRkNWU5ZjFiNjYxNzRhNzNm
ZmFiZWJiZGRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEyLTEwLTIwICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtUZXhtYXBd
W0NTUyBTaGFkZXJzXSBFbmFibGUgQ1NTIFNoYWRlcnMgaW4gVGV4dHVyZU1hcHBlckdMCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODk5MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHN1cHBvcnQg
Zm9yIGN1c3RvbSBmaWx0ZXIgaW4gVGV4dHVyZU1hcHBlckdMLgorCisgICAgICAgIFRleHR1cmVN
YXBwZXIgcmV1c2VzIEN1c3RvbUZpbHRlclJlbmRlcmVyIHRvIGRyYXcgY3VzdG9tIGZpbHRlci4K
KyAgICAgICAgVGhlcmUgYXJlIDMgZGVzaWduIGRlY2lzaW9ucy4KKyAgICAgICAgMS4gVGV4dHVy
ZU1hcHBlciBzaGFyZXMgaXRzIG93biBHcmFwaGljc0NvbnRleHQzRCB3aXRoCisgICAgICAgIEN1
c3RvbUZpbHRlclJlbmRlcmVyLiBUaGlzIHBhdGNoIGRvZXMgbm90IGNyZWF0ZSBuZXcgR3JhcGhp
Y3NDb250ZXh0M0QgZm9yCisgICAgICAgIEN1c3RvbUZpbHRlclJlbmRlcmVyIGJlY2F1c2UgSSBi
ZWxpZXZlIEFOR0xFIEdMU0wgdmFsaWRhdGlvbiBpcyBzYWZlLgorICAgICAgICBPdGhlcndpc2Us
IHdlIGNhbiBlYXNpbHkgY3JlYXRlIG5ldyBHcmFwaGljc0NvbnRleHQzRCBidXQgbmV3CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEIGNhdXNlcyBjb250ZXh0IHN3aXRjaGluZyBvdmVyaGVhZC4K
KyAgICAgICAgMi4gVGV4dHVyZU1hcHBlckxheWVyIG93bnMgQ3VzdG9tRmlsdGVyUmVuZGVyZXJN
YXAgYW5kCisgICAgICAgIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQgYmVjYXVzZSBib3RoIG1l
bWJlciB2YXJpYWJsZXMgbXVzdCBiZQorICAgICAgICBkZXN0cm95ZWQgd2hlbiBUZXh0dXJlTWFw
cGVyTGF5ZXIgaXMgZGVzdHJveWVkLgorCisgICAgICAgIFRleHR1cmVNYXBwZXJHTCB0cmFja3Mg
cHJldmlvdXMgR0xfQVJSQVlfQlVGRkVSX0JJTkRJTkcgYW5kCisgICAgICAgIEdMX0VMRU1FTlRf
QVJSQVlfQlVGRkVSX0JJTkRJTkcgbGlrZSBHTF9DVVJSRU5UX1BST0dSQU0gYmVjYXVzZQorICAg
ICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciB1c2VzIGFuIGFycmF5IGJ1ZmZlciBhbmQgZWxlbGVt
dCBhcnJheSBidWZmZXIuCisKKyAgICAgICAgV2UgY3JlYXRlIGEgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIgaW5zdGFuY2UgcGVyIGV2ZXJ5IGZyYW1lIHdoZW4gY3VzdG9tCisgICAgICAgIGZpbHRlciBh
bmltYXRpb24gcnVucy4gSXQgaXMgYmVjYXVzZSB0aGUgZmlsdGVycyBhbmltYXRpb24gaW4KKyAg
ICAgICAgVGV4dXJlTWFwcGVyIGRlcGVuZHMgb24gQW5pbWF0aW9uQ29udHJvbGxlci4gSXQgbWVh
bnMKKyAgICAgICAgQW5pbWF0aW9uQ29udHJvbGxlciBjcmVhdGVzIEZpbHRlck9wZXJhdGlvbnMg
ZXZlcnkgZnJhbWUgYW5kIHRoZW4gd2UKKyAgICAgICAgY3JlYXRlIEN1c3RvbUZpbHRlclJlbmRl
cmVyIGV2ZXJ5IGZyYW1lLiBXZSBjYW4gcmVtb3ZlIHRoZSBvdmVyaGVhZAorICAgICAgICBjcmVh
dGluZyB0aGUgaW5zdGFuY2UgZXZlcnkgZnJhbWUgaW4gdGhhdCB3ZSByZXVzZSBhCisgICAgICAg
IEN1c3RvbUZpbHRlclJlbmRlcmVyIGluc3RhbmNlIGR1cmluZyB0aGUgYW5pbWF0aW9uLiBXaGVu
IHdlIG1ha2UKKyAgICAgICAgVGV4dHVyZU1hcHBlciBtYWtlIHByb2dyZXNzIGNzcyBmaWx0ZXJz
IGFuaW1hdGlvbiBsaWtlIG9wYWNpdHkgYW5kCisgICAgICAgIHRyYW5zZm9ybSBhbmltYXRpb25z
LCB3ZSB3aWxsIG1ha2UgVGV4dHVyZU1hcHBlciBub3QgY3JlYXRlCisgICAgICAgIEN1c3RvbUZp
bHRlclJlbmRlcmVyIGV2ZXJ5IGZyYW1lLgorCisgICAgICAgIFRlc3Q6IGNzczMvZmlsdGVycy9j
dXN0b20vY3VzdG9tLWZpbHRlci1jb21wb3NpdGUtc291cmNlLWF0b3AtaHcuaHRtbAorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ6OnByZXBh
cmVDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAgICAgU2V0IGV4aXNpbmcgR3JhcGhpY3NDb250
ZXh0M0Qgb24gQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29u
dGV4dC5oOgorICAgICAgICAoQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaDoKKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZTo6YXBwbHlGaWx0ZXJzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTERhdGE6OlRleHR1cmVNYXBwZXJHTERhdGEp
OgorICAgICAgICAoVGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
dXJlTWFwcGVyR0w6OmJlZ2luUGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1h
cHBlckdMOjplbmRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXNzZXNSZXF1aXJl
ZEZvckZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0
ZXJlZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBw
ZXJHTDo6ZHJhd0NTU1NoYWRlcnMpOgorICAgICAgICAgICAgRHJhdyBjc3Mgc2hhZGVycyB1c2lu
ZyBDdXN0b21GaWx0ZXJSZW5kZXJlci4KKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJH
TDo6Z2V0Q3VzdG9tRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAgICAgQ3JlYXRlIEN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQgYW5kIEN1c3RvbUZpbHRlclJlbmRlcmVyIGlmCisgICAgICAgICAg
ICBUZXh0dXJlTWFwcGVyTGF5ZXIgZG9lcyBub3QgaGF2ZSB0aGVtLgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoVGV4dHVyZU1hcHBlckdMKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OmFwcGx5Rmls
dGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJ
bWFnZUJ1ZmZlci5oOgorICAgICAgICAoQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpz
ZXRDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVN
YXBwZXJMYXllcjo6Y3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpzaG91bGRLZWVwQ29udGVudFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6YXBwbHlGaWx0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRSZWN1cnNp
dmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyOjpmbHVzaENvbXBvc2l0
aW5nU3RhdGVTZWxmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckxheWVyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyQ3VzdG9tRmlsdGVyUmVuZGVy
ZXJNYXBIb2xkZXIpOgorICAgICAgICAgICAgVGV4dHVyZU1hcHBlckxheWVyIG1hbmFnZXMgdGhl
IGxpZmUtY3ljbGUgb2YgYSBDdXN0b21GaWx0ZXJSZW5kZXJlcgorICAgICAgICAgICAgaW5zdGFu
Y2UgYXMgUmVuZGVyTGF5ZXIgbWFuYWdlcyBpdCB2aWEgRmlsdGVyRWZmZWN0UmVuZGVyZXIuCisg
ICAgICAgICAgICBUZXh0dXJlTWFwcGVyR0w6OmdldEN1c3RvbUZpbHRlclJlbmRlcmVyIG5lZWRz
IHRvIGFjY2VzcworICAgICAgICAgICAgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgYmVsb25naW5nIHRv
IFRleHR1cmVNYXBwZXJMYXllciBidXQKKyAgICAgICAgICAgIEN1c3RvbUZpbHRlclJlbmRlcmVy
IGRvZXMgbm90IGtub3cgVGV4dHVyZU1hcHBlckxheWVyLgorICAgICAgICAgICAgVGV4dHVyZU1h
cHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFwSG9sZGVyIGlzIGludmVudGVkIG5vdCB0bworICAg
ICAgICAgICAgaW50cm9kdWNlIGNyb3NzIGRlcGVuZGVuY3kgYmV0d2VlbiBib3RoLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyTGF5ZXIpOgorCiAyMDEyLTEwLTE5
ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFtD
U1MgU2hhZGVyc10gU2V0IEZpbHRlck9wZXJhdGlvbnMgb24gR3JhcGhpY3NMYXllciBhZnRlciB0
aGUgcHJvZ3JhbSBvZiBDU1MgU2hhZGVycyBpcyBsb2FkZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJHbG9iYWxDb250ZXh0LmNwcAppbmRleCAwMmE5NmI4NjRkMzJhNDk2YjEyMDY4MjNmNjI4
MGM4M2M5ZjEwOTM0Li5kNTUxNTQ0NTZkZTNlNWVhNTdhNDkyNDc4NTk4YjQxY2VmNjYyYTI4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3Rv
bUZpbHRlckdsb2JhbENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAKQEAgLTgwLDkgKzgw
LDIxIEBAIHZvaWQgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDo6cHJlcGFyZUNvbnRleHRJZk5l
ZWRlZChIb3N0V2luZG93KiBob3N0V2luZG93KQogICAgIGF0dHJpYnV0ZXMucHJlbXVsdGlwbGll
ZEFscGhhID0gZmFsc2U7CiAgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IHRydWU7CiAg
ICAgYXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQVSA9IHRydWU7Ci0gICAgbV9jb250ZXh0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93LCBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyT2Zmc2NyZWVuKTsKLSAgICBpZiAoIW1fY29udGV4dCkKKyAgICBS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3Jl
YXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNEOjpSZW5kZXJPZmZz
Y3JlZW4pOworICAgIGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOworICAgIHByZXBhcmVD
b250ZXh0SWZOZWVkZWQoY29udGV4dC5yZWxlYXNlKCkpOworfQorCit2b2lkIEN1c3RvbUZpbHRl
ckdsb2JhbENvbnRleHQ6OnByZXBhcmVDb250ZXh0SWZOZWVkZWQoUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC5nZXQoKSk7CisgICAg
aWYgKG1fY29udGV4dC5nZXQoKSkgeworICAgICAgICBBU1NFUlQobV9jb250ZXh0LmdldCgpID09
IGNvbnRleHQuZ2V0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0
ID0gY29udGV4dDsKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUKTsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyR2xvYmFsQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgKaW5kZXggYWUwMjcxZjFjYTJiY2I1MWQw
YjY1NGFhMThhNWJkN2U2ZTg4OTM4My4uZTUwY2YzMGM5ZWNkMTE2NWI3Zjg1OThmYTk1NDVkNTI2
OThmNzRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgKQEAgLTY2
LDYgKzY2LDcgQEAgcHVibGljOgogICAgIEFOR0xFV2ViS2l0QnJpZGdlKiBtaXhTaGFkZXJWYWxp
ZGF0b3IoKTsKICAgICAKICAgICB2b2lkIHByZXBhcmVDb250ZXh0SWZOZWVkZWQoSG9zdFdpbmRv
dyopOworICAgIHZvaWQgcHJlcGFyZUNvbnRleHRJZk5lZWRlZChQYXNzUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPik7CiAKICAgICBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dy
YW0+IGdldFZhbGlkYXRlZFByb2dyYW0oY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mKTsK
ICAgICB2b2lkIHJlbW92ZVZhbGlkYXRlZFByb2dyYW0oY29uc3QgQ3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmgKaW5kZXggODZhNTVkZjQ5ZTlkN2RkNjgwM2Y0MzYz
MTM2MDQ4MWJiYzlmMDBlMS4uZTZlYTBkMzVlZjNkYWMwY2ZlNDA2MzZkMDU3M2U3YTQ3ZTgxZDEx
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlci5oCkBAIC00OCw2ICs0OCw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFRleHR1cmVNYXBwZXI7CisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorY2xhc3Mg
VGV4dHVyZU1hcHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFwSG9sZGVyOworI2VuZGlmCiAKIC8v
IEEgMkQgdGV4dHVyZSB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIHNvZnR3YXJlIG9yIEdMIHJl
bmRlcmluZy4KIGNsYXNzIEJpdG1hcFRleHR1cmUgIDogcHVibGljIFJlZkNvdW50ZWQ8Qml0bWFw
VGV4dHVyZT4gewpAQCAtODcsNyArOTAsNyBAQCBwdWJsaWM6CiAgICAgaW5saW5lIGJvb2wgaXNP
cGFxdWUoKSBjb25zdCB7IHJldHVybiAhKG1fZmxhZ3MgJiBTdXBwb3J0c0FscGhhKTsgfQogCiAj
aWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBhcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNv
bnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgeyByZXR1cm4gdGhpczsgfQor
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRlcnMoVGV4dHVy
ZU1hcHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiwgVGV4dHVyZU1hcHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFwSG9sZGVy
KikgeyByZXR1cm4gdGhpczsgfQogI2VuZGlmCiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKaW5kZXggMTlmZWFlODY4YzJhMzM3YWQ1NzM2ZTZhY2JmNjY1NWM5OTZmYmUzOC4uNWU4
YmM2NWE2N2E3OWZjZThhN2UzYjkwZGQ3ZmZmODY2ODU1MzI1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJH
TC5jcHAKQEAgLTM3LDYgKzM3LDEwIEBACiAjaW5jbHVkZSAiR3JhcGhpY3NTdXJmYWNlLmgiCiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJUZXh0dXJlTWFwcGVy
TGF5ZXIuaCIKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oUVQpCiAjaW5jbHVkZSAiTmF0aXZlSW1h
Z2VRdC5oIgogI2VuZGlmCkBAIC0xMTMsNiArMTE3LDggQEAgcHVibGljOgogICAgICAgICA6IGNv
bnRleHQoY29udGV4dCkKICAgICAgICAgLCBQYWludEZsYWdzKDApCiAgICAgICAgICwgcHJldmlv
dXNQcm9ncmFtKDApCisgICAgICAgICwgcHJldmlvdXNBcnJheUJ1ZmZlckJpbmRpbmcoMCkKKyAg
ICAgICAgLCBwcmV2aW91c0VsZW1lbnRBcnJheUJ1ZmZlckJpbmRpbmcoMCkKICAgICAgICAgLCB0
YXJnZXRGcmFtZUJ1ZmZlcigwKQogICAgICAgICAsIGRpZE1vZGlmeVN0ZW5jaWwoZmFsc2UpCiAg
ICAgICAgICwgcHJldmlvdXNTY2lzc29yU3RhdGUoMCkKQEAgLTEyNCw2ICsxMzAsOCBAQCBwdWJs
aWM6CiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsKICAgICBUZXh0
dXJlTWFwcGVyOjpQYWludEZsYWdzIFBhaW50RmxhZ3M7CiAgICAgR0MzRGludCBwcmV2aW91c1By
b2dyYW07CisgICAgR0MzRGludCBwcmV2aW91c0FycmF5QnVmZmVyQmluZGluZzsKKyAgICBHQzNE
aW50IHByZXZpb3VzRWxlbWVudEFycmF5QnVmZmVyQmluZGluZzsKICAgICBHQzNEaW50IHRhcmdl
dEZyYW1lQnVmZmVyOwogICAgIGJvb2wgZGlkTW9kaWZ5U3RlbmNpbDsKICAgICBHQzNEaW50IHBy
ZXZpb3VzU2Npc3NvclN0YXRlOwpAQCAtMjE1LDYgKzIyMyw4IEBAIFRleHR1cmVNYXBwZXJHTDo6
Q2xpcFN0YWNrJiBUZXh0dXJlTWFwcGVyR0w6OmNsaXBTdGFjaygpCiB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6YmVnaW5QYWludGluZyhQYWludEZsYWdzIGZsYWdzKQogewogICAgIG1fY29udGV4dDNE
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNLCAmZGF0YSgp
LnByZXZpb3VzUHJvZ3JhbSk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORywgJmRhdGEoKS5wcmV2aW91c0FycmF5QnVm
ZmVyQmluZGluZyk7CisgICAgbV9jb250ZXh0M0QtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HLCAmZGF0YSgpLnByZXZpb3VzRWxlbWVu
dEFycmF5QnVmZmVyQmluZGluZyk7CiAgICAgZGF0YSgpLnByZXZpb3VzU2Npc3NvclN0YXRlID0g
bV9jb250ZXh0M0QtPmlzRW5hYmxlZChHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsK
ICAgICBkYXRhKCkucHJldmlvdXNEZXB0aFN0YXRlID0gbV9jb250ZXh0M0QtPmlzRW5hYmxlZChH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVCk7CiAjaWYgUExBVEZPUk0oUVQpCkBAIC0yNDUs
NiArMjU1LDkgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmVuZFBhaW50aW5nKCkKIAogICAgIG1f
Y29udGV4dDNELT51c2VQcm9ncmFtKGRhdGEoKS5wcmV2aW91c1Byb2dyYW0pOwogCisgICAgbV9j
b250ZXh0M0QtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgZGF0
YSgpLnByZXZpb3VzQXJyYXlCdWZmZXJCaW5kaW5nKTsKKyAgICBtX2NvbnRleHQzRC0+YmluZEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIGRhdGEoKS5wcmV2
aW91c0VsZW1lbnRBcnJheUJ1ZmZlckJpbmRpbmcpOworCiAgICAgbV9jb250ZXh0M0QtPnNjaXNz
b3IoZGF0YSgpLnByZXZpb3VzU2Npc3NvclswXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclsxXSwg
ZGF0YSgpLnByZXZpb3VzU2Npc3NvclsyXSwgZGF0YSgpLnByZXZpb3VzU2Npc3NvclszXSk7CiAg
ICAgaWYgKGRhdGEoKS5wcmV2aW91c1NjaXNzb3JTdGF0ZSkKICAgICAgICAgbV9jb250ZXh0M0Qt
PmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKQEAgLTc0OSw2ICs3NjIs
OSBAQCBzdGF0aWMgdW5zaWduZWQgZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIoRmlsdGVyT3Bl
cmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUpCiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJS
SUdIVE5FU1M6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOgorI2VuZGlmCiAgICAgICAgIHJldHVybiAxOwog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpEUk9QX1NIQURPVzoKQEAgLTg1MSwxNCArODY3LDIzIEBAIHN0YXRpYyB2b2lkIHByZXBhcmVG
aWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBG
aWx0CiAgICAgfQogfQogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHNhbXBsZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0
dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50IHBhc3MpCit2b2lkIFRleHR1
cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNhbXBsZXIsIGNv
bnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24q
IGZpbHRlciwgaW50IHBhc3MsIFRleHR1cmVNYXBwZXJDdXN0b21GaWx0ZXJSZW5kZXJlck1hcEhv
bGRlciogaG9sZGVyKQogeworI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICBpZiAoZmlsdGVy
LT5nZXRPcGVyYXRpb25UeXBlKCkgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00pIHsKKyAgICAg
ICAgZHJhd0NTU1NoYWRlcnMoc2FtcGxlciwgZmlsdGVyLCBob2xkZXIpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaG9sZGVyKTsKKyNlbmRpZgorCiAg
ICAgLy8gRm9yIHN0YW5kYXJkIGZpbHRlcnMsIHdlIGFsd2F5cyBkcmF3IHRoZSB3aG9sZSB0ZXh0
dXJlIHdpdGhvdXQgdHJhbnNmb3JtYXRpb25zLgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTaGFkZXJLZXkga2V5ID0ga2V5Rm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9u
VHlwZSgpLCBwYXNzKTsKKyAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5
IGtleSA9IGtleUZvckZpbHRlclR5cGUoZmlsdGVyLT5nZXRPcGVyYXRpb25UeXBlKCksIHBhc3Mp
OwogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEo
KS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9n
cmFtKGtleSk7CiAgICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgcHJlcGFyZUZpbHRlclByb2dy
YW0ocHJvZ3JhbS5nZXQoKSwgZmlsdGVyLCBwYXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIHN0
YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsK
KyAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCAqZmlsdGVyLCBwYXNzLCBz
YW1wbGVyLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+
KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKIAogICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKICAgICBtX2NvbnRleHQzRC0+
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpKTsKQEAg
LTg3NSw3ICs5MDAsNTAgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25z
dCBCaXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXgKICAgICBtX2NvbnRleHQz
RC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSk7
CiB9CiAKLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZp
bHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgQml0bWFwVGV4dHVyZSYg
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdDU1NTaGFkZXJzKGNv
bnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiog
ZmlsdGVyLCBUZXh0dXJlTWFwcGVyQ3VzdG9tRmlsdGVyUmVuZGVyZXJNYXBIb2xkZXIqIGhvbGRl
cikKK3sKKyAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciogY3VzdG9tRmlsdGVyUmVuZGVyZXIgPSBn
ZXRDdXN0b21GaWx0ZXJSZW5kZXJlcihmaWx0ZXIsIGhvbGRlcik7CisgICAgaWYgKCFjdXN0b21G
aWx0ZXJSZW5kZXJlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFjdXN0b21GaWx0ZXJS
ZW5kZXJlci0+cHJlcGFyZUZvckRyYXdpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxh
dGZvcm0zRE9iamVjdCBzb3VyY2VUZXh0dXJlSUQgPSAwOzsKKyAgICBpZiAoY3VzdG9tRmlsdGVy
UmVuZGVyZXItPnByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpKQorICAgICAgICBzb3VyY2VUZXh0
dXJlSUQgPSBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wqPigmc291cmNlVGV4dHVy
ZSktPmlkKCk7CisKKyAgICBjdXN0b21GaWx0ZXJSZW5kZXJlci0+cGFpbnQoc291cmNlVGV4dHVy
ZUlELCBzb3VyY2VUZXh0dXJlLnNpemUoKSk7Cit9CisKK0N1c3RvbUZpbHRlclJlbmRlcmVyKiBU
ZXh0dXJlTWFwcGVyR0w6OmdldEN1c3RvbUZpbHRlclJlbmRlcmVyKGNvbnN0IEZpbHRlck9wZXJh
dGlvbiogb3BlcmF0aW9uLCBUZXh0dXJlTWFwcGVyQ3VzdG9tRmlsdGVyUmVuZGVyZXJNYXBIb2xk
ZXIqIGhvbGRlcikKK3sKKyAgICBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBjdXN0b21GaWx0
ZXJDb250ZXh0ID0gaG9sZGVyLT5jdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KCk7CisgICAgaWYg
KCFjdXN0b21GaWx0ZXJDb250ZXh0KSB7CisgICAgICAgIGhvbGRlci0+c2V0Q3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dChhZG9wdFB0cihuZXcgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCgpKSk7
CisgICAgICAgIGN1c3RvbUZpbHRlckNvbnRleHQgPSBob2xkZXItPmN1c3RvbUZpbHRlckdsb2Jh
bENvbnRleHQoKTsKKyAgICAgICAgY3VzdG9tRmlsdGVyQ29udGV4dC0+cHJlcGFyZUNvbnRleHRJ
Zk5lZWRlZChtX2NvbnRleHQzRCk7CisgICAgfQorCisgICAgVGV4dHVyZU1hcHBlckN1c3RvbUZp
bHRlclJlbmRlcmVyTWFwSG9sZGVyOjpDdXN0b21GaWx0ZXJSZW5kZXJlck1hcCogY3VzdG9tRmls
dGVyUmVuZGVyZXJNYXAgPSBob2xkZXItPmN1c3RvbUZpbHRlclJlbmRlcmVyTWFwKCk7CisgICAg
Y29uc3QgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBjdXNyb21GaWx0ZXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBDdXN0b21GaWx0ZXJPcGVyYXRpb24qPihvcGVyYXRpb24pOworICAgIFRleHR1cmVNYXBw
ZXJDdXN0b21GaWx0ZXJSZW5kZXJlck1hcEhvbGRlcjo6Q3VzdG9tRmlsdGVyUmVuZGVyZXJNYXA6
Oml0ZXJhdG9yIGl0ID0gY3VzdG9tRmlsdGVyUmVuZGVyZXJNYXAtPmZpbmQoY3Vzcm9tRmlsdGVy
KTsKKyAgICBpZiAoaXQgIT0gY3VzdG9tRmlsdGVyUmVuZGVyZXJNYXAtPmVuZCgpKQorICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlLmdldCgpOworCisgICAgQVNTRVJUKGN1c3JvbUZpbHRlci0+cHJv
Z3JhbSgpLT5pc0xvYWRlZCgpKTsKKyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+IGN1
c3RvbUZpbHRlclJlbmRlcmVyID0gQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShjdXN0b21G
aWx0ZXJDb250ZXh0LCBjdXNyb21GaWx0ZXItPnByb2dyYW0oKS0+cHJvZ3JhbUluZm8oKSwgY3Vz
cm9tRmlsdGVyLT5wYXJhbWV0ZXJzKCksCisgICAgICAgIGN1c3JvbUZpbHRlci0+bWVzaFJvd3Mo
KSwgY3Vzcm9tRmlsdGVyLT5tZXNoQ29sdW1ucygpLCBjdXNyb21GaWx0ZXItPm1lc2hCb3hUeXBl
KCksIGN1c3JvbUZpbHRlci0+bWVzaFR5cGUoKSk7CisgICAgaWYgKCFjdXN0b21GaWx0ZXJSZW5k
ZXJlcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjdXN0b21GaWx0ZXJSZW5kZXJlck1hcC0+
YWRkKGN1c3JvbUZpbHRlciwgY3VzdG9tRmlsdGVyUmVuZGVyZXIpOworICAgIHJldHVybiBjdXN0
b21GaWx0ZXJSZW5kZXJlci5nZXQoKTsKK30KKyNlbmRpZgorCitQYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1
cmVNYXBwZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmaWx0ZXJzLCBUZXh0dXJlTWFwcGVyQ3VzdG9tRmlsdGVyUmVuZGVyZXJN
YXBIb2xkZXIqIGhvbGRlcikKIHsKICAgICBUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXJH
TCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwogICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiBwcmV2aW91c1N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyR0wtPmRh
dGEoKS5jdXJyZW50U3VyZmFjZTsKQEAgLTg4OSw3ICs5NTcsNyBAQCBQYXNzUmVmUHRyPEJpdG1h
cFRleHR1cmU+IEJpdG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRl
eHR1cmVNYQogICAgICAgICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0
ZXIoZmlsdGVyLT5nZXRPcGVyYXRpb25UeXBlKCkpOwogICAgICAgICBmb3IgKGludCBqID0gMDsg
aiA8IG51bVBhc3NlczsgKytqKSB7CiAgICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmJpbmRT
dXJmYWNlKHRhcmdldC5nZXQoKSk7Ci0gICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmRyYXdG
aWx0ZXJlZCgoaSB8fCBqKSA/ICpzb3VyY2UgOiBjb250ZW50VGV4dHVyZSwgY29udGVudFRleHR1
cmUsICpmaWx0ZXIsIGopOworICAgICAgICAgICAgdGV4dHVyZU1hcHBlckdMLT5kcmF3RmlsdGVy
ZWQoKGkgfHwgaikgPyAqc291cmNlIDogY29udGVudFRleHR1cmUsIGNvbnRlbnRUZXh0dXJlLCBm
aWx0ZXIsIGosIGhvbGRlcik7CiAgICAgICAgICAgICBzdGQ6OnN3YXAoc291cmNlLCB0YXJnZXQp
OwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IDY0YmZmYWZlNTQyNmYz
Zjk3NjY5MDYzNjczZmE3ZDgwNWIxZDU5NmIuLmY0YmYyMGY2YWFjYzk1MWQ0YjcxZjgwNjM5NTc5
NGM4YThkYTU4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTMwLDYgKzMwLDkgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorY2xhc3MgQ3VzdG9t
RmlsdGVyUmVuZGVyZXI7CisjZW5kaWYKIGNsYXNzIFRleHR1cmVNYXBwZXJHTERhdGE7CiBjbGFz
cyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTsKQEAg
LTY5LDcgKzcyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRHcmFwaGljc0NvbnRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBPVkVSUklERSB7IG1fY29udGV4dCA9IGNvbnRl
eHQ7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRyYXdGaWx0ZXJlZChj
b25zdCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBj
b250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgaW50IHBhc3MpOworICAgIHZv
aWQgZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0
IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBp
bnQgcGFzcywgVGV4dHVyZU1hcHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFwSG9sZGVyKik7CiAj
ZW5kaWYKIAogICAgIHZvaWQgc2V0RW5hYmxlRWRnZURpc3RhbmNlQW50aWFsaWFzaW5nKGJvb2wg
ZW5hYmxlZCkgeyBtX2VuYWJsZUVkZ2VEaXN0YW5jZUFudGlhbGlhc2luZyA9IGVuYWJsZWQ7IH0K
QEAgLTExNCw2ICsxMTcsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRX
aXRoUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSosIHVpbnQzMl90IHRleHR1cmUs
IEZsYWdzLCBjb25zdCBEcmF3UXVhZCYsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2Rl
bFZpZXdNYXRyaXgsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEJpdG1hcFRleHR1cmUqIG1hc2tUZXh0
dXJlKTsKICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0IERyYXdRdWFkJiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0q
LCBHQzNEZW51bSBkcmF3aW5nTW9kZSwgYm9vbCBuZWVkc0JsZW5kaW5nKTsKIAorI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKKyAgICB2b2lkIGRyYXdDU1NTaGFkZXJzKGNvbnN0IEJpdG1hcFRleHR1
cmUmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24qLCBUZXh0dXJlTWFwcGVyQ3VzdG9tRmlsdGVyUmVu
ZGVyZXJNYXBIb2xkZXIqKTsKKyAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciogZ2V0Q3VzdG9tRmls
dGVyUmVuZGVyZXIoY29uc3QgRmlsdGVyT3BlcmF0aW9uKiwgVGV4dHVyZU1hcHBlckN1c3RvbUZp
bHRlclJlbmRlcmVyTWFwSG9sZGVyKik7CisjZW5kaWYKKwogICAgIGJvb2wgYmVnaW5TY2lzc29y
Q2xpcChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEZsb2F0UmVjdCYpOwogICAg
IHZvaWQgYmluZERlZmF1bHRTdXJmYWNlKCk7CiAgICAgQ2xpcFN0YWNrJiBjbGlwU3RhY2soKTsK
QEAgLTE0NCw3ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzQmFja2VkQnlP
cGVuR0woKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMp
Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFwcGx5RmlsdGVycyhUZXh0
dXJlTWFwcGVyKiwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbnMmKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4g
YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50
VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYsIFRleHR1cmVNYXBwZXJDdXN0b21GaWx0
ZXJSZW5kZXJlck1hcEhvbGRlciopOwogI2VuZGlmCiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdl
QnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCmluZGV4IDc4MDJiM2YwZTM0YTYwYjQ5ODVhYzlmNjI5
ZGRjNTlmN2RjM2JiYzguLjVjZjQ2MTlhYTRkY2U5MzRjZjhhNDkwY2EzYWY3Yjk1YmE4ZGYxOTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwCkBAIC0xMjYsNyArMTI2
LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXI6OmRyYXdUZXh0dXJlKGNvbnN0IEJp
dG1hcFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IEYKIH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjph
cHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRU
ZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQorUGFzc1JlZlB0cjxCaXRt
YXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXI6OmFwcGx5RmlsdGVycyhUZXh0dXJl
TWFwcGVyKiwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIGZpbHRlcnMsIFRleHR1cmVNYXBwZXJDdXN0b21GaWx0ZXJSZW5kZXJlck1h
cEhvbGRlciopCiB7CiAgICAgUmVmUHRyPEZpbHRlckVmZmVjdFJlbmRlcmVyPiByZW5kZXJlciA9
IEZpbHRlckVmZmVjdFJlbmRlcmVyOjpjcmVhdGUoKTsKICAgICByZW5kZXJlci0+c2V0U291cmNl
SW1hZ2VSZWN0KEZsb2F0UmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGNvbnRlbnRUZXh0dXJlLnNp
emUoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCmluZGV4IGZlOTc3NGEz
MmQxM2RjNTljMGU0NzU0NDVlNWI3YjNlNDlkNjhlMTMuLjU5MTBmZmI2ZGFjYmFmZWZjMmFmODkx
ODM3MzQ3Mzg2YTAyNjExYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgK
QEAgLTM3LDcgKzM3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50
cyhJbWFnZSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb250ZW50cyhjb25zdCB2b2lkKiwgY29uc3QgSW50UmVjdCYgdGFyZ2V0LCBj
b25zdCBJbnRQb2ludCYgc291cmNlT2Zmc2V0LCBpbnQgYnl0ZXNQZXJMaW5lKTsKICNpZiBFTkFC
TEUoQ1NTX0ZJTFRFUlMpCi0gICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRl
cnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJik7CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRlcnMoVGV4
dHVyZU1hcHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiwgVGV4dHVyZU1hcHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFwSG9sZGVyKik7CiAjZW5kaWYK
IAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5kZXggYjk1NDQ2MDllN2Jm
MTU3YzhkYTJiZTcwNWM2ZjM2NThhZWEwMjhiYy4uODgzY2E2YzU4YzRiZjIwZjMxOWI3MDFmOTVm
MjViYjgyOGNhOWQwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKQEAgLTMxOSw2ICsz
MTksMTggQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50U2VsZkFuZENoaWxkcmVuV2l0
aFJlcGxpY2EoY29uc3QgVGV4dHVyZU1hcHBlclBhaW4KICAgICBwYWludFNlbGZBbmRDaGlsZHJl
bihvcHRpb25zKTsKIH0KIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKK3ZvaWQgVGV4dHVyZU1h
cHBlckxheWVyOjpzZXRDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KFBhc3NPd25QdHI8Q3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dD4gY3VzdG9tRmlsdGVyQ29udGV4dCkKK3sKKyAgICByb290TGF5
ZXIoKS0+bV9jdXN0b21GaWx0ZXJDb250ZXh0ID0gY3VzdG9tRmlsdGVyQ29udGV4dDsKK30KKwor
Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogVGV4dHVyZU1hcHBlckxheWVyOjpjdXN0b21GaWx0
ZXJHbG9iYWxDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gcm9vdExheWVyKCktPm1fY3VzdG9tRmls
dGVyQ29udGV4dC5nZXQoKTsKK30KKyNlbmRpZgorCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQog
c3RhdGljIGJvb2wgc2hvdWxkS2VlcENvbnRlbnRUZXh0dXJlKGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIGZpbHRlcnMpCiB7CkBAIC0zMjcsNiArMzM5LDkgQEAgc3RhdGljIGJvb2wgc2hvdWxkS2Vl
cENvbnRlbnRUZXh0dXJlKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiAgICAgICAg
IC8vIFRoZSBkcm9wLXNoYWRvdyBmaWx0ZXIgcmVxdWlyZXMgdGhlIGNvbnRlbnQgdGV4dHVyZSwg
YmVjYXVzZSBpdCBuZWVkcyB0byBjb21wb3NpdGUgaXQKICAgICAgICAgLy8gb24gdG9wIG9mIHRo
ZSBibHVycmVkIHNoYWRvdyBjb2xvci4KICAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRS
T1BfU0hBRE9XOgorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyAgICAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkNVU1RPTToKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVhazsKQEAgLTMzNiwxMyArMzUxLDEzIEBAIHN0
YXRpYyBib29sIHNob3VsZEtlZXBDb250ZW50VGV4dHVyZShjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8Qml0
bWFwVGV4dHVyZT4gYXBwbHlGaWx0ZXJzKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMs
IFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIsIEJpdG1hcFRleHR1cmUqIHNvdXJjZSwgSW50
UmVjdCYgdGFyZ2V0UmVjdCkKK3N0YXRpYyBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFwcGx5
RmlsdGVycyhUZXh0dXJlTWFwcGVyTGF5ZXIqIGxheWVyLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiBmaWx0ZXJzLCBUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBCaXRtYXBUZXh0dXJlKiBz
b3VyY2UsIEludFJlY3QmIHRhcmdldFJlY3QpCiB7CiAgICAgaWYgKCFmaWx0ZXJzLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIHNvdXJjZTsKIAogICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBmaWx0
ZXJTdXJmYWNlID0gc2hvdWxkS2VlcENvbnRlbnRUZXh0dXJlKGZpbHRlcnMpID8gdGV4dHVyZU1h
cHBlci0+YWNxdWlyZVRleHR1cmVGcm9tUG9vbChzb3VyY2UtPnNpemUoKSkgOiBzb3VyY2U7Ci0g
ICAgcmV0dXJuIGZpbHRlclN1cmZhY2UtPmFwcGx5RmlsdGVycyh0ZXh0dXJlTWFwcGVyLCAqc291
cmNlLCBmaWx0ZXJzKTsKKyAgICByZXR1cm4gZmlsdGVyU3VyZmFjZS0+YXBwbHlGaWx0ZXJzKHRl
eHR1cmVNYXBwZXIsICpzb3VyY2UsIGZpbHRlcnMsIGxheWVyKTsKIH0KICNlbmRpZgogCkBAIC0z
ODEsNyArMzk2LDcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnBhaW50UmVjdXJzaXZlKGNv
bnN0IFRleHR1cmVNYXBwZXJQYWludE9wdGlvbnMmIG9wdGlvbnMKICAgICAgICAgbWFza1RleHR1
cmUgPSAwOwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHN1cmZhY2UgPSBhcHBseUZp
bHRlcnMobV9zdGF0ZS5maWx0ZXJzLCBvcHRpb25zLnRleHR1cmVNYXBwZXIsIHN1cmZhY2UuZ2V0
KCksIHN1cmZhY2VSZWN0KTsKKyAgICBzdXJmYWNlID0gYXBwbHlGaWx0ZXJzKHRoaXMsIG1fc3Rh
dGUuZmlsdGVycywgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBzdXJmYWNlLmdldCgpLCBzdXJmYWNl
UmVjdCk7CiAjZW5kaWYKIAogICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1cmZhY2Uo
b3B0aW9ucy5zdXJmYWNlLmdldCgpKTsKQEAgLTQ4MCw4ICs0OTUsMTIgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyTGF5ZXI6OmZsdXNoQ29tcG9zaXRpbmdTdGF0ZVNlbGYoR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIqIGcKICAgICBtX3N0YXRlLmNoaWxkcmVuVHJhbnNmb3JtID0gZ3JhcGhpY3NMYXll
ci0+Y2hpbGRyZW5UcmFuc2Zvcm0oKTsKICAgICBtX3N0YXRlLm9wYWNpdHkgPSBncmFwaGljc0xh
eWVyLT5vcGFjaXR5KCk7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIGlmIChjaGFuZ2VN
YXNrICYgRmlsdGVyQ2hhbmdlKQorICAgIGlmIChjaGFuZ2VNYXNrICYgRmlsdGVyQ2hhbmdlKSB7
CiAgICAgICAgIG1fc3RhdGUuZmlsdGVycyA9IGdyYXBoaWNzTGF5ZXItPmZpbHRlcnMoKTsKKwor
ICAgICAgICAvLyBGSVhNRTogU2hhcmluZyBDdXN0b21GaWx0ZXJSZW5kZXJlciBpbnN0YW5jZXMg
ZHVyaW5nIHRoZSBhbmltYXRpb24uCisgICAgICAgIG1fY3VzdG9tRmlsdGVyUmVuZGVyZXJNYXAu
Y2xlYXIoKTsKKyAgICB9CiAjZW5kaWYKICAgICBtX2ZpeGVkVG9WaWV3cG9ydCA9IGdyYXBoaWNz
TGF5ZXItPmZpeGVkVG9WaWV3cG9ydCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmgKaW5kZXgg
NTc0MGFjZjUyM2UyZGYzYzY0NWFlNWIyM2I1NTY3MThjMWM3ODU5Ni4uZDdiZmEwNzNhOTE1NjU1
ZDVhZWE0MGU1Zjg2ZDdlY2UzNjY0Yzg4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuaApAQCAt
MjIsNiArMjIsMTAgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAorI2lm
IEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
LmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCIKKyNlbmRpZgogI2luY2x1ZGUg
IkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKQEAgLTU4LDcgKzYyLDE3IEBAIHB1YmxpYzoKICAgICB7IH0KIH07
CiAKLWNsYXNzIFRleHR1cmVNYXBwZXJMYXllciA6IHB1YmxpYyBHcmFwaGljc0xheWVyQW5pbWF0
aW9uOjpDbGllbnQgeworY2xhc3MgVGV4dHVyZU1hcHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFw
SG9sZGVyIHsKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCitwdWJsaWM6CisgICAgdHlwZWRlZiBI
YXNoTWFwPGNvbnN0IEN1c3RvbUZpbHRlck9wZXJhdGlvbiosIFJlZlB0cjxDdXN0b21GaWx0ZXJS
ZW5kZXJlcj4gPiBDdXN0b21GaWx0ZXJSZW5kZXJlck1hcDsKKyAgICB2aXJ0dWFsIEN1c3RvbUZp
bHRlclJlbmRlcmVyTWFwKiBjdXN0b21GaWx0ZXJSZW5kZXJlck1hcCgpID0gMDsKKyAgICB2aXJ0
dWFsIHZvaWQgc2V0Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dChQYXNzT3duUHRyPEN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQ+KSA9IDA7CisgICAgdmlydHVhbCBDdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0KiBjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KCkgPSAwOworI2VuZGlmCit9OworCitj
bGFzcyBUZXh0dXJlTWFwcGVyTGF5ZXIgOiBwdWJsaWMgR3JhcGhpY3NMYXllckFuaW1hdGlvbjo6
Q2xpZW50LCBwdWJsaWMgVGV4dHVyZU1hcHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFwSG9sZGVy
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAgICAvLyBUaGlzIHNl
dCBvZiBmbGFncyBoZWxwIHVzIGRlZmVyIHdoaWNoIHByb3BlcnRpZXMgb2YgdGhlIGxheWVyIGhh
dmUgYmVlbgpAQCAtMTczLDYgKzE4NywxMyBAQCBwcml2YXRlOgogICAgICAgICBNdWx0aXBsZUxh
eWVyc1dpdGhDb250ZW50cwogICAgIH07CiAKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAg
Ly8gVGV4dHVyZU1hcHBlckN1c3RvbUZpbHRlclJlbmRlcmVyTWFwSG9sZGVyCisgICAgdmlydHVh
bCBDdXN0b21GaWx0ZXJSZW5kZXJlck1hcCogY3VzdG9tRmlsdGVyUmVuZGVyZXJNYXAoKSBPVkVS
UklERSB7IHJldHVybiAmbV9jdXN0b21GaWx0ZXJSZW5kZXJlck1hcDsgfQorICAgIHZpcnR1YWwg
dm9pZCBzZXRDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KFBhc3NPd25QdHI8Q3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dD4pIE9WRVJSSURFOworICAgIHZpcnR1YWwgQ3VzdG9tRmlsdGVyR2xvYmFs
Q29udGV4dCogY3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCgpIE9WRVJSSURFOworI2VuZGlmCisK
ICAgICBDb250ZW50c0xheWVyQ291bnQgY291bnRQb3RlbnRpYWxMYXllcnNXaXRoQ29udGVudHMo
KSBjb25zdDsKICAgICBib29sIHNob3VsZFBhaW50VG9JbnRlcm1lZGlhdGVTdXJmYWNlKCkgY29u
c3Q7CiAKQEAgLTI0MSw2ICsyNjIsMTMgQEAgcHJpdmF0ZToKICAgICBTdGF0ZSBtX3N0YXRlOwog
ICAgIFRleHR1cmVNYXBwZXIqIG1fdGV4dHVyZU1hcHBlcjsKICAgICBHcmFwaGljc0xheWVyQW5p
bWF0aW9ucyBtX2FuaW1hdGlvbnM7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIC8vIFRl
eHR1cmVNYXBwZXJMYXllciBtYW5hZ2VzIHRoZSBsaWZlLWN5Y2xlIG9mIGEgQ3VzdG9tRmlsdGVy
UmVuZGVyZXIgaW5zdGFuY2UgYXMgUmVuZGVyTGF5ZXIgbWFuYWdlcyBpdCB2aWEgRmlsdGVyRWZm
ZWN0UmVuZGVyZXIuCisgICAgQ3VzdG9tRmlsdGVyUmVuZGVyZXJNYXAgbV9jdXN0b21GaWx0ZXJS
ZW5kZXJlck1hcDsKKyAgICAvLyBPbmx5IHRoZSByb290IFRleHR1cmVNYXBwZXJMYXllciBoYXMg
bV9jdXN0b21GaWx0ZXJDb250ZXh0LgorICAgIC8vIG1fY3VzdG9tRmlsdGVyQ29udGV4dCBiZWxv
bmdzIHRvIFRleHR1cmVNYXBwZXJMYXllciB0byBiZSBkZXN0cm95ZWQgd2hlbiB0aGUgcm9vdCBs
YXllciBpcyBkZXN0cm95ZWQsIGJlY2F1c2UgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCBjYWNo
ZXMgYXV0aG9yIENTUyBTaGFkZXJzJyBwcm9ncmFtcyBpbiB0aGlzIGRvY3VtZW50LgorICAgIE93
blB0cjxDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0PiBtX2N1c3RvbUZpbHRlckNvbnRleHQ7Cisj
ZW5kaWYKICAgICBGbG9hdFNpemUgbV9zY3JvbGxQb3NpdGlvbkRlbHRhOwogICAgIGJvb2wgbV9m
aXhlZFRvVmlld3BvcnQ7CiAgICAgQ29sb3IgbV9kZWJ1Z0JvcmRlckNvbG9yOwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDQy
MGU5NjNiMWJkNmQ5ZTA5MzNmZTRiN2RkNjc0ZDc2ODYwZWFkY2EuLjVlYzk5NzhjODM5ZDczNGVj
MWRjNjFlZTQzNDExODJjYjQzMTUzOGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0xMC0y
MCAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KKworICAgICAgICBb
VGV4bWFwXVtDU1MgU2hhZGVyc10gRW5hYmxlIENTUyBTaGFkZXJzIGluIFRleHR1cmVNYXBwZXJH
TAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg5OTAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgY3Vz
dG9tLWZpbHRlci1jb21wb3NpdGUtc291cmNlLWF0b3AtaHcuaHRtbCBlcXVpdmFsZW50IHRvIHRo
ZSBub24taGFyZHdhcmUgdmVyc2lvbnMKKworICAgICAgICAqIGNzczMvZmlsdGVycy9jdXN0b20v
Y3VzdG9tLWZpbHRlci1jb21wb3NpdGUtc291cmNlLWF0b3AtaHctZXhwZWN0ZWQucG5nOiBBZGRl
ZC4KKyAgICAgICAgKiBjc3MzL2ZpbHRlcnMvY3VzdG9tL2N1c3RvbS1maWx0ZXItY29tcG9zaXRl
LXNvdXJjZS1hdG9wLWh3LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogY3NzMy9maWx0
ZXJzL2N1c3RvbS9jdXN0b20tZmlsdGVyLWNvbXBvc2l0ZS1zb3VyY2UtYXRvcC1ody5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9UZXN0RXhwZWN0YXRpb25zOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zOgorCiAyMDEyLTEwLTE2ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCiAgICAgICAgIFtDU1MgU2hh
ZGVyc10gSW1wbGVtZW50IGFsbCBjb21wb3NpdGUgb3BlcmF0b3JzIGV4Y2VwdCBkZXN0aW5hdGlv
biBhbmQgbGlnaHRlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9jdXN0
b20vY3VzdG9tLWZpbHRlci1jb21wb3NpdGUtc291cmNlLWF0b3AtaHctZXhwZWN0ZWQucG5nIGIv
TGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9jdXN0b20tZmlsdGVyLWNvbXBvc2l0ZS1z
b3VyY2UtYXRvcC1ody1leHBlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ExYjAwMWZkYmJjMWRlODEx
MmY0YmQ1Y2E0ZGU5ZTVkYmM5NTBhNwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA3OTYKemNt
ZUkyWkFlcDU3e3x9T3UzOGhARXUjKyErcFIzSkJ4cVRpOGhYdUg4WTtifkxDdk9TKFRoPFVSPVJz
T3FjXmdvCnpIJlVgeV5hM1IrK0p7MU1tazY+Vml5fXJ2SDdLJnNMV3shRC0waXJ7LVNmU3VGVkJh
dS1OUU4wSXA/fDBeRlAxeQp6dXBgVEltcWNrTVlZOytGUygpWSkydTFKK3YzY3N6cUB7azNWPC04
RkU2ZDAkRThKWE14T0kyPWMydX0mVWh6ZyMKenFTM1VlaDx2UHgqNyp4ZTJCWHojRHEzSkw4SHk0
LTxFKD5aT2xPdWtaQismSDw7fm90ZzhTdGUlZDRze29hKWk8CnpVI3dZb3ZTSD9wQnlJYXNgQFZB
WDw/aTtWSWt3Ujt2Njltd2ArZ1cqWUt8OCRWcHRYVihJMkRvX1pvZFZUViZ1ZAp6KWI0WClHKkJK
eEJ3KHBEbiZWd0h1Uyg0JDB8aVhGJT1ffiRsRXZ0N0ktUmZZQ0VIVXNOT0VxXjMzKXNVbkxXbjMK
ems9Tlp8NSV0WT1MOzAtZTc0IVZQck1FTlhIZTI3Jml3Vko5PFZkMzlnfDlNNFMocjQyVlpKZXNQ
S1VOZ2pNLT1LCnpMY096anRnYFZ6byk9T0k+T3dZI0pASGhmJUtaTCllJFh2fTE/V3wodH0qY3xE
YVhgZnc4aHByTClvPmI4WTM/Kgp6VWFDd2s1Sng/Sjt2VGpiPlE+MmR5dUt4eW50VV9NVWgjVkNz
cjZ9RF9DdihrSUJOMTcwVmt3ZHFEUEY3SDxjI2YKek8zNSU/bmYmNWRiP3dLVnQ8P0hiKWFxSm8t
Wmc2UzFjckdBJkkhQzhhODVXJUEjJWM1Xncta0w/bj5EdjR9S1FxCnpDKFdzRUo/fEw1LXpFRD97
TzdgMUYwR2ViJSQ9RDB1clFGRSZKXiVNTjc9en1BN3BSRzI+T2YhRCk8THRCWTJRUAp6VWk/NFpA
YnRKLSNmQlkyS0EtUTRBK2hSZmpVO3dwYWsybHNKbjJfdFkqMHljbm41RzRvIWMtcUVVYmJqbylA
fVAKekhjO0dDRl9SWmApfSlNKV5kPy1IRld+YzQ5VGJOM0ZDJnQ4dWswdSNpRVM3cXs7SHRCJDgh
bXp5QHgrZnE7UlEoCnpWUnJvLXBnMnJRQ2xKVXprRTdfUW4/UDNJYCFrZn5MIUBRT3dVcmJ2b2di
eUBkVTx+fldtIXZGKHpDQkNKamE8TAp6KXdPTFcpPjQqcjhnPWNWYkdoUmNUSDg1Xjw0ZzMtbDt3
cEpJZEJqLUM9Z2k/TEh7aHBgclRmeVkhUGo/dnZwQmEKelI7IUs9LXp8VWl4KER6UUR2e05WdFV0
UE9efjIrb05EdnRfVCNCR0Z4c2hkeSZhX1RibCNWQllrb2AjKyFtdXxuCnolRD51Mlgre156I3py
UzhMJEVaOTd1TGlqUSoqYXNeeChpYWlWajxkcz0hamZELWJLZ1NwcGVFMU97fTQ3ZUgtRQp6ST1+
cjNzPTlEOGIzOHgtcCpsYihhK0w8NDFWeyo2RmFReiY1KDFZfGZDUFlxSyFFYHUwVSNreml+Pmwy
Tjx5IygKdDUwQyhtMEZWJT4+TyY9Z29ES2o5e31kOHJ2flJ1Y1I/WGV5RjdvJEpsJERXZFpkejJ9
X3pqb0BCRGVxbQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9jdXN0b20tZmlsdGVyLWNvbXBvc2l0ZS1zb3VyY2UtYXRv
cC1ody1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvY3VzdG9tL2N1c3Rv
bS1maWx0ZXItY29tcG9zaXRlLXNvdXJjZS1hdG9wLWh3LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li44YjEzNzg5MTc5MWZlOTY5MjdhZDc4ZTY0YjBhYWQ3YmRlZDA4YmRjCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9jdXN0b20tZmlsdGVyLWNvbXBv
c2l0ZS1zb3VyY2UtYXRvcC1ody1leHBlY3RlZC50eHQKQEAgLTAsMCArMSBAQAorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvY3VzdG9tL2N1c3RvbS1maWx0ZXItY29tcG9z
aXRlLXNvdXJjZS1hdG9wLWh3Lmh0bWwgYi9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvY3VzdG9t
L2N1c3RvbS1maWx0ZXItY29tcG9zaXRlLXNvdXJjZS1hdG9wLWh3Lmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Nzg0ZGRkMDVmYjY3YTYyYWJmMTFiYzZiZmQ2NjBiYTZjNDVkMmVhOQotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2NzczMvZmlsdGVycy9jdXN0b20vY3VzdG9tLWZpbHRlci1jb21wb3Np
dGUtc291cmNlLWF0b3AtaHcuaHRtbApAQCAtMCwwICsxLDUyIEBACis8IWRvY3R5cGUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+CisgICAgPHRpdGxlPlRlc3RzIHRoZSBzb3VyY2UtYXRvcCBjb21wb3Np
dGUgb3BlcmF0b3Igd2l0aCB0aGUgbm9ybWFsIGJsZW5kIG1vZGUuPC90aXRsZT4KKyAgICA8IS0t
CisgICAgICAgIFRoaXMgdGVzdCBtaW1pY3MgdGhlIHNvdXJjZS1hdG9wIGV4YW1wbGUgaW1hZ2Ug
aW4gdGhlIENvbXBvc2l0aW5nIGFuZCBCbGVuZGluZyBzcGVjOgorICAgICAgICBodHRwczovL2R2
Y3MudzMub3JnL2hnL0ZYVEYvcmF3ZmlsZS90aXAvY29tcG9zaXRpbmcvaW5kZXguaHRtbCNwb3J0
ZXJkdWZmY29tcG9zaXRpbmdvcGVyYXRvcnNfc3JjYXRvcAorCisgICAgICAgIElmIGl0IHBhc3Nl
cywgeW91IHNob3VsZCBzZWUgYSB5ZWxsb3cgc3F1YXJlIHdpdGggYSBibHVlIHNxdWFyZSBpbiBp
dHMgbG93ZXIgcmlnaHQgY29ybmVyLgorICAgICAgICBUaGlzIHNob3VsZCBiZSBpbiB0aGUgdXBw
ZXIgbGVmdCBjb3JuZXIgb2YgYSB3aGl0ZSBib3ggd2l0aCBhIGJsYWNrIGJvcmRlci4KKyAgICAt
LT4KKyAgICA8c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAg
ICAgICAgIHdpbmRvdy50ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0Q1NTQ3Vz
dG9tRmlsdGVyRW5hYmxlZCIsICIxIik7CisgICAgICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci5v
dmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7CisgICAgICAgICAg
ICB3aW5kb3cudGVzdFJ1bm5lci5kdW1wQXNUZXh0KHRydWUpOworICAgICAgICB9CisgICAgPC9z
Y3JpcHQ+CisgICAgPHN0eWxlPgorICAgIC8qIERyYXdzIGEgYmxhY2sgYm9yZGVyIGFyb3VuZCB0
aGUgc2hhZGVkIGRlc3RpbmF0aW9uIGRpdi4gKi8KKyAgICAjYm9yZGVyLWNvbnRhaW5lciB7Cisg
ICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgaGVpZ2h0OiAyMDBweDsKKyAgICAgICAgYm9y
ZGVyOiAxcHggc29saWQgYmxhY2s7CisgICAgfQorICAgIC8qIFRoZSBzaGFkZWQgZGl2LiAqLwor
ICAgICNkZXN0aW5hdGlvbiB7CisgICAgICAgIHdpZHRoOiAxMDAlOworICAgICAgICBoZWlnaHQ6
IDEwMCU7CisgICAgICAgIC8qIFRoZSBmcmFnbWVudCBzaGFkZXIgd3JpdGVzIGEgYmx1ZSBzcXVh
cmUgdG8gY3NzX01peENvbG9yIGluIHRoZSBsb3dlciByaWdodCBjb3JuZXIgb2YgdGhlIGRlc3Rp
bmF0aW9uIGRpdi4gKi8KKyAgICAgICAgLyogSXQgd3JpdGVzIHRyYW5zcGFyZW50IGVsc2V3aGVy
ZS4gKi8KKyAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGN1c3RvbSh1cmwoJy4uL3Jlc291cmNlcy9w
YXNzLXRleC1jb29yZC52cycpIG1peCh1cmwoJy4uL3Jlc291cmNlcy9jb21wb3NpdGUuZnMnKSBu
b3JtYWwgc291cmNlLWF0b3ApKTsKKyAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRl
WigwKTsKKyAgICB9CisgICAgLyogRHJhd3MgYSB5ZWxsb3cgc3F1YXJlIGluIHRoZSB1cHBlciBs
ZWZ0IGNvcm5lciBvZiB0aGUgZGVzdGluYXRpb24gZGl2LiAqLworICAgIC8qIFRoZSByZXN0IG9m
IHRoZSBkZXN0aW5hdGlvbiBkaXYgaXMgdHJhbnNwYXJlbnQuICovCisgICAgI2Rlc3RpbmF0aW9u
LW9wYXF1ZS1jaGlsZCB7CisgICAgICAgIHdpZHRoOiA2NyU7CisgICAgICAgIGhlaWdodDogNjcl
OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB5ZWxsb3c7CisgICAgfQorICAgIDwvc3R5bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJib3JkZXItY29udGFpbmVyIj4KKyAgICAg
ICAgPGRpdiBpZD0iZGVzdGluYXRpb24iPgorICAgICAgICAgICAgPGRpdiBpZD0iZGVzdGluYXRp
b24tb3BhcXVlLWNoaWxkIj4KKyAgICAgICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAg
ICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJv
bWl1bS9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDlhOTJmNWMwMzJlZjhlOTgzYzc2MjVlYmFjNGUw
ZjI2YTQ0ZDEzYWEuLjI2ZjIxMTUwNjZhNWY5NTViNTY1MWZhOGM1NzNlN2ZjZWNlYWMwMzAgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vVGVzdEV4cGVjdGF0aW9ucwpAQCAt
MzcyOSw2ICszNzI5LDkgQEAgd2Via2l0Lm9yZy9iLzk0NDkyIFsgTGludXggV2luIF0gY3NzMy9m
aWx0ZXJzL2N1c3RvbS9maWx0ZXItcmVwYWludC1jdXN0b20tcm90YXQKIHdlYmtpdC5vcmcvYi85
NTU4MSBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLmh0bWwg
WyBQYXNzIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzk1NTgxIGh0dHAvdGVzdHMvbWlzYy9qYXZh
c2NyaXB0LXVybC1zdG9wLWxvYWRlcnMuaHRtbCBbIFBhc3MgVGltZW91dCBdCiAKKyMgQ1NTIFNo
YWRlcnMgaW4gbm90IGN1cnJlbnRseSBlbmFibGVkIG9uIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5n
Lgord2Via2l0Lm9yZy9iLzc0NjUxIGNzczMvZmlsdGVycy9jdXN0b20vY3VzdG9tLWZpbHRlci1j
b21wb3NpdGUtc291cmNlLWF0b3AtaHcuaHRtbAorCiAjIEZsYWt5IHRpbWVvdXRzLgogd2Via2l0
Lm9yZy9iLzk5NzM0IFsgTWFjIF0gaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXF1ZXN0LWVu
Y29kaW5nMi5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
VGVzdEV4cGVjdGF0aW9ucwppbmRleCA5ZTU1NWZiZWM3OGNjNDRmZWQ4M2Q2MzBjZjUwNWViNzFi
YzM2MDdhLi4wYTBhNzgyMjU5ODZlNWU3NzI2MjRmY2EzYTQ3NDgxMTY4MmIyOTc4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucwpAQCAtMTI5NCw2ICsxMjk0LDkg
QEAgd2Via2l0Lm9yZy9iLzgwMzk0IGZhc3QvYmxvY2svbWFyZ2luLWNvbGxhcHNlL2VtcHR5LWNs
ZWFyLWJsb2Nrcy5odG1sIFsgRmFpbHVyZQogd2Via2l0Lm9yZy9iLzgwMzk0IGZhc3QvYmxvY2sv
bWFyZ2luLWNvbGxhcHNlLzAyNS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvODAzOTQg
ZmFzdC9ibG9jay9tYXJnaW4tY29sbGFwc2UvYmxvY2staW5zaWRlLWlubGluZS8wMjUuaHRtbCBb
IEZhaWx1cmUgXQogCisjIENTUyBTaGFkZXJzIGluIG5vdCBjdXJyZW50bHkgZW5hYmxlZCBvbiBB
Y2NlbGVyYXRlZCBDb21wb3NpdGluZy4KK3dlYmtpdC5vcmcvYi83NDY1MSBjc3MzL2ZpbHRlcnMv
Y3VzdG9tL2N1c3RvbS1maWx0ZXItY29tcG9zaXRlLXNvdXJjZS1hdG9wLWh3Lmh0bWwKKwogIyBj
c3MzLWNvbmRpdGlvbmFscyBzdXBwb3J0IGlzIG5vdCB5ZXQgZW5hYmxlZC4KIHdlYmtpdC5vcmcv
Yi84NjE0NiBjc3MzL3N1cHBvcnRzLmh0bWwKIAo=
</data>
<flag name="review"
          id="183169"
          type_id="1"
          status="-"
          setter="noam"
    />
    <flag name="commit-queue"
          id="183170"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173377</attachid>
            <date>2012-11-09 14:50:41 -0800</date>
            <delta_ts>2012-11-09 15:02:28 -0800</delta_ts>
            <desc>Patch V2</desc>
            <filename>bug98990_v1.patch</filename>
            <type>text/plain</type>
            <size>28646</size>
            <attacher name="Alexandru Chiculita">achicu</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ZjhkYTlhLi43NzM4MjFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTItMTEt
MDkgIEFsZXhhbmRydSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgorCisgICAgICAgIFtU
ZXhtYXBdW0NTUyBTaGFkZXJzXSBFbmFibGUgQ1NTIFNoYWRlcnMgaW4gVGV4dHVyZU1hcHBlckdM
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODk5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENvcGllZCB0
aGUgY3VzdG9tLWZpbHRlci1ibGVuZC1tb2Rlcy5odG1sIHRlc3QgZmlsZSBhbmQgZm9yY2VkIHRo
ZSBmaWx0ZXJlZCBlbGVtZW50cyB0byBoYXZlIAorICAgICAgICBjb21wb3NpdGVkIGxheWVycyB1
c2luZyAzZCB0cmFuc2Zvcm1zLgorCisgICAgICAgICogY3NzMy9maWx0ZXJzL2N1c3RvbS9jb21w
b3NpdGVkL2N1c3RvbS1maWx0ZXItYmxlbmQtbW9kZXMtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisg
ICAgICAgICogY3NzMy9maWx0ZXJzL2N1c3RvbS9jb21wb3NpdGVkL2N1c3RvbS1maWx0ZXItYmxl
bmQtbW9kZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vcXQtNC44L1Rlc3RFeHBl
Y3RhdGlvbnM6IE9ubHkgUXQtV2syIGNhbiBjdXJyZW50bHkgcnVuIHRoZSBzaGFkZXJzLgorICAg
ICAgICAqIHBsYXRmb3JtL3F0LTUuMC13azEvVGVzdEV4cGVjdGF0aW9uczoKKyAgICAgICAgKiBw
bGF0Zm9ybS9xdC9UZXN0RXhwZWN0YXRpb25zOiBBZGRlZCBhIGNvdXBsZSBvZiB0ZXN0cyB0aGF0
IGFyZSBub3QgcGFzc2luZyBjdXJyZW50bHkuIAorICAgICAgICBJJ3ZlIGFkZGVkIDEwMTUzMSB0
byB0cmFjayB0aG9zZS4KKwogMjAxMi0xMS0wOSAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBiYXNlbGluZXMgY2hhbmdlIC0gcmVtb3Zl
IHN0cmF5IGJhc2VsaW5lcyBmb3IgcmVmdGVzdHMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9j
c3MzL2ZpbHRlcnMvY3VzdG9tL2NvbXBvc2l0ZWQvY3VzdG9tLWZpbHRlci1ibGVuZC1tb2Rlcy1l
eHBlY3RlZC5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9jb21wb3NpdGVk
L2N1c3RvbS1maWx0ZXItYmxlbmQtbW9kZXMtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42ODI0MDNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9jb21wb3NpdGVkL2N1c3RvbS1maWx0ZXItYmxlbmQtbW9k
ZXMtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDExNCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorICAgIDx0aXRsZT5UZXN0cyB0aGF0IGN1c3RvbSBmaWx0ZXIgYmxlbmQgbW9k
ZXMgY29tcHV0ZSBjb2xvciB2YWx1ZXMgY29ycmVjdGx5LjwvdGl0bGU+CisgICAgPCEtLQorICAg
ICAgICBUaGlzIGlzIHRoZSByZWZlcmVuY2UgZmlsZSBmb3IgdGhlIHRlc3QuCisgICAgICAgIFRo
ZSB0ZXN0IHBhc3NlcyBpZiBlYWNoIGhvcml6b250YWwgcGFpciBvZiBzcXVhcmVzIGFyZSBleGFj
dGx5IHRoZSBzYW1lIGNvbG9yLgorICAgICAgICBUaGUgdGVzdCBmaWxlIGRlc2NyaWJlcyBob3cg
dGhlIGNvbG9yIHZhbHVlcyBpbiB0aGlzIHJlZmVyZW5jZSBmaWxlIGFyZSBjb21wdXRlZC4KKyAg
ICAtLT4KKyAgICA8c3R5bGU+CisgICAgLnBhaXItb2Ytc3F1YXJlcyB7CisgICAgICAgIGNsZWFy
OiBib3RoOworICAgIH0KKyAgICAucGFpci1vZi1zcXVhcmVzID4gZGl2IHsKKyAgICAgICAgLyog
U3F1YXJlIHNpemUuICovCisgICAgICAgIHdpZHRoOiAyMHB4OworICAgICAgICBoZWlnaHQ6IDIw
cHg7CisgICAgICAgIG1hcmdpbjogMnB4OworICAgICAgICBmbG9hdDogbGVmdDsKKyAgICB9Cisg
ICAgLyogQmxlbmQgbW9kZXMgKi8KKyAgICAubm9ybWFsLWV4cGVjdGVkIHsKKyAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogcmdiKDAlLCA2MCUsIDUwJSk7CisgICAgfQorICAgIC5tdWx0aXBseS1l
eHBlY3RlZCB7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwJSwgMTglLCAyNSUpOwor
ICAgIH0KKyAgICAuc2NyZWVuLWV4cGVjdGVkIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmdiKDI1NSwgMTgzLCAxOTIpOworICAgIH0KKyAgICAuZGFya2VuLWV4cGVjdGVkIHsKKyAgICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAlLCAzMCUsIDUwJSk7CisgICAgfQorICAgIC5saWdo
dGVuLWV4cGVjdGVkIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCUsIDYwJSwg
NTAlKTsKKyAgICB9CisgICAgLmRpZmZlcmVuY2UtZXhwZWN0ZWQgeworICAgICAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZ2IoMjU1LCA3NywgMSk7CisgICAgfQorICAgIC5leGNsdXNpb24tZXhwZWN0
ZWQgeworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAxMzgsIDEyNyk7CisgICAg
fQorICAgIC5vdmVybGF5LWV4cGVjdGVkIHsKKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
KDI1NSwgOTEsIDEyOCk7CisgICAgfQorICAgIC5jb2xvci1kb2RnZS1leHBlY3RlZCB7CisgICAg
ICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDE5MCwgMjU1KTsKKyAgICB9CisgICAgLmNv
bG9yLWJ1cm4tZXhwZWN0ZWQgeworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCAz
MSwgOTYpOworICAgIH0KKyAgICAuaGFyZC1saWdodC1leHBlY3RlZCB7CisgICAgICAgIGJhY2tn
cm91bmQtY29sb3I6IHJnYigwJSwgNDQlLCA1MCUpOworICAgIH0KKyAgICAuc29mdC1saWdodC1l
eHBlY3RlZCB7CisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDg5LCAxMjgpOwor
ICAgIH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBjbGFzcz0icGFp
ci1vZi1zcXVhcmVzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibm9ybWFsLWV4cGVjdGVkIj48L2Rp
dj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibm9ybWFsLWV4cGVjdGVkIj48L2Rpdj4KKyAgICA8L2Rp
dj4KKyAgICA8ZGl2IGNsYXNzPSJwYWlyLW9mLXNxdWFyZXMiPgorICAgICAgICA8ZGl2IGNsYXNz
PSJtdWx0aXBseS1leHBlY3RlZCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpcGx5
LWV4cGVjdGVkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwYWlyLW9mLXNx
dWFyZXMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzY3JlZW4tZXhwZWN0ZWQiPjwvZGl2PgorICAg
ICAgICA8ZGl2IGNsYXNzPSJzY3JlZW4tZXhwZWN0ZWQiPjwvZGl2PgorICAgIDwvZGl2PgorICAg
IDxkaXYgY2xhc3M9InBhaXItb2Ytc3F1YXJlcyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImRhcmtl
bi1leHBlY3RlZCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImRhcmtlbi1leHBlY3RlZCI+
PC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0icGFpci1vZi1zcXVhcmVzIj4KKyAg
ICAgICAgPGRpdiBjbGFzcz0ibGlnaHRlbi1leHBlY3RlZCI+PC9kaXY+CisgICAgICAgIDxkaXYg
Y2xhc3M9ImxpZ2h0ZW4tZXhwZWN0ZWQiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xh
c3M9InBhaXItb2Ytc3F1YXJlcyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImRpZmZlcmVuY2UtZXhw
ZWN0ZWQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmZXJlbmNlLWV4cGVjdGVkIj48
L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwYWlyLW9mLXNxdWFyZXMiPgorICAg
ICAgICA8ZGl2IGNsYXNzPSJleGNsdXNpb24tZXhwZWN0ZWQiPjwvZGl2PgorICAgICAgICA8ZGl2
IGNsYXNzPSJleGNsdXNpb24tZXhwZWN0ZWQiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYg
Y2xhc3M9InBhaXItb2Ytc3F1YXJlcyI+CisgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXktZXhw
ZWN0ZWQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5LWV4cGVjdGVkIj48L2Rp
dj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwYWlyLW9mLXNxdWFyZXMiPgorICAgICAg
ICA8ZGl2IGNsYXNzPSJjb2xvci1kb2RnZS1leHBlY3RlZCI+PC9kaXY+CisgICAgICAgIDxkaXYg
Y2xhc3M9ImNvbG9yLWRvZGdlLWV4cGVjdGVkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2
IGNsYXNzPSJwYWlyLW9mLXNxdWFyZXMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJjb2xvci1idXJu
LWV4cGVjdGVkIj48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0iY29sb3ItYnVybi1leHBlY3Rl
ZCI+PC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0icGFpci1vZi1zcXVhcmVzIj4K
KyAgICAgICAgPGRpdiBjbGFzcz0iaGFyZC1saWdodC1leHBlY3RlZCI+PC9kaXY+CisgICAgICAg
IDxkaXYgY2xhc3M9ImhhcmQtbGlnaHQtZXhwZWN0ZWQiPjwvZGl2PgorICAgIDwvZGl2PgorICAg
IDxkaXYgY2xhc3M9InBhaXItb2Ytc3F1YXJlcyI+CisgICAgICAgIDxkaXYgY2xhc3M9InNvZnQt
bGlnaHQtZXhwZWN0ZWQiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzb2Z0LWxpZ2h0LWV4
cGVjdGVkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8IS0tCisgICAgICAgIElmIHlvdSBhZGQg
bW9yZSBibGVuZCBtb2RlcyB0byB0aGlzIHBhZ2UsIGJlIGNhcmVmdWwgbm90IHRvIGV4Y2VlZCA2
MDBweCBpbiAKKyAgICAgICAgaGVpZ2h0LCBzaW5jZSBEdW1wUmVuZGVyVHJlZSBjb21wYXJlcyA4
MDB4NjAwIHNuYXBzaG90cyBvZiB0aGlzIHBhZ2UuCisgICAgLS0+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL2ZpbHRlcnMvY3VzdG9tL2NvbXBvc2l0ZWQv
Y3VzdG9tLWZpbHRlci1ibGVuZC1tb2Rlcy5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJz
L2N1c3RvbS9jb21wb3NpdGVkL2N1c3RvbS1maWx0ZXItYmxlbmQtbW9kZXMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWNmN2NjCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvY3NzMy9maWx0ZXJzL2N1c3RvbS9jb21wb3NpdGVkL2N1c3RvbS1maWx0ZXIt
YmxlbmQtbW9kZXMuaHRtbApAQCAtMCwwICsxLDMyOSBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorICAgIDx0aXRsZT5UZXN0cyB0aGF0IGN1c3RvbSBmaWx0ZXIgYmxlbmQgbW9k
ZXMgY29tcHV0ZSBjb2xvciB2YWx1ZXMgY29ycmVjdGx5LjwvdGl0bGU+CisgICAgPCEtLSBUaGlz
IHRlc3QgcGFzc2VzIGlmIGVhY2ggaG9yaXpvbnRhbCBwYWlyIG9mIHNxdWFyZXMgYXJlIGV4YWN0
bHkgdGhlIHNhbWUgY29sb3IuIC0tPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cu
dGVzdFJ1bm5lcikgeworICAgICAgICAgICAgd2luZG93LnRlc3RSdW5uZXIub3ZlcnJpZGVQcmVm
ZXJlbmNlKCJXZWJLaXRDU1NDdXN0b21GaWx0ZXJFbmFibGVkIiwgIjEiKTsKKyAgICAgICAgICAg
IHdpbmRvdy50ZXN0UnVubmVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVk
IiwgIjEiKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZT4KKyAgICAucGFp
ci1vZi1zcXVhcmVzIHsKKyAgICAgICAgY2xlYXI6IGJvdGg7CisgICAgfQorICAgIC5wYWlyLW9m
LXNxdWFyZXMgPiBkaXYgeworICAgICAgICAvKiBTcXVhcmUgc2l6ZS4gKi8KKyAgICAgICAgd2lk
dGg6IDIwcHg7CisgICAgICAgIGhlaWdodDogMjBweDsKKyAgICAgICAgbWFyZ2luOiAycHg7Cisg
ICAgICAgIGZsb2F0OiBsZWZ0OworICAgIH0KKyAgICAuZGVzdGluYXRpb24geworICAgICAgICAv
KiBEZXN0aW5hdGlvbiBjb2xvciAqLworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAw
JSwgMzAlLCA1MCUpOworICAgICAgICAvKiBGb3JjZSBhIEdQVSBjb21wb3NpdGVkIGxheWVyLiAq
LworICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7CisgICAg
fQorICAgIC8qIEJsZW5kIG1vZGVzICovCisgICAgLm5vcm1hbCB7CisgICAgICAgIC13ZWJraXQt
ZmlsdGVyOiBjdXN0b20obm9uZSBtaXgodXJsKCcuLi8uLi9yZXNvdXJjZXMvbWl4LWNvbG9yLmZz
Jykgbm9ybWFsIHNvdXJjZS1hdG9wKSwgbWl4X2NvbG9yIDAuMCAwLjYgMC41IDEuMCk7CisgICAg
fQorICAgIC8qCisgICAgICAgIFRoZSBlcXVhdGlvbnMgYmVsb3cgdXNlIHRoZSBzeW1ib2xzIGFu
ZCBlcXVhdGlvbnMgZGVmaW5lZCBpbiB0aGUgQ1NTIEJsZW5kaW5nIGFuZCBDb21wb3NpdGluZyBz
cGVjLCB3aGVyZToKKyAgICAgICAgICAgIENvID0gb3V0cHV0IGNvbG9yCisgICAgICAgICAgICBD
cyA9IHNvdXJjZSBjb2xvciAoYWthICJtaXggY29sb3IiLCAiY3NzX01peENvbG9yIikKKyAgICAg
ICAgICAgIENiID0gZGVzdGluYXRpb24gY29sb3IgKGFrYSAiYmFja2Ryb3AgY29sb3IiLCAib3Jp
Z2luYWwgRE9NIGVsZW1lbnQgY29sb3IiKQorCisgICAgICAgIGh0dHBzOi8vZHZjcy53My5vcmcv
aGcvRlhURi9yYXdmaWxlL3RpcC9jb21wb3NpdGluZy9pbmRleC5odG1sI2dlbmVyYWxmb3JtdWxh
CisgICAgKi8KKyAgICAubm9ybWFsLWV4cGVjdGVkIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAg
IE5vcm1hbDoKKworICAgICAgICAgICAgQ28gPSBDcworCisgICAgICAgICAgICByID0gMC4wCisg
ICAgICAgICAgICBnID0gMC42CisgICAgICAgICAgICBiID0gMC41CisgICAgICAgICovCisgICAg
ICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigwJSwgNjAlLCA1MCUpOworICAgIH0KKyAgICAubXVs
dGlwbHkgeworICAgICAgICAtd2Via2l0LWZpbHRlcjogY3VzdG9tKG5vbmUgbWl4KHVybCgnLi4v
Li4vcmVzb3VyY2VzL21peC1jb2xvci5mcycpIG11bHRpcGx5IHNvdXJjZS1hdG9wKSwgbWl4X2Nv
bG9yIDAuMCAwLjYgMC41IDEuMCk7CisgICAgfQorICAgIC5tdWx0aXBseS1leHBlY3RlZCB7Cisg
ICAgICAgIC8qCisgICAgICAgICAgICBNdWx0aXBseToKKworICAgICAgICAgICAgQ28gPSBDYiAq
IENzCisKKyAgICAgICAgICAgIHIgPSAxLjAgKiAwLjAgPSAwLjAKKyAgICAgICAgICAgIGcgPSAw
LjMgKiAwLjYgPSAwLjE4CisgICAgICAgICAgICBiID0gMC41ICogMC41ID0gMC4yNQorICAgICAg
ICAqLworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCUsIDE4JSwgMjUlKTsKKyAgICB9
CisgICAgLnNjcmVlbiB7CisgICAgICAgIC13ZWJraXQtZmlsdGVyOiBjdXN0b20obm9uZSBtaXgo
dXJsKCcuLi8uLi9yZXNvdXJjZXMvbWl4LWNvbG9yLmZzJykgc2NyZWVuIHNvdXJjZS1hdG9wKSwg
bWl4X2NvbG9yIDAuMCAwLjYgMC41IDEuMCk7CisgICAgfQorICAgIC5zY3JlZW4tZXhwZWN0ZWQg
eworICAgICAgICAvKgorICAgICAgICAgICAgU2NyZWVuOgorCisgICAgICAgICAgICBDbyA9IENi
ICsgQ3MgLSBDYiAqIENzCisKKyAgICAgICAgICAgIHIgPSAxLjAgKyAwLjAgLSAxLjAgKiAwLjAg
PSAxLjAKKyAgICAgICAgICAgIGcgPSAwLjMgKyAwLjYgLSAwLjMgKiAwLjYgPSAwLjcyCisgICAg
ICAgICAgICBiID0gMC41ICsgMC41IC0gMC41ICogMC41ID0gMC43NQorCisgICAgICAgICAgICBU
aGUgZXJyb3IgaW4gdGhlIGNvbG9yIGNhbGN1bGF0aW9uIHJlcXVpcmVzIHVzIHRvIHVzZSB0aGUg
OC1iaXQgdmFsdWVzIGZvcjoKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxMDAl
LCA3MiUsIDc1JSk7CisgICAgICAgICovCisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigy
NTUsIDE4MywgMTkyKTsKKyAgICB9CisgICAgLmRhcmtlbiB7CisgICAgICAgIC13ZWJraXQtZmls
dGVyOiBjdXN0b20obm9uZSBtaXgodXJsKCcuLi8uLi9yZXNvdXJjZXMvbWl4LWNvbG9yLmZzJykg
ZGFya2VuIHNvdXJjZS1hdG9wKSwgbWl4X2NvbG9yIDAuMCAwLjYgMC41IDEuMCk7CisgICAgfQor
ICAgIC5kYXJrZW4tZXhwZWN0ZWQgeworICAgICAgICAvKgorICAgICAgICAgICAgRGFya2VuOgor
CisgICAgICAgICAgICBDbyA9IG1pbihDYiwgQ3MpCisKKyAgICAgICAgICAgIHIgPSBtaW4oMS4w
LCAwLjApID0gMC4wCisgICAgICAgICAgICBnID0gbWluKDAuMywgMC42KSA9IDAuMworICAgICAg
ICAgICAgYiA9IG1pbigwLjUsIDAuNSkgPSAwLjUKKyAgICAgICAgKi8KKyAgICAgICAgYmFja2dy
b3VuZC1jb2xvcjogcmdiKDAlLCAzMCUsIDUwJSk7CisgICAgfQorICAgIC5saWdodGVuIHsKKyAg
ICAgICAgLXdlYmtpdC1maWx0ZXI6IGN1c3RvbShub25lIG1peCh1cmwoJy4uLy4uL3Jlc291cmNl
cy9taXgtY29sb3IuZnMnKSBsaWdodGVuIHNvdXJjZS1hdG9wKSwgbWl4X2NvbG9yIDAuMCAwLjYg
MC41IDEuMCk7CisgICAgfQorICAgIC5saWdodGVuLWV4cGVjdGVkIHsKKyAgICAgICAgLyoKKyAg
ICAgICAgICAgIExpZ2h0ZW46CisKKyAgICAgICAgICAgIENvID0gbWF4KENiLCBDcykKKworICAg
ICAgICAgICAgciA9IG1heCgxLjAsIDAuMCkgPSAxLjAKKyAgICAgICAgICAgIGcgPSBtYXgoMC4z
LCAwLjYpID0gMC42CisgICAgICAgICAgICBiID0gbWF4KDAuNSwgMC41KSA9IDAuNQorICAgICAg
ICAqLworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwgNjAlLCA1MCUpOworICAg
IH0KKyAgICAuZGlmZmVyZW5jZSB7CisgICAgICAgIC13ZWJraXQtZmlsdGVyOiBjdXN0b20obm9u
ZSBtaXgodXJsKCcuLi8uLi9yZXNvdXJjZXMvbWl4LWNvbG9yLmZzJykgZGlmZmVyZW5jZSBzb3Vy
Y2UtYXRvcCksIG1peF9jb2xvciAwLjAgMC42IDAuNSAxLjApOworICAgIH0KKyAgICAuZGlmZmVy
ZW5jZS1leHBlY3RlZCB7CisgICAgICAgIC8qCisgICAgICAgICAgICBEaWZmZXJlbmNlOgorCisg
ICAgICAgICAgICBDbyA9IGFicyhDYiAtIENzKQorCisgICAgICAgICAgICByID0gYWJzKDEuMCAt
IDAuMCkgPSAxLjAKKyAgICAgICAgICAgIGcgPSBhYnMoMC4zIC0gMC42KSA9IDAuMworICAgICAg
ICAgICAgYiA9IGFicygwLjUgLSAwLjUpID0gMC4wCisKKyAgICAgICAgICAgIFRoZSBlcnJvciBp
biB0aGUgY29sb3IgY2FsY3VsYXRpb24gcmVxdWlyZXMgdXMgdG8gdXNlIHRoZSA4LWJpdCB2YWx1
ZXMgZm9yOgorICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCUsIDMwJSwgMCUp
OworICAgICAgICAqLworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjU1LCA3NywgMSk7
CisgICAgfQorICAgIC5leGNsdXNpb24geworICAgICAgICAtd2Via2l0LWZpbHRlcjogY3VzdG9t
KG5vbmUgbWl4KHVybCgnLi4vLi4vcmVzb3VyY2VzL21peC1jb2xvci5mcycpIGV4Y2x1c2lvbiBz
b3VyY2UtYXRvcCksIG1peF9jb2xvciAwLjAgMC42IDAuNSAxLjApOworICAgIH0KKyAgICAuZXhj
bHVzaW9uLWV4cGVjdGVkIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIEV4Y2x1c2lvbjoKKwor
ICAgICAgICAgICAgQ28gPSBDYiArIENzIC0gMiAqIENiICogQ3MKKworICAgICAgICAgICAgciA9
IDEuMCArIDAuMCAtIDIuMCAqIDEuMCAqIDAuMCA9IDEuMAorICAgICAgICAgICAgZyA9IDAuMyAr
IDAuNiAtIDIuMCAqIDAuMyAqIDAuNiA9IDAuNTQKKyAgICAgICAgICAgIGIgPSAwLjUgKyAwLjUg
LSAyLjAgKiAwLjUgKiAwLjUgPSAwLjUKKworICAgICAgICAgICAgVGhlIGVycm9yIGluIHRoZSBj
b2xvciBjYWxjdWxhdGlvbiByZXF1aXJlcyB1cyB0byB1c2UgdGhlIDgtYml0IHZhbHVlcyBmb3I6
CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwgNTQlLCA1MCUpOyAKKyAg
ICAgICAgKi8KKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMTM4LCAxMjcpOwor
ICAgIH0KKyAgICAub3ZlcmxheSB7CisgICAgICAgIC13ZWJraXQtZmlsdGVyOiBjdXN0b20obm9u
ZSBtaXgodXJsKCcuLi8uLi9yZXNvdXJjZXMvbWl4LWNvbG9yLmZzJykgb3ZlcmxheSBzb3VyY2Ut
YXRvcCksIG1peF9jb2xvciAwLjAgMC42IDAuNSAxLjApOworICAgIH0KKyAgICAub3ZlcmxheS1l
eHBlY3RlZCB7CisgICAgICAgIC8qCisgICAgICAgICAgICBPdmVybGF5OgorCisgICAgICAgICAg
ICBDbyA9IEhhcmRMaWdodChDcywgQ2IpCisgICAgICAgICAgICAgICA9IGlmKENiIDw9IDAuNSkK
KyAgICAgICAgICAgICAgICAgICAgIE11bHRpcGx5KENzLCAyICogQ2IpCisgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIFNjcmVlbihDcywgMiAqIENiIC0gMSkKKyAg
ICAgICAgICAgICAgID0gaWYoQ2IgPD0gMC41KQorICAgICAgICAgICAgICAgICAgICAgQ3MgKiAo
MiAqIENiKQorICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICBDcyAr
ICgyICogQ2IgLSAxKSAtIChDcyAqICgyICogQ2IgLSAxKSkKKworICAgICAgICAgICAgciA9IDAg
KyAoMiAqIDEgLSAxKSAtICgwICogKDIgKiAxIC0gMSkpID0gMQorICAgICAgICAgICAgZyA9IDAu
NiAqICgyICogMC4zKSA9IDAuMzYKKyAgICAgICAgICAgIGIgPSAwLjUgKiAoMiAqIDAuNSkgPSAw
LjUKKworICAgICAgICAgICAgVGhlIGVycm9yIGluIHRoZSBjb2xvciBjYWxjdWxhdGlvbiByZXF1
aXJlcyB1cyB0byB1c2UgdGhlIDgtYml0IHZhbHVlcyBmb3I6CisgICAgICAgICAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiByZ2IoMTAwJSwgMzYlLCA1MCUpOworICAgICAgICAqLworICAgICAgICBiYWNr
Z3JvdW5kLWNvbG9yOiByZ2IoMjU1LCA5MSwgMTI4KTsKKyAgICB9CisgICAgLmNvbG9yLWRvZGdl
IHsKKyAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGN1c3RvbShub25lIG1peCh1cmwoJy4uLy4uL3Jl
c291cmNlcy9taXgtY29sb3IuZnMnKSBjb2xvci1kb2RnZSBzb3VyY2UtYXRvcCksIG1peF9jb2xv
ciAwLjAgMC42IDAuNSAxLjApOworICAgIH0KKyAgICAuY29sb3ItZG9kZ2UtZXhwZWN0ZWQgewor
ICAgICAgICAvKgorICAgICAgICAgICAgQ29sb3JEb2RnZToKKworICAgICAgICAgICAgQ28gPSBp
ZihDcyA8IDEpCisgICAgICAgICAgICAgICAgICAgICBtaW4oMSwgQ2IgLyAoMSAtIENzKSkKKyAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgMQorCisgICAgICAgICAg
ICByID0gbWluKDEsIDEgLyAoMSAtIDApKSA9IDEKKyAgICAgICAgICAgIGcgPSBtaW4oMSwgMC4z
IC8gKDEgLSAwLjYpKSA9IDAuNzUKKyAgICAgICAgICAgIGIgPSBtaW4oMSwgMC41IC8gKDEgLSAw
LjUpKSA9IDEKKworICAgICAgICAgICAgVGhlIGVycm9yIGluIHRoZSBjb2xvciBjYWxjdWxhdGlv
biByZXF1aXJlcyB1cyB0byB1c2UgdGhlIDgtYml0IHZhbHVlcyBmb3I6CisgICAgICAgICAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwgNzUlLCAxMDAlKTsKKyAgICAgICAgKi8KKyAgICAg
ICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI1NSwgMTkwLCAyNTUpOworICAgIH0KKyAgICAuY29s
b3ItYnVybiB7CisgICAgICAgIC13ZWJraXQtZmlsdGVyOiBjdXN0b20obm9uZSBtaXgodXJsKCcu
Li8uLi9yZXNvdXJjZXMvbWl4LWNvbG9yLmZzJykgY29sb3ItYnVybiBzb3VyY2UtYXRvcCksIG1p
eF9jb2xvciAwLjggMC44IDAuOCAxLjApOworICAgIH0KKyAgICAuY29sb3ItYnVybi1leHBlY3Rl
ZCB7CisgICAgICAgIC8qCisgICAgICAgICAgICBDb2xvckJ1cm46CisKKyAgICAgICAgICAgIENv
ID0gaWYoQ3MgPiAwKQorICAgICAgICAgICAgICAgICAgICAgMSAtIG1pbigxLCAoMSAtIENiKSAv
IENzKQorICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAwCisKKyAg
ICAgICAgICAgICByID0gMSAtIG1pbigxLCAoMSAtIDEpIC8gMC44KSA9IDEKKyAgICAgICAgICAg
ICBnID0gMSAtIG1pbigxLCAoMSAtIDAuMykgLyAwLjgpID0gMC4xMjUKKyAgICAgICAgICAgICBi
ID0gMSAtIG1pbigxLCAoMSAtIDAuNSkgLyAwLjgpID0gMC4zNzUKKworICAgICAgICAgICAgVGhl
IGVycm9yIGluIHRoZSBjb2xvciBjYWxjdWxhdGlvbiByZXF1aXJlcyB1cyB0byB1c2UgdGhlIDgt
Yml0IHZhbHVlcyBmb3I6CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMTAwJSwg
MTIuNSUsIDM3LjUlKTsKKyAgICAgICAgKi8KKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdi
KDI1NSwgMzEsIDk2KTsKKyAgICB9CisgICAgLmhhcmQtbGlnaHQgeworICAgICAgICAtd2Via2l0
LWZpbHRlcjogY3VzdG9tKG5vbmUgbWl4KHVybCgnLi4vLi4vcmVzb3VyY2VzL21peC1jb2xvci5m
cycpIGhhcmQtbGlnaHQgc291cmNlLWF0b3ApLCBtaXhfY29sb3IgMC4wIDAuNiAwLjUgMS4wKTsK
KyAgICB9CisgICAgLmhhcmQtbGlnaHQtZXhwZWN0ZWQgeworICAgICAgICAvKgorICAgICAgICAg
ICAgSGFyZExpZ2h0OgorCisgICAgICAgICAgICBDbyA9IGlmKENzIDw9IDAuNSkKKyAgICAgICAg
ICAgICAgICAgICAgIE11bHRpcGx5KENiLCAyICogQ3MpCisgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgIFNjcmVlbihDYiwgMiAqIENzIC0xKQorICAgICAgICAgICAg
ICAgPSBpZihDcyA8PSAwLjUpCisgICAgICAgICAgICAgICAgICAgICBDYiAqICgyICogQ3MpCisg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIENiICsgKDIgKiBDcyAt
IDEpIC0gKENiICogKDIgKiBDcyAtIDEpKQorCisgICAgICAgICAgICByID0gMSAqICgyICogMCkg
PSAwCisgICAgICAgICAgICBnID0gMC4zICsgKDIgKiAwLjYgLSAxKSAtICgwLjMgKiAoMiAqIDAu
NiAtIDEpKSA9IDAuNDQKKyAgICAgICAgICAgIGIgPSAwLjUgKiAoMiAqIDAuNSkgPSAwLjUKKyAg
ICAgICAgKi8KKyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAlLCA0NCUsIDUwJSk7Cisg
ICAgfQorICAgIC5zb2Z0LWxpZ2h0IHsKKyAgICAgICAgLXdlYmtpdC1maWx0ZXI6IGN1c3RvbShu
b25lIG1peCh1cmwoJy4uLy4uL3Jlc291cmNlcy9taXgtY29sb3IuZnMnKSBzb2Z0LWxpZ2h0IHNv
dXJjZS1hdG9wKSwgbWl4X2NvbG9yIDAuMCAwLjYgMC41IDEuMCk7CisgICAgfQorICAgIC5zb2Z0
LWxpZ2h0LWV4cGVjdGVkIHsKKyAgICAgICAgLyoKKyAgICAgICAgICAgIFNvZnRMaWdodDoKKwor
ICAgICAgICAgICAgQ28gPSBpZihDcyA8PSAwLjUpCisgICAgICAgICAgICAgICAgICAgICBDYiAt
ICgxIC0gMiAqIENzKSAqIENiICogKDEgLSBDYikKKyAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgQ2IgKyAoMiAqIENzIC0gMSkgKiAoRChDYikgLSBDYikKKworICAg
ICAgICAgICAgd2l0aAorCisgICAgICAgICAgICBEKENiKSA9IGlmKENiIDw9IDAuMjUpCisgICAg
ICAgICAgICAgICAgICAgICAgICAoMTYgKiBDYiAtIDEyKSAqIENiICsgNCkgKiBDYgorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzcXJ0KENiKQorCisg
ICAgICAgICAgICBELnIgPSBzcXJ0KDEpID0gMQorICAgICAgICAgICAgRC5nID0gc3FydCgwLjMp
ID0gMC41NDc3MjI1NTc1MDUxNjYKKyAgICAgICAgICAgIEQuYiA9IHNxcnQoMC41KSA9IDAuNzA3
MTA2NzgxMTg2NTQ4CisgICAgICAgICAgICByID0gMSAtICgxIC0gMiAqIDApICogMSAqICgxIC0g
MSkgPSAxCisgICAgICAgICAgICBnID0gMC4zICsgKDIgKiAwLjYgLSAxKSAqIChELmcgLSAwLjMp
ID0gMC4zNDk1NDQ1MTE1MDEwMzMKKyAgICAgICAgICAgIGIgPSAwLjUgLSAoMSAtIDIgKiAwLjUp
ICogMC41ICogKDEgLSAwLjUpID0gMC41CisKKyAgICAgICAgICAgIFRoZSBlcnJvciBpbiB0aGUg
Y29sb3IgY2FsY3VsYXRpb24gcmVxdWlyZXMgdXMgdG8gdXNlIHRoZSA4LWJpdCB2YWx1ZXMgZm9y
OgorICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMCUsIDM0Ljk1NDQ1MSUsIDUw
JSk7CisgICAgICAgICovCisgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDg5LCAx
MjgpOworICAgIH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBjbGFz
cz0icGFpci1vZi1zcXVhcmVzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZGVzdGluYXRpb24gbm9y
bWFsIj48L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0ibm9ybWFsLWV4cGVjdGVkIj48L2Rpdj4K
KyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwYWlyLW9mLXNxdWFyZXMiPgorICAgICAgICA8
ZGl2IGNsYXNzPSJkZXN0aW5hdGlvbiBtdWx0aXBseSI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xh
c3M9Im11bHRpcGx5LWV4cGVjdGVkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNz
PSJwYWlyLW9mLXNxdWFyZXMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJkZXN0aW5hdGlvbiBzY3Jl
ZW4iPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzY3JlZW4tZXhwZWN0ZWQiPjwvZGl2Pgor
ICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9InBhaXItb2Ytc3F1YXJlcyI+CisgICAgICAgIDxk
aXYgY2xhc3M9ImRlc3RpbmF0aW9uIGRhcmtlbiI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9
ImRhcmtlbi1leHBlY3RlZCI+PC9kaXY+CisgICAgPC9kaXY+CisgICAgPGRpdiBjbGFzcz0icGFp
ci1vZi1zcXVhcmVzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iZGVzdGluYXRpb24gbGlnaHRlbiI+
PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImxpZ2h0ZW4tZXhwZWN0ZWQiPjwvZGl2PgorICAg
IDwvZGl2PgorICAgIDxkaXYgY2xhc3M9InBhaXItb2Ytc3F1YXJlcyI+CisgICAgICAgIDxkaXYg
Y2xhc3M9ImRlc3RpbmF0aW9uIGRpZmZlcmVuY2UiPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNz
PSJkaWZmZXJlbmNlLWV4cGVjdGVkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNz
PSJwYWlyLW9mLXNxdWFyZXMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJkZXN0aW5hdGlvbiBleGNs
dXNpb24iPjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJleGNsdXNpb24tZXhwZWN0ZWQiPjwv
ZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9InBhaXItb2Ytc3F1YXJlcyI+CisgICAg
ICAgIDxkaXYgY2xhc3M9ImRlc3RpbmF0aW9uIG92ZXJsYXkiPjwvZGl2PgorICAgICAgICA8ZGl2
IGNsYXNzPSJvdmVybGF5LWV4cGVjdGVkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNs
YXNzPSJwYWlyLW9mLXNxdWFyZXMiPgorICAgICAgICA8ZGl2IGNsYXNzPSJkZXN0aW5hdGlvbiBj
b2xvci1kb2RnZSI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImNvbG9yLWRvZGdlLWV4cGVj
dGVkIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJwYWlyLW9mLXNxdWFyZXMi
PgorICAgICAgICA8ZGl2IGNsYXNzPSJkZXN0aW5hdGlvbiBjb2xvci1idXJuIj48L2Rpdj4KKyAg
ICAgICAgPGRpdiBjbGFzcz0iY29sb3ItYnVybi1leHBlY3RlZCI+PC9kaXY+CisgICAgPC9kaXY+
CisgICAgPGRpdiBjbGFzcz0icGFpci1vZi1zcXVhcmVzIj4KKyAgICAgICAgPGRpdiBjbGFzcz0i
ZGVzdGluYXRpb24gaGFyZC1saWdodCI+PC9kaXY+CisgICAgICAgIDxkaXYgY2xhc3M9ImhhcmQt
bGlnaHQtZXhwZWN0ZWQiPjwvZGl2PgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9InBhaXIt
b2Ytc3F1YXJlcyI+CisgICAgICAgIDxkaXYgY2xhc3M9ImRlc3RpbmF0aW9uIHNvZnQtbGlnaHQi
PjwvZGl2PgorICAgICAgICA8ZGl2IGNsYXNzPSJzb2Z0LWxpZ2h0LWV4cGVjdGVkIj48L2Rpdj4K
KyAgICA8L2Rpdj4KKyAgICA8IS0tCisgICAgICAgIElmIHlvdSBhZGQgbW9yZSBibGVuZCBtb2Rl
cyB0byB0aGlzIHBhZ2UsIGJlIGNhcmVmdWwgbm90IHRvIGV4Y2VlZCA2MDBweCBpbiAKKyAgICAg
ICAgaGVpZ2h0LCBzaW5jZSBEdW1wUmVuZGVyVHJlZSBjb21wYXJlcyA4MDB4NjAwIHNuYXBzaG90
cyBvZiB0aGlzIHBhZ2UuCisgICAgLS0+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC00LjgvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL3F0LTQuOC9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDliM2MwZTkuLmQ5MGY0MjEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0LTQuOC9UZXN0RXhwZWN0YXRpb25z
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0LTQuOC9UZXN0RXhwZWN0YXRpb25zCkBAIC02
OTMsNiArNjkzLDkgQEAgd2Via2l0Lm9yZy9iLzYwMzMgY3NzMy9maWx0ZXJzL3JlZ2lvbnMtZXhw
YW5kaW5nLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIFBhc3MgXQogd2Via2l0Lm9yZy9iLzYwMzMg
Y3NzMy9maWx0ZXJzL3NpbXBsZS1maWx0ZXItcmVuZGVyaW5nLmh0bWwgWyBJbWFnZU9ubHlGYWls
dXJlIFBhc3MgXQogd2Via2l0Lm9yZy9iLzYwMzMgc3ZnL2ZpbHRlcnMvY29sb3ItaW50ZXJwb2xh
dGlvbi1maWx0ZXJzLnN2ZyBbIE1pc3NpbmcgUGFzcyBdCiAKKyMgQ1NTIHNoYWRlcnMgb25seSB3
b3JrIGluIHF0LXdrMgorY3NzMy9maWx0ZXJzL2N1c3RvbQorCiAjIFVuZG9NYW5hZ2VyIGlzIG5v
dCB5ZXQgZW5hYmxlZC4KIHdlYmtpdC5vcmcvYi84NzkwOCBlZGl0aW5nL3VuZG9tYW5hZ2VyCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0LTUuMC13azEvVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0LTUuMC13azEvVGVzdEV4cGVjdGF0aW9ucwpp
bmRleCA0MDRiMzcyLi45NGU2NmRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9x
dC01LjAtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQt
NS4wLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC05LDYgKzksMTAgQEAgcGx1Z2lucy9mdWxsc2Ny
ZWVuLXBsdWdpbnMtZG9udC1yZWxvYWQuaHRtbAogIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NzMzNjYKIGZhc3QvZXZlbnRzL2RvbnQtbG9vc2UtbGFzdC1ldmVudC5o
dG1sCiAKKyMgQ1NTIHNoYWRlcnMgb25seSB3b3JrIGluIHF0LXdrMiBmb3Igbm93LgorIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNTMyCitjc3MzL2ZpbHRlcnMv
Y3VzdG9tCisKICMgVGhpcyBoYXMgYmVlbiBmaXhlZCBvbmx5IG9uIHF0LXdrMgogIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU2NjYKIGZhc3QvZXZlbnRzL2NsaWNr
LWNvdW50Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9UZXN0RXhwZWN0YXRpb25zCmluZGV4
IDE5NTFjOGUuLjFjMzUzNzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1Rl
c3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvVGVzdEV4cGVjdGF0
aW9ucwpAQCAtMzg1LDkgKzM4NSw2IEBAIGNzczMvZmlsdGVycy9maWx0ZXItcHJvcGVydHktcGFy
c2luZy5odG1sCiBjc3MzL2ZpbHRlcnMvZmlsdGVyLXByb3BlcnR5Lmh0bWwKIGNzczMvZmlsdGVy
cy9maWx0ZXItcmVwYWludC5odG1sCiAKLSMgQ1NTIHNoYWRlcnMKLWNzczMvZmlsdGVycy9jdXN0
b20KLQogIyBTdXBwb3J0IG11bHRpcGFydCByZXNwb25zZXMgaXMgbm90IGltcGxlbWVudGVkLgog
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcwNjAKICMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MDU5CkBAIC0xMTY5LDYgKzExNjYs
MTcgQEAgY3NzMy9maWx0ZXJzL2N1c3RvbS9maWx0ZXItcmVwYWludC1jdXN0b20tY2xpcHBlZC5o
dG1sCiBjc3MzL2ZpbHRlcnMvY3VzdG9tL2ZpbHRlci1yZXBhaW50LWN1c3RvbS1yb3RhdGVkLmh0
bWwKIGNzczMvZmlsdGVycy9jdXN0b20vZmlsdGVyLXJlcGFpbnQtY3VzdG9tLmh0bWwKIAorIyBU
aGUgZm9sbG93aW5nIHRlc3RzIG5lZWQgZnVydGhlciBpbnZlc3RpZ2F0aW9uOgorIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxNTMxCitjc3MzL2ZpbHRlcnMvY3Vz
dG9tL2ZpbHRlci1mYWxsYmFjay10by1zb2Z0d2FyZS5odG1sCitjc3MzL2ZpbHRlcnMvY3VzdG9t
L2NvbXBvc2l0ZWQvY3VzdG9tLWZpbHRlci1ibGVuZC1tb2Rlcy5odG1sCitjc3MzL2ZpbHRlcnMv
Y3VzdG9tL2N1c3RvbS1maWx0ZXItbm8tZWxlbWVudC10ZXh0dXJlLWFjY2Vzcy5odG1sCitjc3Mz
L2ZpbHRlcnMvY3VzdG9tL2VmZmVjdC1jdXN0b20tdHJhbnNmb3JtLXBhcmFtZXRlcnMuaHRtbAor
Y3NzMy9maWx0ZXJzL2N1c3RvbS9jdXN0b20tZmlsdGVyLWFuaW1hdGlvbi5odG1sCitjc3MzL2Zp
bHRlcnMvY3VzdG9tL2N1c3RvbS1maWx0ZXItdHJhbnNmb3Jtcy1hbmltYXRpb24uaHRtbAorY3Nz
My9maWx0ZXJzL2N1c3RvbS9jdXN0b20tZmlsdGVyLWJsZW5kLW1vZGVzLmh0bWwKK2NzczMvZmls
dGVycy9jdXN0b20vY3VzdG9tLWZpbHRlci1hcnJheS1ibGVuZGluZy5odG1sCisKICMgUmVmZXJl
bmNlRXJyb3I6IENhbid0IGZpbmQgdmFyaWFibGU6IE1lZGlhS2V5RXJyb3IKICMgaHR0cDovL3Ry
YWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTE0MDY3CiBmYXN0L2V2ZW50cy9jb25zdHJ1Y3RvcnMv
bWVkaWEta2V5LWV2ZW50LWNvbnN0cnVjdG9yLmh0bWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjOTVkYjY4Li43
YjVhMGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTItMTEtMDkgIEFsZXhhbmRy
dSBDaGljdWxpdGEgIDxhY2hpY3VAYWRvYmUuY29tPgorCisgICAgICAgIFtUZXhtYXBdW0NTUyBT
aGFkZXJzXSBFbmFibGUgQ1NTIFNoYWRlcnMgaW4gVGV4dHVyZU1hcHBlckdMCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODk5MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIGNvZGUgdGhhdCBkcmF3
cyB0aGUgQ3VzdG9tIEZpbHRlciBpbiB0aGUgVGV4dHVyZU1hcHBlckdMLiBBbHNvIGFkZGVkIAor
ICAgICAgICByZXF1aXJlZCBjb2RlIHRvIG1ha2UgYSBkZXB0aCBidWZmZXIgZm9yIGEgQml0bWFw
VGV4dHVyZUdMLgorCisgICAgICAgIE5vdGUgdGhhdCB0aGUgY29kZSBpcyBub3Qgb3B0aW1pemVk
IHlldCwgc28gaXQgd2lsbCBhbHdheXMgcmVjb21waWxlIHRoZSBzaGFkZXIuCisKKyAgICAgICAg
VGVzdDogY3NzMy9maWx0ZXJzL2N1c3RvbS9jb21wb3NpdGVkL2N1c3RvbS1maWx0ZXItYmxlbmQt
bW9kZXMuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJHTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRl
eHR1cmVHTCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcik6
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6
ZHJhd1VzaW5nQ3VzdG9tRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVH
TDo6YXBwbHlGaWx0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6aW5p
dGlhbGl6ZURlcHRoQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6
fkJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAoQml0bWFwVGV4dHVyZUdMKToKKwogMjAxMi0xMS0w
OSAgRXJpayBBcnZpZHNzb24gIDxhcnZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJFR1JFU1NJ
T04gKHIxMjUyMzkpOiBjbGFzc0xpc3QgY29udGFpbnMoKSBkb2Vzbid0IHdvcmsgYWZ0ZXIgZWxl
bWVudCB3YXMgbW92ZWQgZnJvbSBzdHJpY3QgbW9kZSBkb2N1bWVudCB0byBxdWlya3MgbW9kZSBk
b2N1bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCBhY2ZhZmI5Li5mN2JjY2E0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
VGV4dHVyZU1hcHBlckdMLmNwcApAQCAtMSw2ICsxLDcgQEAKIC8qCiAgQ29weXJpZ2h0IChDKSAy
MDEwIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogIENvcHly
aWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorIENvcHlyaWdodCAoQykgMjAxMiBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZAogCiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00Myw2ICs0NCwxNSBAQAogI2luY2x1
ZGUgPGNhaXJvLmg+CiAjZW5kaWYKIAorI2lmIEVOQUJMRShDU1NfU0hBREVSUykKKyNpbmNsdWRl
ICJDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJP
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCisjaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyUmVuZGVyZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtLmgiCisjaW5jbHVkZSAiVmFsaWRhdGVkQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisj
ZW5kaWYKKwogI2lmICFVU0UoVEVYTUFQX09QRU5HTF9FU18yKQogLy8gRklYTUU6IE1vdmUgdG8g
RXh0ZW5zaW9uczNELmguCiAjZGVmaW5lIEdMX1RFWFRVUkVfUkVDVEFOR0xFX0FSQiAweDg0RjUK
QEAgLTU2Niw2ICs1NzYsNyBAQCBCaXRtYXBUZXh0dXJlR0w6OkJpdG1hcFRleHR1cmVHTChUZXh0
dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBwZXIpCiAgICAgOiBtX2lkKDApCiAgICAgLCBtX2Zibygw
KQogICAgICwgbV9yYm8oMCkKKyAgICAsIG1fZGVwdGhCdWZmZXJPYmplY3QoMCkKICAgICAsIG1f
c2hvdWxkQ2xlYXIodHJ1ZSkKICAgICAsIG1fY29udGV4dDNEKHRleHR1cmVNYXBwZXItPmdyYXBo
aWNzQ29udGV4dDNEKCkpCiB7CkBAIC03NTUsNiArNzY2LDkgQEAgc3RhdGljIHVuc2lnbmVkIGdl
dFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0
eXBlKQogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNV
U1RPTToKKyNlbmRpZgogICAgICAgICByZXR1cm4gMTsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6QkxVUjoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CkBAIC04NTcs
NiArODcxLDUzIEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBGaWx0CiAgICAgfQogfQogCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKQorYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdVc2luZ0N1c3RvbUZp
bHRlcihCaXRtYXBUZXh0dXJlJiB0YXJnZXQsIGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIpCit7CisgICAgUmVmUHRyPEN1c3RvbUZpbHRl
clJlbmRlcmVyPiByZW5kZXJlcjsKKyAgICBzd2l0Y2ggKGZpbHRlci5nZXRPcGVyYXRpb25UeXBl
KCkpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NOiB7CisgICAgICAgIC8vIFdl
YktpdDIgcGlwZWxpbmUgaXMgdXNpbmcgdGhlIEN1c3RvbUZpbHRlck9wZXJhdGlvbiwgdGhhdCdz
IGJlY2F1c2Ugb2YgdGhlICJkZS1zZXJpYWxpemF0aW9uIiB0aGF0CisgICAgICAgIC8vIGhhcHBl
bnMgaW4gQ29vcmRpbmF0ZWRHcmFwaGljc0FyZ3VtZW50Q29kZXJzLgorICAgICAgICBjb25zdCBD
dXN0b21GaWx0ZXJPcGVyYXRpb24qIGN1c3RvbUZpbHRlciA9IHN0YXRpY19jYXN0PGNvbnN0IEN1
c3RvbUZpbHRlck9wZXJhdGlvbio+KCZmaWx0ZXIpOworICAgICAgICBSZWZQdHI8Q3VzdG9tRmls
dGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGN1c3RvbUZpbHRlci0+cHJvZ3JhbSgpOworICAgICAgICBy
ZW5kZXJlciA9IEN1c3RvbUZpbHRlclJlbmRlcmVyOjpjcmVhdGUobV9jb250ZXh0M0QsIHByb2dy
YW0tPnByb2dyYW1UeXBlKCksIGN1c3RvbUZpbHRlci0+cGFyYW1ldGVycygpLCAKKyAgICAgICAg
ICAgIGN1c3RvbUZpbHRlci0+bWVzaFJvd3MoKSwgY3VzdG9tRmlsdGVyLT5tZXNoQ29sdW1ucygp
LCBjdXN0b21GaWx0ZXItPm1lc2hCb3hUeXBlKCksIGN1c3RvbUZpbHRlci0+bWVzaFR5cGUoKSk7
CisgICAgICAgIC8vIEZJWE1FOiBPcHRpbWl6ZSB0aGlzIGJ5IGtlZXBpbmcgYSByZWZlcmVuY2Ug
dG8gdGhlIHByb2dyYW0gYWNyb3NzIGZyYW1lcy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTgwMQorICAgICAgICBSZWZQdHI8Q3VzdG9tRmls
dGVyQ29tcGlsZWRQcm9ncmFtPiBjb21waWxlZFByb2dyYW0gPSBDdXN0b21GaWx0ZXJDb21waWxl
ZFByb2dyYW06OmNyZWF0ZShtX2NvbnRleHQzRCwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyU3RyaW5n
KCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyU3RyaW5nKCksIHByb2dyYW0tPnByb2dyYW1UeXBl
KCkpOworICAgICAgICByZW5kZXJlci0+c2V0Q29tcGlsZWRQcm9ncmFtKGNvbXBpbGVkUHJvZ3Jh
bS5yZWxlYXNlKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlZBTElEQVRFRF9DVVNUT006IHsKKyAgICAgICAgLy8gV2ViS2l0MSB1c2VzIHRoZSBW
YWxpZGF0ZWRDdXN0b21GaWx0ZXJPcGVyYXRpb24uCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHBh
dGggaXMgbm90IHdvcmtpbmcgeWV0IGFzIEdyYXBoaWNzQ29udGV4dDNEIGZhaWxzIHRvIGluaXRp
YWxpemUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDE1MzIKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICghcmVuZGVyZXIgfHwgIXJlbmRlcmVyLT5wcmVwYXJlRm9yRHJhd2luZygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGljX2Nhc3Q8Qml0bWFwVGV4dHVyZUdMJj4odGFy
Z2V0KS5pbml0aWFsaXplRGVwdGhCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQzRC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7CisgICAgbV9jb250ZXh0M0QtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBI
QSk7CisgICAgbV9jb250ZXh0M0QtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVT
VCk7CisgICAgbV9jb250ZXh0M0QtPmRlcHRoRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6TEVTUyk7
CisgICAgbV9jb250ZXh0M0QtPmNsZWFyRGVwdGgoMSk7CisgICAgbV9jb250ZXh0M0QtPmRlcHRo
TWFzaygxKTsKKyAgICBtX2NvbnRleHQzRC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBt
X2NvbnRleHQzRC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCk7CisgICAgcmVuZGVyZXItPmRyYXco
c3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc291cmNlKS5pZCgpLCBzb3VyY2Uu
c2l6ZSgpKTsKKyAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfVEVTVCk7CisgICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKKyAgICBtX2NvbnRleHQzRC0+ZGVwdGhNYXNrKDApOworICAgIHJldHVybiB0cnVlOwor
fQorI2VuZGlmCisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0
bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAvLyBGb3Ig
c3RhbmRhcmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUgd2l0aG91
dCB0cmFuc2Zvcm1hdGlvbnMuCkBAIC04ODgsNiArOTQ5LDggQEAgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0
dXJlTWEKIAogICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBzb3VyY2UgPSB0aGlzOwogICAgIFJl
ZlB0cjxCaXRtYXBUZXh0dXJlPiB0YXJnZXQgPSB0ZXh0dXJlTWFwcGVyLT5hY3F1aXJlVGV4dHVy
ZUZyb21Qb29sKG1fdGV4dHVyZVNpemUpOworCisgICAgYm9vbCB1c2VDb250ZW50VGV4dHVyZSA9
IHRydWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVycy5hdChpKTsK
ICAgICAgICAgQVNTRVJUKGZpbHRlcik7CkBAIC04OTUsOCArOTU4LDIwIEBAIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBl
ciogdGV4dHVyZU1hCiAgICAgICAgIGludCBudW1QYXNzZXMgPSBnZXRQYXNzZXNSZXF1aXJlZEZv
ckZpbHRlcihmaWx0ZXItPmdldE9wZXJhdGlvblR5cGUoKSk7CiAgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgbnVtUGFzc2VzOyArK2opIHsKICAgICAgICAgICAgIHRleHR1cmVNYXBwZXJHTC0+
YmluZFN1cmZhY2UodGFyZ2V0LmdldCgpKTsKLSAgICAgICAgICAgIHRleHR1cmVNYXBwZXJHTC0+
ZHJhd0ZpbHRlcmVkKChpIHx8IGopID8gKnNvdXJjZSA6IGNvbnRlbnRUZXh0dXJlLCBjb250ZW50
VGV4dHVyZSwgKmZpbHRlciwgaik7CisgICAgICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlJiBz
b3VyY2VUZXh0dXJlID0gdXNlQ29udGVudFRleHR1cmUgPyBjb250ZW50VGV4dHVyZSA6ICpzb3Vy
Y2U7CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgICAgICAgICAgaWYgKGZpbHRlci0+Z2V0
T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6Q1VTVE9NKSB7CisgICAgICAgICAg
ICAgICAgaWYgKHRleHR1cmVNYXBwZXJHTC0+ZHJhd1VzaW5nQ3VzdG9tRmlsdGVyKCp0YXJnZXQs
IHNvdXJjZVRleHR1cmUsICpmaWx0ZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkg
c3dhcCBpZiB0aGUgZHJhdyB3YXMgc3VjY2Vzc2Z1bC4KKyAgICAgICAgICAgICAgICAgICAgc3Rk
Ojpzd2FwKHNvdXJjZSwgdGFyZ2V0KTsKKyAgICAgICAgICAgICAgICAgICAgdXNlQ29udGVudFRl
eHR1cmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIHRleHR1cmVNYXBwZXJHTC0+
ZHJhd0ZpbHRlcmVkKHNvdXJjZVRleHR1cmUsIGNvbnRlbnRUZXh0dXJlLCAqZmlsdGVyLCBqKTsK
ICAgICAgICAgICAgIHN0ZDo6c3dhcChzb3VyY2UsIHRhcmdldCk7CisgICAgICAgICAgICB1c2VD
b250ZW50VGV4dHVyZSA9IGZhbHNlOwogICAgICAgICB9CiAgICAgfQogCkBAIC05MzQsNiArMTAw
OSwxOCBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6aW5pdGlhbGl6ZVN0ZW5jaWwoKQogICAgIG1f
Y29udGV4dDNELT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKTsK
IH0KIAordm9pZCBCaXRtYXBUZXh0dXJlR0w6OmluaXRpYWxpemVEZXB0aEJ1ZmZlcigpCit7Cisg
ICAgaWYgKG1fZGVwdGhCdWZmZXJPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZGVw
dGhCdWZmZXJPYmplY3QgPSBtX2NvbnRleHQzRC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAg
bV9jb250ZXh0M0QtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9kZXB0aEJ1ZmZlck9iamVjdCk7CisgICAgbV9jb250ZXh0M0QtPnJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCBtX3RleHR1cmVTaXplLndpZHRoKCksIG1fdGV4dHVyZVNp
emUuaGVpZ2h0KCkpOworICAgIG1fY29udGV4dDNELT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgIG1fY29udGV4dDNELT5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoQnVmZmVyT2JqZWN0KTsKK30KKwogdm9pZCBCaXRtYXBUZXh0dXJlR0w6OmNsZWFy
SWZOZWVkZWQoKQogewogICAgIGlmICghbV9zaG91bGRDbGVhcikKQEAgLTk3OCw2ICsxMDY1LDkg
QEAgQml0bWFwVGV4dHVyZUdMOjp+Qml0bWFwVGV4dHVyZUdMKCkKIAogICAgIGlmIChtX3JibykK
ICAgICAgICAgbV9jb250ZXh0M0QtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX3Jibyk7CisKKyAgICBp
ZiAobV9kZXB0aEJ1ZmZlck9iamVjdCkKKyAgICAgICAgbV9jb250ZXh0M0QtPmRlbGV0ZVJlbmRl
cmJ1ZmZlcihtX2RlcHRoQnVmZmVyT2JqZWN0KTsKIH0KIAogYm9vbCBCaXRtYXBUZXh0dXJlR0w6
OmlzVmFsaWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCmluZGV4IGNiNTllNGYuLjk0NWRiNmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmgKQEAgLTcxLDYgKzcxLDkgQEAgcHVibGljOgogI2lmIEVOQUJM
RShDU1NfRklMVEVSUykKICAgICB2b2lkIGRyYXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJl
JiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29u
c3QgRmlsdGVyT3BlcmF0aW9uJiwgaW50IHBhc3MpOwogI2VuZGlmCisjaWYgRU5BQkxFKENTU19T
SEFERVJTKQorICAgIGJvb2wgZHJhd1VzaW5nQ3VzdG9tRmlsdGVyKEJpdG1hcFRleHR1cmUmIHRh
cmdldFRleHR1cmUsIGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEZp
bHRlck9wZXJhdGlvbiYpOworI2VuZGlmCiAKICAgICB2b2lkIHNldEVuYWJsZUVkZ2VEaXN0YW5j
ZUFudGlhbGlhc2luZyhib29sIGVuYWJsZWQpIHsgbV9lbmFibGVFZGdlRGlzdGFuY2VBbnRpYWxp
YXNpbmcgPSBlbmFibGVkOyB9CiAKQEAgLTEzNSw2ICsxMzgsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpZFJlc2V0KCk7CiAgICAgdm9pZCBiaW5kKFRleHR1cmVNYXBwZXJHTCopOwog
ICAgIHZvaWQgaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKKyAgICB2b2lkIGluaXRpYWxpemVEZXB0aEJ1
ZmZlcigpOwogICAgIH5CaXRtYXBUZXh0dXJlR0woKTsKICAgICB2aXJ0dWFsIHVpbnQzMl90IGlk
KCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQogICAgIHVpbnQzMl90IHRleHR1cmVUYXJnZXQoKSBj
b25zdCB7IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDsgfQpAQCAtMTUzLDYg
KzE1Nyw3IEBAIHByaXZhdGU6CiAgICAgSW50UmVjdCBtX2RpcnR5UmVjdDsKICAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fZmJvOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9yYm87CisgICAgUGxhdGZv
cm0zRE9iamVjdCBtX2RlcHRoQnVmZmVyT2JqZWN0OwogICAgIGJvb2wgbV9zaG91bGRDbGVhcjsK
ICAgICBUZXh0dXJlTWFwcGVyR0w6OkNsaXBTdGFjayBtX2NsaXBTdGFjazsKICAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwo=
</data>
<flag name="review"
          id="188051"
          type_id="1"
          status="+"
          setter="noam"
    />
          </attachment>
      

    </bug>

</bugzilla>