<?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>45812</bug_id>
          
          <creation_ts>2010-09-15 01:36:12 -0700</creation_ts>
          <short_desc>Filter builder should be able to follow the filter object dependencies</short_desc>
          <delta_ts>2014-05-12 05:54:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68469</blocked>
    
    <blocked>26389</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Zoltan Herczeg">zherczeg</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>krit</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>279461</commentid>
    <comment_count>0</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-15 01:36:12 -0700</bug_when>
    <thetext>This might be a complex patch, so the name of the bug can be changed later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279462</commentid>
    <comment_count>1</comment_count>
      <attachid>67655</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-15 01:36:39 -0700</bug_when>
    <thetext>Created attachment 67655
Draft patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279493</commentid>
    <comment_count>2</comment_count>
      <attachid>67655</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-09-15 03:38:51 -0700</bug_when>
    <thetext>Comment on attachment 67655
Draft patch

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

&gt; WebCore/rendering/RenderSVGResourceFilterPrimitive.h:39
&gt; +    RenderSVGResourceFilterPrimitive(SVGFilterPrimitiveStandardAttributes* filterPrimitiveElement);
You should omit the argument name here, it&apos;s redundant.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:77
&gt; +        return effect;
I&apos;d prefer a return 0 here.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:85
&gt; +        if (m_lastEffectReference1.get() != effect)
No need for the .get() here.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:91
&gt; +    if (m_lastEffectReference1.get() == effect || m_lastEffectReference2.get() == effect)
Ditto. RefPtr defines operator*.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:95
&gt; +        if (m_lastEffectFurtherReferences[i].get() == effect)
Ditto.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:105
&gt; +    ASSERT(m_effectReferences.find(effect) == m_effectReferences.end());
ASSERT(!m_effectReferences.contains(effect)): ?

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:108
&gt; +    if (m_lastEffectReference1.get())
You can omit the .get()

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:110
&gt; +    if (m_lastEffectReference2.get())
Ditto.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:112
&gt; +    if (m_lastEffectFurtherReferences.size()) {
Use !isEmpty()

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:128
&gt; +    ASSERT(!m_lastEffectFurtherReferences.size());
ASSERT(m_last..isEmpty())

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:46
&gt;          FilterEffect* getEffectById(const AtomicString&amp; id) const;
The id parameter is redundant.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:48
&gt; +        FilterEffect* getAndRecordEffectById(const AtomicString&amp; id);
Ditto.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:55
&gt; +            ASSERT(m_effectReferences.find(effect) != m_effectReferences.end());
ASSERT(m_effectReferences.contains(...)

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:67
&gt; +            ASSERT(m_effectReferences.find(effect) != m_effectReferences.end());
ASSERT(m_effectReferences.contains(...)

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:85
&gt; +        RefPtr&lt;FilterEffect&gt; m_lastEffectReference1;
It&apos;s not immediately clear to me, why those have to be refcounted at all.

I&apos;ll leave the actual review to Dirk, just wanted to share some notes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279527</commentid>
    <comment_count>3</comment_count>
      <attachid>67671</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-15 06:47:27 -0700</bug_when>
    <thetext>Created attachment 67671
Draft patch 2

Based on discussion on #webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>279974</commentid>
    <comment_count>4</comment_count>
      <attachid>67671</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-16 01:31:29 -0700</bug_when>
    <thetext>Comment on attachment 67671
Draft patch 2

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

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:102
&gt; +void SVGFilterBuilder::appendEffectToEffectReferences(RefPtr&lt;FilterEffect&gt; effect)
&gt; +{
&gt; +    // The effect must be a newly created filter effect.
&gt; +    ASSERT(!m_effectReferences.contains(effect));
&gt; +    m_effectReferences.add(effect, EffectReferences());
&gt; +
&gt; +    int size = m_recordedEffects.size();
&gt; +    for (int i = 0; i &lt; size; ++i) {
&gt; +        // Since targetEffect is a newly created object, it cannot already be added to the list.
&gt; +        ASSERT(m_effectReferences.contains(m_recordedEffects[i]));
&gt; +        m_effectReferences.find(m_recordedEffects[i])-&gt;second.append(effect);
&gt; +    }
&gt; +    m_recordedEffects.clear();
&gt; +}
&gt; +

I won&apos;t review the code like Niko right now. I&apos;m more thinking about the process itself.

At the moment you record every request of filter effects in m_recordedEffects. Create the new effect and add the new created effect to the requester list of the requested effects afterwards (compilcated phrasing, I know ;-)).

I wounder if it won&apos;t be easier and more understandable, if we skip the recording of the requested effects and ask the new created effect directly for its requested effects.
This may cause us to let effects store their input effects in a Vector. Not sure if this is a noticeable performance or memory waste. But it could help to make the layout of primitives much easier. When you look at the current FilterEffect code, we have a lot of functions to determine the subregion, just because filter effects have different counts of input effects. We could simplify the code a lot if we allways use a vector for input effects. This would also mean that we can get rid of a lot of code in the FE* objects. IIRC Firefox is going the same way.

What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>281164</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-18 12:24:39 -0700</bug_when>
    <thetext>I added a patch for the input effect Vector to bug 45612.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282866</commentid>
    <comment_count>6</comment_count>
      <attachid>68354</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-22 02:51:31 -0700</bug_when>
    <thetext>Created attachment 68354
Draft patch 3

Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282879</commentid>
    <comment_count>7</comment_count>
      <attachid>68357</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-22 04:50:45 -0700</bug_when>
    <thetext>Created attachment 68357
Draft patch 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282885</commentid>
    <comment_count>8</comment_count>
      <attachid>68357</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-22 05:31:27 -0700</bug_when>
    <thetext>Comment on attachment 68357
Draft patch 4

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

Please add a ChangeLog with detailed descriptions next time. The patch looks great and I&apos;m looking forward to see the next patch.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:89
&gt; +void SVGFilterBuilder::appendEffectToEffectReferences(RefPtr&lt;FilterEffect&gt; effect)
&gt; +{
&gt; +    // The effect must be a newly created filter effect.
&gt; +    ASSERT(!m_effectReferences.contains(effect));
&gt; +    m_effectReferences.add(effect, FilterEffectVector());
&gt; +
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();
&gt; +    HashSet&lt;RefPtr&lt;FilterEffect&gt; &gt; seenEffects;
&gt; +    int size = inputEffects.size();
&gt; +
&gt; +    for (int i = 0; i &lt; size; ++i) {
&gt; +        // Since targetEffect is a newly created object, it cannot already be added to the list.
&gt; +        ASSERT(m_effectReferences.contains(inputEffects[i]));
&gt; +        if (seenEffects.contains(inputEffects[i]))
&gt; +          continue;
&gt; +        m_effectReferences.find(inputEffects[i])-&gt;second.append(effect);
&gt; +        seenEffects.add(inputEffects[i]);
&gt; +    }
&gt; +}

I&apos;m not sure why you want to have a FilterEffectVector instead of a Set? At the moment you create a set for every call of  appendEffectToEffectReferences. Wouldn&apos;t it be more useful to put a set into m_effectReferences:
HashMap&lt;RefPtr&lt;FilterEffect&gt;, Set&lt;RefPtr&lt;FilterEffect&gt; &gt; &gt; ? So you just need check the set, if the effect is already in there: contains(effect), and it if not. Niko already asked it, do we need the RefPtr&apos;s? Can&apos;t we just store the pointer?

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:51
&gt; +        inline FilterEffectVector&amp; getReferences(FilterEffect* effect)
&gt; +        {
&gt; +            // Only allowed for effects belongs to this builder.
&gt; +            ASSERT(m_effectReferences.contains(effect));
&gt; +            return m_effectReferences.find(effect)-&gt;second;
&gt; +        }

Who is using that? Also this one liner don&apos;t need to be in an extra function.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:63
&gt; +        inline void addBuiltinEffects()
&gt; +        {
&gt; +            HashMap&lt;AtomicString, RefPtr&lt;FilterEffect&gt; &gt;::iterator end = m_builtinEffects.end();
&gt; +            for (HashMap&lt;AtomicString, RefPtr&lt;FilterEffect&gt; &gt;::iterator iterator = m_builtinEffects.begin(); iterator != end; ++iterator)
&gt; +                 m_effectReferences.add(iterator-&gt;second, FilterEffectVector());
&gt; +        }

You should call this during initialization. Not sure if we get a leak if we leaf it in on clearEffects and call the DTor of FilterBuilder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282909</commentid>
    <comment_count>9</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-22 07:06:13 -0700</bug_when>
    <thetext>&gt; &gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:89
&gt; &gt; +void SVGFilterBuilder::appendEffectToEffectReferences(RefPtr&lt;FilterEffect&gt; effect)
&gt; &gt; +{
&gt; &gt; +    // The effect must be a newly created filter effect.
&gt; &gt; +    ASSERT(!m_effectReferences.contains(effect));
&gt; &gt; +    m_effectReferences.add(effect, FilterEffectVector());
&gt; &gt; +
&gt; &gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();
&gt; &gt; +    HashSet&lt;RefPtr&lt;FilterEffect&gt; &gt; seenEffects;
&gt; &gt; +    int size = inputEffects.size();
&gt; &gt; +
&gt; &gt; +    for (int i = 0; i &lt; size; ++i) {
&gt; &gt; +        // Since targetEffect is a newly created object, it cannot already be added to the list.
&gt; &gt; +        ASSERT(m_effectReferences.contains(inputEffects[i]));
&gt; &gt; +        if (seenEffects.contains(inputEffects[i]))
&gt; &gt; +          continue;
&gt; &gt; +        m_effectReferences.find(inputEffects[i])-&gt;second.append(effect);
&gt; &gt; +        seenEffects.add(inputEffects[i]);
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; I&apos;m not sure why you want to have a FilterEffectVector instead of a Set? At the moment you create a set for every call of  appendEffectToEffectReferences. Wouldn&apos;t it be more useful to put a set into m_effectReferences:
&gt; HashMap&lt;RefPtr&lt;FilterEffect&gt;, Set&lt;RefPtr&lt;FilterEffect&gt; &gt; &gt; ? So you just need check the set, if the effect is already in there: contains(effect), and it if not. Niko already asked it, do we need the RefPtr&apos;s? Can&apos;t we just store the pointer?

If we would use a &apos;set&apos;, we would also create a new &apos;set&apos; for each effect:
+    m_effectReferences.add(effect, FilterEffectVector());
would be
+    m_effectReferences.add(effect, set());

Using a vector here is a speed optimization, since iterating through a vector (needed by the &apos;invalidation&apos; process) is much cheaper than iterating through a set. Moreover, we only append items during initialization, but invalidation will use the iteration many times.

&gt; &gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:51
&gt; &gt; +        inline FilterEffectVector&amp; getReferences(FilterEffect* effect)
&gt; &gt; +        {
&gt; &gt; +            // Only allowed for effects belongs to this builder.
&gt; &gt; +            ASSERT(m_effectReferences.contains(effect));
&gt; &gt; +            return m_effectReferences.find(effect)-&gt;second;
&gt; &gt; +        }
&gt; 
&gt; Who is using that? Also this one liner don&apos;t need to be in an extra function.

Nobody at the moment, but it will be needed in the future, I am sure.

&gt; &gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:63
&gt; &gt; +        inline void addBuiltinEffects()
&gt; &gt; +        {
&gt; &gt; +            HashMap&lt;AtomicString, RefPtr&lt;FilterEffect&gt; &gt;::iterator end = m_builtinEffects.end();
&gt; &gt; +            for (HashMap&lt;AtomicString, RefPtr&lt;FilterEffect&gt; &gt;::iterator iterator = m_builtinEffects.begin(); iterator != end; ++iterator)
&gt; &gt; +                 m_effectReferences.add(iterator-&gt;second, FilterEffectVector());
&gt; &gt; +        }
&gt; 
&gt; You should call this during initialization. Not sure if we get a leak if we leaf it in on clearEffects and call the DTor of FilterBuilder.

It is called from the constructor: 

SVGFilterBuilder::SVGFilterBuilder()
{
    m_builtinEffects.add(SourceGraphic::effectName(), SourceGraphic::create());
    m_builtinEffects.add(SourceAlpha::effectName(), SourceAlpha::create());
    addBuiltinEffects();
}

What do you mean by &apos;initialization&apos;?

I am agree with the other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283542</commentid>
    <comment_count>10</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-23 00:31:16 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; &gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:89
&gt; &gt; &gt; +void SVGFilterBuilder::appendEffectToEffectReferences(RefPtr&lt;FilterEffect&gt; effect)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    // The effect must be a newly created filter effect.
&gt; &gt; &gt; +    ASSERT(!m_effectReferences.contains(effect));
&gt; &gt; &gt; +    m_effectReferences.add(effect, FilterEffectVector());
&gt; &gt; &gt; +
&gt; &gt; &gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();
&gt; &gt; &gt; +    HashSet&lt;RefPtr&lt;FilterEffect&gt; &gt; seenEffects;
&gt; &gt; &gt; +    int size = inputEffects.size();
&gt; &gt; &gt; +
&gt; &gt; &gt; +    for (int i = 0; i &lt; size; ++i) {
&gt; &gt; &gt; +        // Since targetEffect is a newly created object, it cannot already be added to the list.
&gt; &gt; &gt; +        ASSERT(m_effectReferences.contains(inputEffects[i]));
&gt; &gt; &gt; +        if (seenEffects.contains(inputEffects[i]))
&gt; &gt; &gt; +          continue;
&gt; &gt; &gt; +        m_effectReferences.find(inputEffects[i])-&gt;second.append(effect);
&gt; &gt; &gt; +        seenEffects.add(inputEffects[i]);
&gt; &gt; &gt; +    }
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; I&apos;m not sure why you want to have a FilterEffectVector instead of a Set? At the moment you create a set for every call of  appendEffectToEffectReferences. Wouldn&apos;t it be more useful to put a set into m_effectReferences:
&gt; &gt; HashMap&lt;RefPtr&lt;FilterEffect&gt;, Set&lt;RefPtr&lt;FilterEffect&gt; &gt; &gt; ? So you just need check the set, if the effect is already in there: contains(effect), and it if not. Niko already asked it, do we need the RefPtr&apos;s? Can&apos;t we just store the pointer?
&gt; 
&gt; If we would use a &apos;set&apos;, we would also create a new &apos;set&apos; for each effect:
&gt; +    m_effectReferences.add(effect, FilterEffectVector());
&gt; would be
&gt; +    m_effectReferences.add(effect, set());
Your&apos;re doing it anyway two lines later. And it doesn&apos;t matter if you check it with you temporary set or with the set of EffectReferences. Or do I get something wrong? Later you want to update the ReferenceList and it makes no sense to write your own iterator for the vector, if you could just call contains(..)

&gt; 
&gt; Using a vector here is a speed optimization, since iterating through a vector (needed by the &apos;invalidation&apos; process) is much cheaper than iterating through a set. Moreover, we only append items during initialization, but invalidation will use the iteration many times.
&gt; 
&gt; &gt; &gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:51
&gt; &gt; &gt; +        inline FilterEffectVector&amp; getReferences(FilterEffect* effect)
&gt; &gt; &gt; +        {
&gt; &gt; &gt; +            // Only allowed for effects belongs to this builder.
&gt; &gt; &gt; +            ASSERT(m_effectReferences.contains(effect));
&gt; &gt; &gt; +            return m_effectReferences.find(effect)-&gt;second;
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; Who is using that? Also this one liner don&apos;t need to be in an extra function.
&gt; 
&gt; Nobody at the moment, but it will be needed in the future, I am sure.
Please add it at this time when we need it.

&gt; 
&gt; &gt; &gt; WebCore/svg/graphics/filters/SVGFilterBuilder.h:63
&gt; &gt; &gt; +        inline void addBuiltinEffects()
&gt; &gt; &gt; +        {
&gt; &gt; &gt; +            HashMap&lt;AtomicString, RefPtr&lt;FilterEffect&gt; &gt;::iterator end = m_builtinEffects.end();
&gt; &gt; &gt; +            for (HashMap&lt;AtomicString, RefPtr&lt;FilterEffect&gt; &gt;::iterator iterator = m_builtinEffects.begin(); iterator != end; ++iterator)
&gt; &gt; &gt; +                 m_effectReferences.add(iterator-&gt;second, FilterEffectVector());
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; You should call this during initialization. Not sure if we get a leak if we leaf it in on clearEffects and call the DTor of FilterBuilder.
&gt; 
&gt; It is called from the constructor: 
&gt; 
&gt; SVGFilterBuilder::SVGFilterBuilder()
&gt; {
&gt;     m_builtinEffects.add(SourceGraphic::effectName(), SourceGraphic::create());
&gt;     m_builtinEffects.add(SourceAlpha::effectName(), SourceAlpha::create());
&gt;     addBuiltinEffects();
&gt; }
&gt; 
&gt; What do you mean by &apos;initialization&apos;?
Exactly that :-) But we call clearFilterBuilder in the destructor. And clearFilterBuilder calls your function that adds the pseudo effects. That needs to change somehow. Not sure why we call clear on RenderSVGResourceFilter right after creating the Builder. Maybe that should be removed as well.

&gt; 
&gt; I am agree with the other things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284352</commentid>
    <comment_count>11</comment_count>
      <attachid>68673</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-24 06:59:11 -0700</bug_when>
    <thetext>Created attachment 68673
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284397</commentid>
    <comment_count>12</comment_count>
      <attachid>68673</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-24 08:37:09 -0700</bug_when>
    <thetext>Comment on attachment 68673
patch

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

Otherwise looks great!

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:82
&gt; +    m_effectReferences.add(effect, FilterEffectSet());
&gt; +
&gt; +    FilterEffectVector&amp; inputEffects = effect-&gt;inputEffects();
&gt; +    int size = inputEffects.size();
&gt; +
&gt; +    // It is not possible to add the same value to a set twice.
&gt; +    for (int i = 0; i &lt; size; ++i)
&gt; +        getEffectReferences(effect.get()).add(inputEffects[i].get());

Please use numberOfInputEffects and inputEffect(unsigned) instead of the EffectVector. Store the pointer effect.get() in a own variable.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:90
&gt; +    addBuiltinEffects();

Please remove this from clearEffects().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285391</commentid>
    <comment_count>13</comment_count>
      <attachid>68896</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-27 03:42:13 -0700</bug_when>
    <thetext>Created attachment 68896
Patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285398</commentid>
    <comment_count>14</comment_count>
      <attachid>68896</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-09-27 04:17:01 -0700</bug_when>
    <thetext>Comment on attachment 68896
Patch 2

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

Great ptach! Please change the two issues above before landing. r=me.

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:78
&gt; +    int numberOfInputEffects = effect-&gt;inputEffects().size();

should be unsigned

&gt; WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:81
&gt; +    for (int i = 0; i &lt; numberOfInputEffects; ++i)

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286831</commentid>
    <comment_count>15</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-09-29 06:46:26 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/68385
Closing bug</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67655</attachid>
            <date>2010-09-15 01:36:39 -0700</date>
            <delta_ts>2010-09-15 06:47:27 -0700</delta_ts>
            <desc>Draft patch</desc>
            <filename>0001-filter-render.patch</filename>
            <type>text/plain</type>
            <size>17066</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA3ZmQ5ZmZlYjQxZTliZWVhOGJjM2EzYjdkNThlZDdhYWExMmQ5OGRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDE1IFNlcCAyMDEwIDEwOjIyOjM4ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlbmRlcgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAgICAgICB8ICAgIDEgKwogLi4uL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oICAgfCAgICA1ICstCiBXZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxl
bWVudC5jcHAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIFdlYkNvcmUvc3ZnL1NWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50LmNwcCAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwICAgICAgfCAgICAyICstCiBXZWJDb3JlL3N2
Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwICAgICAgICAgICAgICB8ICAgIDQgKy0KIFdlYkNv
cmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcCAgICAgICAgIHwgICAgMiArLQog
V2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcCAgICAgICAgfCAgICAy
ICstCiBXZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwICAgICAgICB8
ICAgIDQgKy0KIFdlYkNvcmUvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgICAgICAg
ICAgIHwgICAgMiArLQogV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwICAgICAgICAg
ICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNw
cCAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5j
cHAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudC5jcHAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3N2Zy9TVkdGRVRpbGVF
bGVtZW50LmNwcCAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAgIHwgICA1NSArKysrKysrKysrKysrKysr
KysrKwogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggICAg
fCAgIDM1ICsrKysrKysrKysrKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDEwOSBpbnNlcnRpb25zKCsp
LCAxOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
VkdSZXNvdXJjZUZpbHRlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAKaW5kZXggOTgyMzc1ZS4uNjk2YTE1OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtMTA5LDYgKzEwOSw3IEBAIFBhc3NS
ZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJp
bWl0aXZlcygpCiAgICAgICAgICAgICBidWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGJ1aWxkZXItPmFzc2lnblJlY29yZGVk
RWZmZWN0c1RvKGVmZmVjdCk7CiAgICAgICAgIGVmZmVjdEVsZW1lbnQtPnNldFN0YW5kYXJkQXR0
cmlidXRlcyhwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUsIGVmZmVjdC5nZXQoKSk7CiAgICAgICAg
IGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LT5yZXN1bHQoKSwgZWZmZWN0KTsKICAgICB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRp
dmUuaAppbmRleCA5NmUyYzVlLi40YjIzNzM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKQEAgLTM2LDEwICszNiwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlIDogcHVibGljIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciB7CiBwdWJsaWM6Ci0gICAg
IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyogZmlsdGVyUHJpbWl0aXZlRWxlbWVudCk7CisgICAgUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmUoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
KiBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KTsKIAogcHJpdmF0ZToKLSAgICAgdmlydHVhbCBib29s
IGlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Cisg
ICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIlJlbmRl
clNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlIjsgfQorICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jl
c291cmNlRmlsdGVyUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmluZGV4IDQ1MWI3
ZDEuLjI3YjMzZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNw
cAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTgxLDggKzgxLDgg
QEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFs
aWZpZWROYW1lJiBhdHRyTmFtZSkKIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFQmxl
bmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAg
IEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEo
KSk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMigpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVjdCogaW5wdXQyID0g
ZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChpbjIoKSk7CiAKICAgICBpZiAo
IWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCA3ZjQ5NmJjLi5lOTQ0OWJiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcv
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZvaWQgU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgYXR0ck5hbWUpCiAKIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNvbG9yTWF0cml4
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKIHsKLSAgICBG
aWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OworICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3Jk
RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5j
cHAgYi9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAKaW5kZXgg
YTk5ZTc0Yy4uZDBiN2JhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb25lbnRU
cmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50LmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dAog
CiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZm
ZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBG
aWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5
SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAgYi9XZWJDb3Jl
L3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IGY2NTg2MzIuLjAzODhkNGMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtMTA0LDggKzEwNCw4IEBAIHZv
aWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21w
b3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewot
ICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChp
bjEoKSk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMigpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVjdCogaW5wdXQy
ID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChpbjIoKSk7CiAgICAgCiAg
ICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2
Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggOTQzMmEwMC4uMmQ4YTJjYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApAQCAtMTA1LDcg
KzEwNSw3IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldEtlcm5lbFVuaXRM
ZW5ndGgoZmxvYXQsIGZsb2F0KQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb252
b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIp
CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAg
IHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAK
aW5kZXggNDM0OWYyNy4uZmM4N2VhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVEaWZm
dXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0
ck4KIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKIHsKLSAgICBGaWx0ZXJF
ZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAg
IEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0
QnlJZChpbjEoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJldHVybiAwOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCBi
L1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5kZXggMDEzZWNh
NS4uMGQyYTQ5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQu
Y3BwCkBAIC05Niw4ICs5Niw4IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojpz
eW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOCiAKIFBhc3NSZWZQ
dHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBGaWx0ZXJFZmZlY3Qq
IGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOworICAgIEZpbHRl
ckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChp
bjEoKSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5nZXRBbmRS
ZWNvcmRFZmZlY3RCeUlkKGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQy
KQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
Y3BwCmluZGV4IGY2NmZhOTAuLjI2YTU5ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZF
R2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50LmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZQog
CiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpidWls
ZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAgIEZpbHRlckVmZmVjdCog
aW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgRmlsdGVy
RWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRBbmRSZWNvcmRFZmZlY3RCeUlkKGlu
MSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFTWVy
Z2VFbGVtZW50LmNwcAppbmRleCA2MjU0YjI0Li5jNzcxZTE0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVNZXJnZUVs
ZW1lbnQuY3BwCkBAIC00Miw3ICs0Miw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdG
RU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlCiAgICAg
VmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbWVyZ2VJbnB1dHM7CiAgICAgZm9yIChOb2Rl
KiBuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CiAgICAg
ICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZU1lcmdlTm9kZVRhZykpIHsKLSAgICAg
ICAgICAgIEZpbHRlckVmZmVjdCogbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCo+KG4pLT5pbjEoKSk7Cisg
ICAgICAgICAgICBGaWx0ZXJFZmZlY3QqIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVpbGRlci0+Z2V0
QW5kUmVjb3JkRWZmZWN0QnlJZChzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVsZW1lbnQqPihu
KS0+aW4xKCkpOwogICAgICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChtZXJnZUVmZmVjdCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50LmNwcCBiL1dl
YkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IGMzZGI4NDQuLjhiOGMz
MDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC05MSw3ICs5MSw3
IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxk
ZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZl
Y3RCeUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXIt
PmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIGZsb2F0IHhSYWRpdXMgPSByYWRp
dXNYKCk7CiAgICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHAKaW5kZXggNThiNGE2YS4uYjhmOGJjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9z
dmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVs
ZW1lbnQuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpzeW5j
aHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogCiBQYXNzUmVm
UHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWls
ZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVy
QnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRBbmRSZWNvcmRFZmZlY3RCeUlkKGluMSgpKTsKIAogICAgIGlm
ICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggZDA3YzZjZS4uMzNkNjFiZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKysrIGIvV2ViQ29y
ZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTExMCw3ICsxMTAsNyBA
QCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Ojpm
aW5kTGlnaHRzKCkgY29uc3QKIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIp
CiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RC
eUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdl
dEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAg
ICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQu
Y3BwIGIvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXggNDM3OWI5Ni4uMzg1
Y2E1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKKysrIGIv
V2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKQEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBT
VkdGRVRpbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUm
IGF0dHJOYW1lKQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6
YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKIHsKLSAgICBGaWx0ZXJFZmZl
Y3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIEZp
bHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJ
ZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA1
YTZkMGI5Li4zZDU3ZjBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMv
U1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTM2LDYgKzM2LDcgQEAgU1ZHRmlsdGVyQnVpbGRlcjo6
U1ZHRmlsdGVyQnVpbGRlcigpCiB7CiAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3Jh
cGhpYzo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSk7CiAgICAgbV9idWls
dGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNy
ZWF0ZSgpKTsKKyAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCiB2b2lkIFNWR0ZpbHRlckJ1
aWxkZXI6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBl
ZmZlY3QpCkBAIC02NywxMCArNjgsNjQgQEAgRmlsdGVyRWZmZWN0KiBTVkdGaWx0ZXJCdWlsZGVy
OjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CiAgICAgcmV0dXJu
IG1fbmFtZWRFZmZlY3RzLmdldChpZCkuZ2V0KCk7CiB9CiAKK0ZpbHRlckVmZmVjdCogU1ZHRmls
dGVyQnVpbGRlcjo6Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlk
KQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdGVjdHMgZnJvbSBkb3VibGUgYWRkaXRpb24g
KHdoaWNoIGlzIHZhbGlkKQorICAgIEZpbHRlckVmZmVjdCogZWZmZWN0ID0gZ2V0RWZmZWN0QnlJ
ZChpZCk7CisKKyAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgcmV0dXJuIGVmZmVjdDsKKworICAg
IGlmICghbV9sYXN0RWZmZWN0UmVmZXJlbmNlMSkgeworICAgICAgICBtX2xhc3RFZmZlY3RSZWZl
cmVuY2UxID0gZWZmZWN0OworICAgICAgICByZXR1cm4gZWZmZWN0OworICAgIH0KKworICAgIGlm
ICghbV9sYXN0RWZmZWN0UmVmZXJlbmNlMikgeworICAgICAgICBpZiAobV9sYXN0RWZmZWN0UmVm
ZXJlbmNlMS5nZXQoKSAhPSBlZmZlY3QpCisgICAgICAgICAgICBtX2xhc3RFZmZlY3RSZWZlcmVu
Y2UyID0gZWZmZWN0OworICAgICAgICByZXR1cm4gZWZmZWN0OworICAgIH0KKworICAgIC8vIFRo
aXMgcGFydCBpcyByYXJlbHkgZXhlY3V0ZWQKKyAgICBpZiAobV9sYXN0RWZmZWN0UmVmZXJlbmNl
MS5nZXQoKSA9PSBlZmZlY3QgfHwgbV9sYXN0RWZmZWN0UmVmZXJlbmNlMi5nZXQoKSA9PSBlZmZl
Y3QpCisgICAgICAgIHJldHVybiBlZmZlY3Q7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
bGFzdEVmZmVjdEZ1cnRoZXJSZWZlcmVuY2VzLnNpemUoKTsgKytpKQorICAgICAgICBpZiAobV9s
YXN0RWZmZWN0RnVydGhlclJlZmVyZW5jZXNbaV0uZ2V0KCkgPT0gZWZmZWN0KQorICAgICAgICAg
ICAgcmV0dXJuIGVmZmVjdDsKKworICAgIG1fbGFzdEVmZmVjdEZ1cnRoZXJSZWZlcmVuY2VzLmFw
cGVuZChlZmZlY3QpOworICAgIHJldHVybiBlZmZlY3Q7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyQnVp
bGRlcjo6YXNzaWduUmVjb3JkZWRFZmZlY3RzVG8oUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0
KQoreworICAgIC8vIFRoZSBlZmZlY3QgbXVzdCBiZSBhIG5ld2x5IGNyZWF0ZWQgZmlsdGVyIGVm
ZmVjdC4KKyAgICBBU1NFUlQobV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KSA9PSBtX2Vm
ZmVjdFJlZmVyZW5jZXMuZW5kKCkpOworICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoZWZmZWN0
LCBFZmZlY3RSZWZlcmVuY2VzKCkpOworCisgICAgaWYgKG1fbGFzdEVmZmVjdFJlZmVyZW5jZTEu
Z2V0KCkpCisgICAgICAgIGFkZEVmZmVjdFJlZmVyZW5jZShtX2xhc3RFZmZlY3RSZWZlcmVuY2Ux
LnJlbGVhc2UoKSwgZWZmZWN0KTsKKyAgICBpZiAobV9sYXN0RWZmZWN0UmVmZXJlbmNlMi5nZXQo
KSkKKyAgICAgICAgYWRkRWZmZWN0UmVmZXJlbmNlKG1fbGFzdEVmZmVjdFJlZmVyZW5jZTIucmVs
ZWFzZSgpLCBlZmZlY3QpOworICAgIGlmIChtX2xhc3RFZmZlY3RGdXJ0aGVyUmVmZXJlbmNlcy5z
aXplKCkpIHsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2xhc3RFZmZlY3RGdXJ0aGVy
UmVmZXJlbmNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICBhZGRFZmZlY3RSZWZlcmVuY2Uo
bV9sYXN0RWZmZWN0RnVydGhlclJlZmVyZW5jZXNbaV0sIGVmZmVjdCk7CisgICAgICAgIG1fbGFz
dEVmZmVjdEZ1cnRoZXJSZWZlcmVuY2VzLmNsZWFyKCk7CisgICAgfQorfQorCiB2b2lkIFNWR0Zp
bHRlckJ1aWxkZXI6OmNsZWFyRWZmZWN0cygpCiB7CiAgICAgbV9sYXN0RWZmZWN0ID0gMDsKICAg
ICBtX25hbWVkRWZmZWN0cy5jbGVhcigpOworICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5jbGVhcigp
OworICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CisKKyAgICBBU1NFUlQoIW1fbGFzdEVmZmVjdFJl
ZmVyZW5jZTEpOworICAgIEFTU0VSVCghbV9sYXN0RWZmZWN0UmVmZXJlbmNlMik7CisgICAgQVNT
RVJUKCFtX2xhc3RFZmZlY3RGdXJ0aGVyUmVmZXJlbmNlcy5zaXplKCkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5oCmluZGV4IDRlZjZmZmUuLmQwMjYwZjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvc3Zn
L2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0yOCwzMCArMjgsNjMgQEAK
IAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5n
SGFzaC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiAgICAgY2xhc3MgU1ZHRmlsdGVy
QnVpbGRlciA6IHB1YmxpYyBSZWZDb3VudGVkPFNWR0ZpbHRlckJ1aWxkZXI+IHsKICAgICBwdWJs
aWM6CisgICAgICAgIC8vIE1vc3QgZWZmZWN0cyBoYXMgbGVzcyBvciBlcXVhbCB0aGFuIDIgaW5w
dXQgZmlsdGVycywgYW5kIHdlIGRvbid0CisgICAgICAgIC8vIG5lZWQgdG8gYWxsb2NhdGUgYnVm
ZmVyIGZvciB0aGVtIGlmIHdlIHNldCB0aGUgaW5saW5lIGNhcGFjaXR5IHRvIDIKKyAgICAgICAg
dHlwZWRlZiBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4sIDI+IEVmZmVjdFJlZmVyZW5jZXM7
CisKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gY3JlYXRlKCkg
eyByZXR1cm4gYWRvcHRSZWYobmV3IFNWR0ZpbHRlckJ1aWxkZXIpOyB9CiAKICAgICAgICAgdm9p
ZCBhZGQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0
KTsKIAogICAgICAgICBGaWx0ZXJFZmZlY3QqIGdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbWljU3Ry
aW5nJiBpZCkgY29uc3Q7CiAgICAgICAgIEZpbHRlckVmZmVjdCogbGFzdEVmZmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGFzdEVmZmVjdC5nZXQoKTsgfQorICAgICAgICBGaWx0ZXJFZmZlY3QqIGdl
dEFuZFJlY29yZEVmZmVjdEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCk7CisgICAgICAgIHZv
aWQgYXNzaWduUmVjb3JkZWRFZmZlY3RzVG8oUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KTsK
IAotICAgICAgICBjb25zdCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVj
dD4gPiYgbmFtZWRFZmZlY3RzKCkgeyByZXR1cm4gbV9uYW1lZEVmZmVjdHM7IH0KKyAgICAgICAg
aW5saW5lIEVmZmVjdFJlZmVyZW5jZXMmIGdldFJlZmVyZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZl
Y3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgbWFpbmx5IGNh
bGxlZCBmcm9tIHRoZSBmaWx0ZXIgaXRzZWxmLCBhbmQgc2luY2UgdGhlCisgICAgICAgICAgICAv
LyBmaWx0ZXIgYmVsb25ncyB0byB0aGlzIGZpbHRlciBidWlsZGVyLCBpdCBtdXN0IGJlIGZvdW5k
LgorICAgICAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCkgIT0g
bV9lZmZlY3RSZWZlcmVuY2VzLmVuZCgpKTsKKyAgICAgICAgICAgIHJldHVybiBtX2VmZmVjdFJl
ZmVyZW5jZXMuZmluZChlZmZlY3QpLT5zZWNvbmQ7CisgICAgICAgIH0KIAogICAgICAgICB2b2lk
IGNsZWFyRWZmZWN0cygpOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgU1ZHRmlsdGVyQnVpbGRl
cigpOwogCisgICAgICAgIGlubGluZSB2b2lkIGFkZEVmZmVjdFJlZmVyZW5jZShSZWZQdHI8Rmls
dGVyRWZmZWN0PiBlZmZlY3QsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IHRhcmdldEVmZmVjdCkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gU2luY2UgdGFyZ2V0RWZmZWN0IGlzIGEgbmV3bHkgY3Jl
YXRlZCBvYmplY3QsIGl0IGNhbm5vdCBhbHJlYWR5IGJlIGFkZGVkIHRvIHRoZSBsaXN0LgorICAg
ICAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCkgIT0gbV9lZmZl
Y3RSZWZlcmVuY2VzLmVuZCgpKTsKKyAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5k
KGVmZmVjdCktPnNlY29uZC5hcHBlbmQodGFyZ2V0RWZmZWN0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJhdG9y
IGVuZCA9IG1fYnVpbHRpbkVmZmVjdHMuZW5kKCk7CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9
IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQor
ICAgICAgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNvbmQs
IEVmZmVjdFJlZmVyZW5jZXMoKSk7CisgICAgICAgIH0KKwogICAgICAgICBIYXNoTWFwPEF0b21p
Y1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtX2J1aWx0aW5FZmZlY3RzOwogICAgICAg
ICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiBtX25hbWVkRWZm
ZWN0czsKKyAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhv
c2UgZmlsdGVyIGVmZmVjdHMsCisgICAgICAgIC8vIHdoaWNoIGRlcGVuZHMgb24gdGhlIGtleSBm
aWx0ZXIgZWZmZWN0LgorICAgICAgICBIYXNoTWFwPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBFZmZl
Y3RSZWZlcmVuY2VzPiBtX2VmZmVjdFJlZmVyZW5jZXM7CiAKICAgICAgICAgUmVmUHRyPEZpbHRl
ckVmZmVjdD4gbV9sYXN0RWZmZWN0OworICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xh
c3RFZmZlY3RSZWZlcmVuY2UxOworICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RF
ZmZlY3RSZWZlcmVuY2UyOworICAgICAgICBWZWN0b3I8UmVmUHRyPEZpbHRlckVmZmVjdD4gPiBt
X2xhc3RFZmZlY3RGdXJ0aGVyUmVmZXJlbmNlczsKICAgICB9OwogICAgIAogfSAvL25hbWVzcGFj
ZSBXZWJDb3JlCi0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="57030"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67671</attachid>
            <date>2010-09-15 06:47:27 -0700</date>
            <delta_ts>2010-09-22 02:51:31 -0700</delta_ts>
            <desc>Draft patch 2</desc>
            <filename>0001-filter-render.patch</filename>
            <type>text/plain</type>
            <size>15882</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAyZDI1YjFmMmY3ZjEwN2QzZDY0ZWZiMjBkNjlmMTdhOWRlYWYxYWY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDE1IFNlcCAyMDEwIDE1OjM2OjI0ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlbmRlcgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAgICAgICB8ICAgIDEgKwogLi4uL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oICAgfCAgICA1ICsrLQogV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBXZWJDb3JlL3N2Zy9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCAgICAgIHwgICAgMiArLQogV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICA0ICstCiBXZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgICAgICAgICB8ICAgIDIgKy0K
IFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgICAgICAgIHwgICAg
MiArLQogV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCAgICAgICAg
fCAgICA0ICstCiBXZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwICAgICAg
ICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCAgICAgICAg
ICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5j
cHAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
Y3BwICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuY3BwICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5jcHAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwICB8ICAgMzcgKysrKysrKysrKysrKysr
KysrKysKIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oICAg
IHwgICAyNyArKysrKysrKysrKysrKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMo
KyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcAppbmRleCA5ODIzNzVlLi4xYWIxOTRkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xMDksNiArMTA5LDcgQEAgUGFz
c1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQ
cmltaXRpdmVzKCkKICAgICAgICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0
VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCk7CiAgICAgICAgIGVmZmVjdEVsZW1lbnQtPnNldFN0
YW5kYXJkQXR0cmlidXRlcyhwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUsIGVmZmVjdC5nZXQoKSk7
CiAgICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LT5yZXN1bHQoKSwgZWZmZWN0KTsK
ICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuaAppbmRleCA5NmUyYzVlLi40YjIzNzM3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKQEAgLTM2LDEw
ICszNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlIDogcHVibGljIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciB7CiBwdWJs
aWM6Ci0gICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZmlsdGVyUHJpbWl0aXZlRWxlbWVudCk7CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzKiBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KTsKIAogcHJpdmF0ZToKLSAgICAgdmly
dHVhbCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1
cm4gIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlIjsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1NWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmlu
ZGV4IDQ1MWI3ZDEuLjI3YjMzZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTgx
LDggKzgxLDggQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
KQogewotICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChpbjEoKSk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVjdCog
aW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChpbjIoKSk7CiAK
ICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCA3ZjQ5NmJjLi5lOTQ0OWJiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZv
aWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAKIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0
QW5kUmVjb3JkRWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5j
cHAKaW5kZXggYTk5ZTc0Yy4uZDBiN2JhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dAogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEFuZFJlY29y
ZEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1
cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAg
Yi9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IGY2NTg2MzIuLjAz
ODhkNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAK
KysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtMTA0LDggKzEw
NCw4IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyKQogewotICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVj
dCogaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChpbjIoKSk7
CiAgICAgCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIDA7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggOTQzMmEwMC4u
MmQ4YTJjYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApA
QCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldEtl
cm5lbFVuaXRMZW5ndGgoZmxvYXQsIGZsb2F0KQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEp
CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5jcHAKaW5kZXggNDM0OWYyNy4uZmM4N2VhMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcv
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck4KIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKIHsKLSAg
ICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4x
KCkpOworICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVj
b3JkRWZmZWN0QnlJZChpbjEoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJl
dHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5k
ZXggMDEzZWNhNS4uMGQyYTQ5YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwCkBAIC05Niw4ICs5Niw4IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOCiAK
IFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwor
ICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZm
ZWN0QnlJZChpbjEoKSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRBbmRSZWNvcmRFZmZlY3RCeUlkKGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8
fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCmluZGV4IGY2NmZhOTAuLjI2YTU5ZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAgIEZpbHRl
ckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRBbmRSZWNvcmRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3Zn
L1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAppbmRleCA2MjU0YjI0Li5jNzcxZTE0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuY3BwCkBAIC00Miw3ICs0Miw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlCiAgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbWVyZ2VJbnB1dHM7CiAgICAg
Zm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygp
KSB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZU1lcmdlTm9kZVRhZykp
IHsKLSAgICAgICAgICAgIEZpbHRlckVmZmVjdCogbWVyZ2VFZmZlY3QgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCo+KG4pLT5p
bjEoKSk7CisgICAgICAgICAgICBGaWx0ZXJFZmZlY3QqIG1lcmdlRWZmZWN0ID0gZmlsdGVyQnVp
bGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVs
ZW1lbnQqPihuKS0+aW4xKCkpOwogICAgICAgICAgICAgaWYgKCFtZXJnZUVmZmVjdCkKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIG1lcmdlSW5wdXRzLmFwcGVuZChtZXJn
ZUVmZmVjdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRU1vcnBob2xvZ3lFbGVtZW50
LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCmluZGV4IGMzZGI4
NDQuLjhiOGMzMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwCkBAIC05
MSw3ICs5MSw3IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6c3luY2hyb25pemVQcm9w
ZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIAogUGFzc1JlZlB0cjxGaWx0ZXJF
ZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZp
bHRlckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIGZsb2F0IHhSYWRp
dXMgPSByYWRpdXNYKCk7CiAgICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1c1koKTsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NW
R0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggNThiNGE2YS4uYjhmOGJjNiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdG
RU9mZnNldEVsZW1lbnQuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQgU1ZHRkVPZmZzZXRFbGVt
ZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQog
CiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVtZW50OjpidWlsZChTVkdG
aWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAgIEZpbHRlckVmZmVjdCogaW5wdXQx
ID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7CisgICAgRmlsdGVyRWZmZWN0
KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRBbmRSZWNvcmRFZmZlY3RCeUlkKGluMSgpKTsK
IAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggZDA3YzZjZS4uMzNkNjFiZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKKysr
IGIvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKQEAgLTExMCw3
ICsxMTAsNyBAQCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50OjpmaW5kTGlnaHRzKCkgY29uc3QKIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5w
dXQxKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFVGls
ZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKaW5kZXggNDM3
OWI5Ni4uMzg1Y2E1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5j
cHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKQEAgLTU3LDcgKzU3LDcg
QEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJOYW1lKQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVUaWxl
RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKIHsKLSAgICBG
aWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4xKCkp
OworICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3Jk
RWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAgcmV0dXJuIDA7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxk
ZXIuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cAppbmRleCA1YTZkMGI5Li42YjQ5ZjY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTM2LDYgKzM2LDcgQEAgU1ZHRmlsdGVy
QnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcigpCiB7CiAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQo
U291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSk7CiAg
ICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNl
QWxwaGE6OmNyZWF0ZSgpKTsKKyAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCiB2b2lkIFNW
R0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QpCkBAIC02NywxMCArNjgsNDYgQEAgRmlsdGVyRWZmZWN0KiBTVkdGaWx0
ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCkuZ2V0KCk7CiB9CiAKK0ZpbHRlckVmZmVj
dCogU1ZHRmlsdGVyQnVpbGRlcjo6Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChjb25zdCBBdG9taWNT
dHJpbmcmIGlkKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdGVjdHMgZnJvbSBkb3VibGUg
YWRkaXRpb24gKHdoaWNoIGlzIHZhbGlkKQorICAgIEZpbHRlckVmZmVjdCogZWZmZWN0ID0gZ2V0
RWZmZWN0QnlJZChpZCk7CisKKyAgICBpZiAoIWVmZmVjdCkKKyAgICAgICAgcmV0dXJuIGVmZmVj
dDsKKworICAgIGludCBzaXplID0gbV9yZWNvcmRlZEVmZmVjdHMuc2l6ZSgpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpZiAobV9yZWNvcmRlZEVmZmVjdHNb
aV0gPT0gZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIGVmZmVjdDsKKworICAgIG1fcmVjb3Jk
ZWRFZmZlY3RzLmFwcGVuZChlZmZlY3QpOworICAgIHJldHVybiBlZmZlY3Q7Cit9CisKK3ZvaWQg
U1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3sKKyAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXds
eSBjcmVhdGVkIGZpbHRlciBlZmZlY3QuCisgICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMu
Y29udGFpbnMoZWZmZWN0KSk7CisgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEVm
ZmVjdFJlZmVyZW5jZXMoKSk7CisKKyAgICBpbnQgc2l6ZSA9IG1fcmVjb3JkZWRFZmZlY3RzLnNp
emUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICAvLyBT
aW5jZSB0YXJnZXRFZmZlY3QgaXMgYSBuZXdseSBjcmVhdGVkIG9iamVjdCwgaXQgY2Fubm90IGFs
cmVhZHkgYmUgYWRkZWQgdG8gdGhlIGxpc3QuCisgICAgICAgIEFTU0VSVChtX2VmZmVjdFJlZmVy
ZW5jZXMuY29udGFpbnMobV9yZWNvcmRlZEVmZmVjdHNbaV0pKTsKKyAgICAgICAgbV9lZmZlY3RS
ZWZlcmVuY2VzLmZpbmQobV9yZWNvcmRlZEVmZmVjdHNbaV0pLT5zZWNvbmQuYXBwZW5kKGVmZmVj
dCk7CisgICAgfQorICAgIG1fcmVjb3JkZWRFZmZlY3RzLmNsZWFyKCk7Cit9CisKIHZvaWQgU1ZH
RmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKIHsKICAgICBtX2xhc3RFZmZlY3QgPSAwOwog
ICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFyKCk7CisgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmNsZWFy
KCk7CisgICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKworICAgIEFTU0VSVCghbV9yZWNvcmRlZEVm
ZmVjdHMuc2l6ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9XZWJDb3Jl
L3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAppbmRleCA0ZWY2ZmZlLi44
YzUyYTljIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuaApAQCAtMjgsMzAgKzI4LDU1IEBACiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIAogICAgIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxT
VkdGaWx0ZXJCdWlsZGVyPiB7CiAgICAgcHVibGljOgorICAgICAgICAvLyBBIHNtYWxsIGlubGlu
ZSBidWZmZXIgY291bGQgaGVscCB0byBhdm9pZCBtZW1vcnkgYWxsb2NhdGlvbiBpbiBtYW55IGNh
c2VzLgorICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgMj4gRWZm
ZWN0UmVmZXJlbmNlczsKKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdGaWx0ZXJCdWls
ZGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRmlsdGVyQnVpbGRlcik7IH0K
IAogICAgICAgICB2b2lkIGFkZChjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiBlZmZlY3QpOwogCiAgICAgICAgIEZpbHRlckVmZmVjdCogZ2V0RWZmZWN0QnlJZChj
b25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKICAgICAgICAgRmlsdGVyRWZmZWN0KiBsYXN0
RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9CisgICAgICAgIEZp
bHRlckVmZmVjdCogZ2V0QW5kUmVjb3JkRWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlk
KTsKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGVuZCB0aGUgZWZmZWN0IHRvIHRoZSBF
ZmZlY3RSZWZlcmVuY2VzIGxpc3Qgb2YKKyAgICAgICAgLy8gdGhlIHByZXZpb3VzbHkgcmVjb3Jk
ZWQgZWZmZWN0cywgYW5kIGVtcHR5IHRoZSByZWNvcmRlZCBlZmZlY3QgbGlzdC4KKyAgICAgICAg
dm9pZCBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZWZmZWN0KTsKIAotICAgICAgICBjb25zdCBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZp
bHRlckVmZmVjdD4gPiYgbmFtZWRFZmZlY3RzKCkgeyByZXR1cm4gbV9uYW1lZEVmZmVjdHM7IH0K
KyAgICAgICAgaW5saW5lIEVmZmVjdFJlZmVyZW5jZXMmIGdldFJlZmVyZW5jZXMoRmlsdGVyRWZm
ZWN0KiBlZmZlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9ubHkgYWxsb3dlZCBmb3Ig
ZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KKyAgICAgICAgICAgIEFTU0VSVChtX2Vm
ZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAgICAgICByZXR1cm4gbV9l
ZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+c2Vjb25kOworICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFNWR0ZpbHRl
ckJ1aWxkZXIoKTsKIAorICAgICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZmZWN0cygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVy
RWZmZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgpOworICAgICAg
ICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPjo6
aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2luKCk7IGl0ZXJhdG9yICE9
IGVuZDsgKytpdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFk
ZChpdGVyYXRvci0+c2Vjb25kLCBFZmZlY3RSZWZlcmVuY2VzKCkpOworICAgICAgICB9CisKICAg
ICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9idWls
dGluRWZmZWN0czsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+ID4gbV9uYW1lZEVmZmVjdHM7CisgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBhIGxpc3Qs
IHdoaWNoIGNvbnRhaW5zIHRob3NlIGZpbHRlciBlZmZlY3RzLAorICAgICAgICAvLyB3aGljaCBk
ZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KKyAgICAgICAgSGFzaE1hcDxSZWZQdHI8
RmlsdGVyRWZmZWN0PiwgRWZmZWN0UmVmZXJlbmNlcz4gbV9lZmZlY3RSZWZlcmVuY2VzOwogCiAg
ICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsKKyAgICAgICAgVmVjdG9y
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9yZWNvcmRlZEVmZmVjdHM7CiAgICAgfTsKICAgICAK
IH0gLy9uYW1lc3BhY2UgV2ViQ29yZQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68354</attachid>
            <date>2010-09-22 02:51:31 -0700</date>
            <delta_ts>2010-09-22 04:50:45 -0700</delta_ts>
            <desc>Draft patch 3</desc>
            <filename>0001-filter-render.patch</filename>
            <type>text/plain</type>
            <size>15897</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBiYWZlYjJjZjYwOTMxZGUwYjNhNzQxM2EwNTU2MzhlMmEzNzVhOGRjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDE1IFNlcCAyMDEwIDE1OjM2OjI0ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlbmRlcgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAgICAgICB8ICAgIDEgKwogLi4uL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oICAgfCAgICA1ICsrLQogV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVs
ZW1lbnQuY3BwICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBXZWJDb3JlL3N2Zy9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL1NW
R0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcCAgICAgIHwgICAgMiArLQogV2ViQ29yZS9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcCAgICAgICAgICAgICAgfCAgICA0ICstCiBXZWJD
b3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgICAgICAgICB8ICAgIDIgKy0K
IFdlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAgICAgICAgIHwgICAg
MiArLQogV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcCAgICAgICAg
fCAgICA0ICstCiBXZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwICAgICAg
ICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCAgICAgICAg
ICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9zdmcvU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5j
cHAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQu
Y3BwICAgICAgICAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQuY3BwICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9zdmcvU1ZHRkVUaWxl
RWxlbWVudC5jcHAgICAgICAgICAgICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwICB8ICAgMzcgKysrKysrKysrKysrKysr
KysrKysKIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oICAg
IHwgICAyNyArKysrKysrKysrKysrKy0KIDE3IGZpbGVzIGNoYW5nZWQsIDgzIGluc2VydGlvbnMo
KyksIDE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNWR1Jlc291cmNlRmlsdGVyLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291
cmNlRmlsdGVyLmNwcAppbmRleCA2OTgwMzNlLi4wYzZjY2E3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCkBAIC0xMDgsNiArMTA4LDcgQEAgUGFz
c1JlZlB0cjxTVkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQ
cmltaXRpdmVzKCkKICAgICAgICAgICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgYnVpbGRlci0+YXBwZW5kRWZmZWN0
VG9FZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCk7CiAgICAgICAgIGVmZmVjdEVsZW1lbnQtPnNldFN0
YW5kYXJkQXR0cmlidXRlcyhwcmltaXRpdmVCb3VuZGluZ0JveE1vZGUsIGVmZmVjdC5nZXQoKSk7
CiAgICAgICAgIGJ1aWxkZXItPmFkZChlZmZlY3RFbGVtZW50LT5yZXN1bHQoKSwgZWZmZWN0KTsK
ICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZS5oIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuaAppbmRleCA5NmUyYzVlLi40YjIzNzM3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCisrKyBiL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKQEAgLTM2LDEw
ICszNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlclNWR1Jlc291cmNl
RmlsdGVyUHJpbWl0aXZlIDogcHVibGljIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lciB7CiBwdWJs
aWM6Ci0gICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZmlsdGVyUHJpbWl0aXZlRWxlbWVudCk7CisgICAgUmVu
ZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzKiBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KTsKIAogcHJpdmF0ZToKLSAgICAgdmly
dHVhbCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1
cm4gIlJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlIjsgfQorICAgIHZpcnR1YWwgYm9v
bCBpc1NWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZH
RkVCbGVuZEVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCmlu
ZGV4IGM0ZDgxNmIuLjk2Y2M4MDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKQEAgLTgx
LDggKzgxLDggQEAgdm9pZCBTVkdGRUJsZW5kRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+
IFNWR0ZFQmxlbmRFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVy
KQogewotICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0
QnlJZChpbjEoKSk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVjdCog
aW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChpbjIoKSk7CiAK
ICAgICBpZiAoIWlucHV0MSB8fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAppbmRleCBmMTRiNGU3Li4zMjdmZjVhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCkBAIC04Myw3ICs4Myw3IEBAIHZv
aWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVh
bGlmaWVkTmFtZSYgYXR0ck5hbWUpCiAKIFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRUNv
bG9yTWF0cml4RWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikK
IHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5
SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0
QW5kUmVjb3JkRWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAgICAgICAg
cmV0dXJuIDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5j
cHAKaW5kZXggZjZiMjZmNS4uZWQ5ZDgyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVD
b21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50LmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dAogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAg
RmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgp
KTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEFuZFJlY29y
ZEVmZmVjdEJ5SWQoaW4xKCkpOwogICAgIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1
cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAg
Yi9XZWJDb3JlL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCmluZGV4IGI2ZjEwMDIuLjM1
YmMxYTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAK
KysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcApAQCAtMTA0LDggKzEw
NCw4IEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNv
bnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb21wb3NpdGVFbGVtZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWls
ZGVyKQogewotICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZm
ZWN0QnlJZChpbjEoKSk7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRFZmZlY3RCeUlkKGluMigpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRl
ckJ1aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVj
dCogaW5wdXQyID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChpbjIoKSk7
CiAgICAgCiAgICAgaWYgKCFpbnB1dDEgfHwgIWlucHV0MikKICAgICAgICAgcmV0dXJuIDA7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAgYi9X
ZWJDb3JlL3N2Zy9TVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudC5jcHAKaW5kZXggZGIyZmFkNS4u
Njk2N2VmMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1l
bnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50LmNwcApA
QCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OnNldEtl
cm5lbFVuaXRMZW5ndGgoZmxvYXQsIGZsb2F0KQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4g
U1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRl
ckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5n
ZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1
aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogCiAgICAgaWYgKCFpbnB1dDEp
CiAgICAgICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5jcHAKaW5kZXggNGJjMWJkYi4uYzdmYzhiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcv
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCkBAIC0xMDUsNyArMTA1LDcgQEAgdm9pZCBTVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OnN5bmNocm9uaXplUHJvcGVydHkoY29uc3QgUXVhbGlmaWVk
TmFtZSYgYXR0ck4KIAogUGFzc1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFRGlmZnVzZUxpZ2h0
aW5nRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVpbGRlcikKIHsKLSAg
ICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4x
KCkpOworICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVj
b3JkRWZmZWN0QnlJZChpbjEoKSk7CiAgICAgCiAgICAgaWYgKCFpbnB1dDEpCiAgICAgICAgIHJl
dHVybiAwOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt
ZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAKaW5k
ZXggZWE4YTdiOC4uNDA1MTZiYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVEaXNwbGFj
ZW1lbnRNYXBFbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1h
cEVsZW1lbnQuY3BwCkBAIC05Niw4ICs5Niw4IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOCiAK
IFBhc3NSZWZQdHI8RmlsdGVyRWZmZWN0PiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmJ1
aWxkKFNWR0ZpbHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0
KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKLSAgICBGaWx0
ZXJFZmZlY3QqIGlucHV0MiA9IGZpbHRlckJ1aWxkZXItPmdldEVmZmVjdEJ5SWQoaW4yKCkpOwor
ICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZm
ZWN0QnlJZChpbjEoKSk7CisgICAgRmlsdGVyRWZmZWN0KiBpbnB1dDIgPSBmaWx0ZXJCdWlsZGVy
LT5nZXRBbmRSZWNvcmRFZmZlY3RCeUlkKGluMigpKTsKICAgICAKICAgICBpZiAoIWlucHV0MSB8
fCAhaW5wdXQyKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAgYi9XZWJDb3JlL3N2Zy9TVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQuY3BwCmluZGV4IDNkZmQ1MWMuLjVhMTc1MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
c3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVH
YXVzc2lhbkJsdXJFbGVtZW50LmNwcApAQCAtODIsNyArODIsNyBAQCB2b2lkIFNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudDo6c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBh
dHRyTmFtZQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAgIEZpbHRl
ckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRBbmRSZWNvcmRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3Zn
L1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAppbmRleCA0OWEwNTJlLi4wNmNmYWQxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuY3BwCkBAIC00Myw3ICs0Myw3IEBAIFBhc3NSZWZQdHI8RmlsdGVyRWZm
ZWN0PiBTVkdGRU1lcmdlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlCiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yJiBtZXJnZUlucHV0cyA9IGVmZmVjdC0+aW5wdXRF
ZmZlY3RzKCk7CiAgICAgZm9yIChOb2RlKiBuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBu
LT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpm
ZU1lcmdlTm9kZVRhZykpIHsKLSAgICAgICAgICAgIEZpbHRlckVmZmVjdCogbWVyZ2VFZmZlY3Qg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2Rl
RWxlbWVudCo+KG4pLT5pbjEoKSk7CisgICAgICAgICAgICBGaWx0ZXJFZmZlY3QqIG1lcmdlRWZm
ZWN0ID0gZmlsdGVyQnVpbGRlci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChzdGF0aWNfY2FzdDxT
VkdGRU1lcmdlTm9kZUVsZW1lbnQqPihuKS0+aW4xKCkpOwogICAgICAgICAgICAgaWYgKCFtZXJn
ZUVmZmVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIG1lcmdlSW5w
dXRzLmFwcGVuZChtZXJnZUVmZmVjdCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9TVkdGRU1v
cnBob2xvZ3lFbGVtZW50LmNwcCBiL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQu
Y3BwCmluZGV4IGI0NWM2ZjkuLjkwZWZjMWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL1NWR0ZF
TW9ycGhvbG9neUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL1NWR0ZFTW9ycGhvbG9neUVs
ZW1lbnQuY3BwCkBAIC05MSw3ICs5MSw3IEBAIHZvaWQgU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDo6
c3luY2hyb25pemVQcm9wZXJ0eShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKIAogUGFz
c1JlZlB0cjxGaWx0ZXJFZmZlY3Q+IFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6OmJ1aWxkKFNWR0Zp
bHRlckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEg
PSBmaWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3Qq
IGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwog
ICAgIGZsb2F0IHhSYWRpdXMgPSByYWRpdXNYKCk7CiAgICAgZmxvYXQgeVJhZGl1cyA9IHJhZGl1
c1koKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcCBi
L1dlYkNvcmUvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAKaW5kZXggNjU1MjNhNS4uZjQxZmUx
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAorKysgYi9X
ZWJDb3JlL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCkBAIC04MSw3ICs4MSw3IEBAIHZvaWQg
U1ZHRkVPZmZzZXRFbGVtZW50OjpzeW5jaHJvbml6ZVByb3BlcnR5KGNvbnN0IFF1YWxpZmllZE5h
bWUmIGF0dHJOYW1lKQogCiBQYXNzUmVmUHRyPEZpbHRlckVmZmVjdD4gU1ZHRkVPZmZzZXRFbGVt
ZW50OjpidWlsZChTVkdGaWx0ZXJCdWlsZGVyKiBmaWx0ZXJCdWlsZGVyKQogewotICAgIEZpbHRl
ckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRlci0+Z2V0RWZmZWN0QnlJZChpbjEoKSk7Cisg
ICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBmaWx0ZXJCdWlsZGVyLT5nZXRBbmRSZWNvcmRFZmZl
Y3RCeUlkKGluMSgpKTsKIAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwIGIv
V2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKaW5kZXggMTY0NzUy
NS4uY2NiNjhiOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPiBTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaW5kTGlnaHRzKCkgY29uc3QKIAogUGFzc1JlZlB0cjxG
aWx0ZXJFZmZlY3Q+IFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmJ1aWxkKFNWR0ZpbHRl
ckJ1aWxkZXIqIGZpbHRlckJ1aWxkZXIpCiB7Ci0gICAgRmlsdGVyRWZmZWN0KiBpbnB1dDEgPSBm
aWx0ZXJCdWlsZGVyLT5nZXRFZmZlY3RCeUlkKGluMSgpKTsKKyAgICBGaWx0ZXJFZmZlY3QqIGlu
cHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEFuZFJlY29yZEVmZmVjdEJ5SWQoaW4xKCkpOwogICAg
IAogICAgIGlmICghaW5wdXQxKQogICAgICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVu
dC5jcHAKaW5kZXggOTY2NDQ5MC4uMDU3M2NmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvU1ZH
RkVUaWxlRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAK
QEAgLTU3LDcgKzU3LDcgQEAgdm9pZCBTVkdGRVRpbGVFbGVtZW50OjpzeW5jaHJvbml6ZVByb3Bl
cnR5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQogCiBQYXNzUmVmUHRyPEZpbHRlckVm
ZmVjdD4gU1ZHRkVUaWxlRWxlbWVudDo6YnVpbGQoU1ZHRmlsdGVyQnVpbGRlciogZmlsdGVyQnVp
bGRlcikKIHsKLSAgICBGaWx0ZXJFZmZlY3QqIGlucHV0MSA9IGZpbHRlckJ1aWxkZXItPmdldEVm
ZmVjdEJ5SWQoaW4xKCkpOworICAgIEZpbHRlckVmZmVjdCogaW5wdXQxID0gZmlsdGVyQnVpbGRl
ci0+Z2V0QW5kUmVjb3JkRWZmZWN0QnlJZChpbjEoKSk7CiAKICAgICBpZiAoIWlucHV0MSkKICAg
ICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmNwcAppbmRleCA1YTZkMGI5Li42YjQ5ZjY1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1dlYkNv
cmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTM2LDYgKzM2
LDcgQEAgU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcigpCiB7CiAgICAgbV9idWls
dGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VHcmFwaGlj
OjpjcmVhdGUoKSk7CiAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVj
dE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgpKTsKKyAgICBhZGRCdWlsdGluRWZmZWN0cygp
OwogfQogCiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCkBAIC02NywxMCArNjgsNDYgQEAgRmlsdGVy
RWZmZWN0KiBTVkdGaWx0ZXJCdWlsZGVyOjpnZXRFZmZlY3RCeUlkKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIG1fbmFtZWRFZmZlY3RzLmdldChpZCkuZ2V0KCk7CiB9
CiAKK0ZpbHRlckVmZmVjdCogU1ZHRmlsdGVyQnVpbGRlcjo6Z2V0QW5kUmVjb3JkRWZmZWN0QnlJ
ZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gcHJvdGVj
dHMgZnJvbSBkb3VibGUgYWRkaXRpb24gKHdoaWNoIGlzIHZhbGlkKQorICAgIEZpbHRlckVmZmVj
dCogZWZmZWN0ID0gZ2V0RWZmZWN0QnlJZChpZCk7CisKKyAgICBpZiAoIWVmZmVjdCkKKyAgICAg
ICAgcmV0dXJuIGVmZmVjdDsKKworICAgIGludCBzaXplID0gbV9yZWNvcmRlZEVmZmVjdHMuc2l6
ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBpZiAobV9y
ZWNvcmRlZEVmZmVjdHNbaV0gPT0gZWZmZWN0KQorICAgICAgICAgICAgcmV0dXJuIGVmZmVjdDsK
KworICAgIG1fcmVjb3JkZWRFZmZlY3RzLmFwcGVuZChlZmZlY3QpOworICAgIHJldHVybiBlZmZl
Y3Q7Cit9CisKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZl
cmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkKK3sKKyAgICAvLyBUaGUgZWZmZWN0
IG11c3QgYmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBlZmZlY3QuCisgICAgQVNTRVJUKCFtX2Vm
ZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgbV9lZmZlY3RSZWZlcmVuY2Vz
LmFkZChlZmZlY3QsIEVmZmVjdFJlZmVyZW5jZXMoKSk7CisKKyAgICBpbnQgc2l6ZSA9IG1fcmVj
b3JkZWRFZmZlY3RzLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICAvLyBTaW5jZSB0YXJnZXRFZmZlY3QgaXMgYSBuZXdseSBjcmVhdGVkIG9iamVj
dCwgaXQgY2Fubm90IGFscmVhZHkgYmUgYWRkZWQgdG8gdGhlIGxpc3QuCisgICAgICAgIEFTU0VS
VChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMobV9yZWNvcmRlZEVmZmVjdHNbaV0pKTsKKyAg
ICAgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQobV9yZWNvcmRlZEVmZmVjdHNbaV0pLT5zZWNv
bmQuYXBwZW5kKGVmZmVjdCk7CisgICAgfQorICAgIG1fcmVjb3JkZWRFZmZlY3RzLmNsZWFyKCk7
Cit9CisKIHZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKIHsKICAgICBtX2xh
c3RFZmZlY3QgPSAwOwogICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFyKCk7CisgICAgbV9lZmZlY3RS
ZWZlcmVuY2VzLmNsZWFyKCk7CisgICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKKworICAgIEFTU0VS
VCghbV9yZWNvcmRlZEVmZmVjdHMuc2l6ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmggYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApp
bmRleCA0ZWY2ZmZlLi44YzUyYTljIDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtMjgsMzAgKzI4LDU1IEBACiAKICNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIAogICAgIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxTVkdGaWx0ZXJCdWlsZGVyPiB7CiAgICAgcHVibGljOgorICAgICAgICAv
LyBBIHNtYWxsIGlubGluZSBidWZmZXIgY291bGQgaGVscCB0byBhdm9pZCBtZW1vcnkgYWxsb2Nh
dGlvbiBpbiBtYW55IGNhc2VzLgorICAgICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8RmlsdGVy
RWZmZWN0PiwgMj4gRWZmZWN0UmVmZXJlbmNlczsKKwogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxTVkdGaWx0ZXJCdWlsZGVyPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgU1ZHRmls
dGVyQnVpbGRlcik7IH0KIAogICAgICAgICB2b2lkIGFkZChjb25zdCBBdG9taWNTdHJpbmcmIGlk
LCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpOwogCiAgICAgICAgIEZpbHRlckVmZmVjdCog
Z2V0RWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKICAgICAgICAgRmls
dGVyRWZmZWN0KiBsYXN0RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgp
OyB9CisgICAgICAgIEZpbHRlckVmZmVjdCogZ2V0QW5kUmVjb3JkRWZmZWN0QnlJZChjb25zdCBB
dG9taWNTdHJpbmcmIGlkKTsKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGFwcGVuZCB0aGUg
ZWZmZWN0IHRvIHRoZSBFZmZlY3RSZWZlcmVuY2VzIGxpc3Qgb2YKKyAgICAgICAgLy8gdGhlIHBy
ZXZpb3VzbHkgcmVjb3JkZWQgZWZmZWN0cywgYW5kIGVtcHR5IHRoZSByZWNvcmRlZCBlZmZlY3Qg
bGlzdC4KKyAgICAgICAgdm9pZCBhcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRy
PEZpbHRlckVmZmVjdD4gZWZmZWN0KTsKIAotICAgICAgICBjb25zdCBIYXNoTWFwPEF0b21pY1N0
cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4gPiYgbmFtZWRFZmZlY3RzKCkgeyByZXR1cm4gbV9u
YW1lZEVmZmVjdHM7IH0KKyAgICAgICAgaW5saW5lIEVmZmVjdFJlZmVyZW5jZXMmIGdldFJlZmVy
ZW5jZXMoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9u
bHkgYWxsb3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KKyAgICAgICAg
ICAgIEFTU0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAg
ICAgICByZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+c2Vjb25kOworICAg
ICAgICB9CiAKICAgICAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIFNWR0ZpbHRlckJ1aWxkZXIoKTsKIAorICAgICAgICBpbmxpbmUgdm9pZCBhZGRCdWls
dGluRWZmZWN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5n
LCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3Rz
LmVuZCgpOworICAgICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZp
bHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2lu
KCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgbV9lZmZl
Y3RSZWZlcmVuY2VzLmFkZChpdGVyYXRvci0+c2Vjb25kLCBFZmZlY3RSZWZlcmVuY2VzKCkpOwor
ICAgICAgICB9CisKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+ID4gbV9idWlsdGluRWZmZWN0czsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9uYW1lZEVmZmVjdHM7CisgICAgICAgIC8vIFRoZSB2
YWx1ZSBpcyBhIGxpc3QsIHdoaWNoIGNvbnRhaW5zIHRob3NlIGZpbHRlciBlZmZlY3RzLAorICAg
ICAgICAvLyB3aGljaCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KKyAgICAgICAg
SGFzaE1hcDxSZWZQdHI8RmlsdGVyRWZmZWN0PiwgRWZmZWN0UmVmZXJlbmNlcz4gbV9lZmZlY3RS
ZWZlcmVuY2VzOwogCiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1fbGFzdEVmZmVjdDsK
KyAgICAgICAgVmVjdG9yPFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9yZWNvcmRlZEVmZmVjdHM7
CiAgICAgfTsKICAgICAKIH0gLy9uYW1lc3BhY2UgV2ViQ29yZQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68357</attachid>
            <date>2010-09-22 04:50:45 -0700</date>
            <delta_ts>2010-09-24 06:59:11 -0700</delta_ts>
            <desc>Draft patch 4</desc>
            <filename>0001-filter-render.patch</filename>
            <type>text/plain</type>
            <size>5733</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBlNjc2NTIyYzcyN2QyYjkzZWQ3MTIyYzljNTUxOGQ0ZjlkYjE5MDk5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDIyIFNlcCAyMDEwIDEzOjM3OjA4ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlbmRlcgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlci5jcHAgICAgICB8ICAgIDEgKwogLi4uL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZS5oICAgfCAgICA1ICsrLQogV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmls
dGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCAgfCAgIDI1ICsrKysrKysrKysrKysrKysrKystCiBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCAgICB8ICAgMTkg
KysrKysrKysrKysrKystCiA0IGZpbGVzIGNoYW5nZWQsIDQ2IGluc2VydGlvbnMoKyksIDQgZGVs
ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwCmluZGV4IDY5ODAzM2UuLjBjNmNjYTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTEwOCw2ICsxMDgsNyBAQCBQYXNzUmVmUHRyPFNW
R0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMo
KQogICAgICAgICAgICAgYnVpbGRlci0+Y2xlYXJFZmZlY3RzKCk7CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQorICAgICAgICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJl
ZmVyZW5jZXMoZWZmZWN0KTsKICAgICAgICAgZWZmZWN0RWxlbWVudC0+c2V0U3RhbmRhcmRBdHRy
aWJ1dGVzKHByaW1pdGl2ZUJvdW5kaW5nQm94TW9kZSwgZWZmZWN0LmdldCgpKTsKICAgICAgICAg
YnVpbGRlci0+YWRkKGVmZmVjdEVsZW1lbnQtPnJlc3VsdCgpLCBlZmZlY3QpOwogICAgIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlLmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2
ZS5oCmluZGV4IDk2ZTJjNWUuLjRiMjM3MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaApAQCAtMzYsMTAgKzM2LDExIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmlt
aXRpdmUgOiBwdWJsaWMgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyIHsKIHB1YmxpYzoKLSAgICAg
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKiBmaWx0ZXJQcmltaXRpdmVFbGVtZW50KTsKKyAgICBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZShTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMq
IGZpbHRlclByaW1pdGl2ZUVsZW1lbnQpOwogCiBwcml2YXRlOgotICAgICB2aXJ0dWFsIGJvb2wg
aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVy
U1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUiOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVz
b3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9T
VkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRleCA1YTZkMGI5Li5mYTkzNzllIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTI3LDcg
KzI3LDcgQEAKICNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBo
aWMuaCIKIAotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQu
aD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0zNiw2ICszNiw3IEBAIFNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoKQogewog
ICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUdyYXBoaWM6OmVmZmVjdE5hbWUoKSwgU291
cmNlR3JhcGhpYzo6Y3JlYXRlKCkpOwogICAgIG1fYnVpbHRpbkVmZmVjdHMuYWRkKFNvdXJjZUFs
cGhhOjplZmZlY3ROYW1lKCksIFNvdXJjZUFscGhhOjpjcmVhdGUoKSk7CisgICAgYWRkQnVpbHRp
bkVmZmVjdHMoKTsKIH0KIAogdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjphZGQoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KQpAQCAtNjcsMTAgKzY4LDMy
IEBAIEZpbHRlckVmZmVjdCogU1ZHRmlsdGVyQnVpbGRlcjo6Z2V0RWZmZWN0QnlJZChjb25zdCBB
dG9taWNTdHJpbmcmIGlkKSBjb25zdAogICAgIHJldHVybiBtX25hbWVkRWZmZWN0cy5nZXQoaWQp
LmdldCgpOwogfQogCit2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0
UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3QpCit7CisgICAgLy8gVGhlIGVm
ZmVjdCBtdXN0IGJlIGEgbmV3bHkgY3JlYXRlZCBmaWx0ZXIgZWZmZWN0LgorICAgIEFTU0VSVCgh
bV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOworICAgIG1fZWZmZWN0UmVmZXJl
bmNlcy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RWZWN0b3IoKSk7CisKKyAgICBGaWx0ZXJFZmZl
Y3RWZWN0b3ImIGlucHV0RWZmZWN0cyA9IGVmZmVjdC0+aW5wdXRFZmZlY3RzKCk7CisgICAgSGFz
aFNldDxSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IHNlZW5FZmZlY3RzOworICAgIGludCBzaXplID0g
aW5wdXRFZmZlY3RzLnNpemUoKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytp
KSB7CisgICAgICAgIC8vIFNpbmNlIHRhcmdldEVmZmVjdCBpcyBhIG5ld2x5IGNyZWF0ZWQgb2Jq
ZWN0LCBpdCBjYW5ub3QgYWxyZWFkeSBiZSBhZGRlZCB0byB0aGUgbGlzdC4KKyAgICAgICAgQVNT
RVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhpbnB1dEVmZmVjdHNbaV0pKTsKKyAgICAg
ICAgaWYgKHNlZW5FZmZlY3RzLmNvbnRhaW5zKGlucHV0RWZmZWN0c1tpXSkpCisgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGlucHV0RWZmZWN0c1tp
XSktPnNlY29uZC5hcHBlbmQoZWZmZWN0KTsKKyAgICAgICAgc2VlbkVmZmVjdHMuYWRkKGlucHV0
RWZmZWN0c1tpXSk7CisgICAgfQorfQorCiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyRWZm
ZWN0cygpCiB7CiAgICAgbV9sYXN0RWZmZWN0ID0gMDsKICAgICBtX25hbWVkRWZmZWN0cy5jbGVh
cigpOworICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5jbGVhcigpOworICAgIGFkZEJ1aWx0aW5FZmZl
Y3RzKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oIGIvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggNGVmNmZmZS4uMTIzMWFlOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmgKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgK
QEAgLTQxLDE1ICs0MSwzMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZpbHRlckVm
ZmVjdCogZ2V0RWZmZWN0QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKICAgICAg
ICAgRmlsdGVyRWZmZWN0KiBsYXN0RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0
LmdldCgpOyB9CiAKLSAgICAgICAgY29uc3QgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxG
aWx0ZXJFZmZlY3Q+ID4mIG5hbWVkRWZmZWN0cygpIHsgcmV0dXJuIG1fbmFtZWRFZmZlY3RzOyB9
CisgICAgICAgIHZvaWQgYXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+IGVmZmVjdCk7CisKKyAgICAgICAgaW5saW5lIEZpbHRlckVmZmVjdFZlY3RvciYg
Z2V0UmVmZXJlbmNlcyhGaWx0ZXJFZmZlY3QqIGVmZmVjdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gT25seSBhbGxvd2VkIGZvciBlZmZlY3RzIGJlbG9uZ3MgdG8gdGhpcyBidWlsZGVyLgor
ICAgICAgICAgICAgQVNTRVJUKG1fZWZmZWN0UmVmZXJlbmNlcy5jb250YWlucyhlZmZlY3QpKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2VmZmVjdFJlZmVyZW5jZXMuZmluZChlZmZlY3QpLT5zZWNv
bmQ7CisgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyRWZmZWN0cygpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgU1ZHRmlsdGVyQnVpbGRlcigpOwogCisgICAgICAgIGlubGluZSB2b2lk
IGFkZEJ1aWx0aW5FZmZlY3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgSGFzaE1hcDxBdG9t
aWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID46Oml0ZXJhdG9yIGVuZCA9IG1fYnVpbHRp
bkVmZmVjdHMuZW5kKCk7CisgICAgICAgICAgICBmb3IgKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBS
ZWZQdHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBpdGVyYXRvciA9IG1fYnVpbHRpbkVmZmVj
dHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyArK2l0ZXJhdG9yKQorICAgICAgICAgICAgICAg
ICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT5zZWNvbmQsIEZpbHRlckVmZmVjdFZl
Y3RvcigpKTsKKyAgICAgICAgfQorCiAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiA+IG1fYnVpbHRpbkVmZmVjdHM7CiAgICAgICAgIEhhc2hNYXA8QXRv
bWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+IG1fbmFtZWRFZmZlY3RzOworICAgICAg
ICAvLyBUaGUgdmFsdWUgaXMgYSBsaXN0LCB3aGljaCBjb250YWlucyB0aG9zZSBmaWx0ZXIgZWZm
ZWN0cywKKyAgICAgICAgLy8gd2hpY2ggZGVwZW5kcyBvbiB0aGUga2V5IGZpbHRlciBlZmZlY3Qu
CisgICAgICAgIEhhc2hNYXA8UmVmUHRyPEZpbHRlckVmZmVjdD4sIEZpbHRlckVmZmVjdFZlY3Rv
cj4gbV9lZmZlY3RSZWZlcmVuY2VzOwogCiAgICAgICAgIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IG1f
bGFzdEVmZmVjdDsKICAgICB9OwotLSAKMS42LjAuNAoK
</data>
<flag name="review"
          id="57863"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68673</attachid>
            <date>2010-09-24 06:59:11 -0700</date>
            <delta_ts>2010-09-27 03:42:13 -0700</delta_ts>
            <desc>patch</desc>
            <filename>0001-filter-render.patch</filename>
            <type>text/plain</type>
            <size>7993</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA2MDI0MWY5NzYzODIwY2NkNTE0ZDYwNzliOThlMTVkYjUyY2RlYzEyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBGcmksIDI0IFNlcCAyMDEwIDE1OjU0OjI3ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlbmRlcgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMjcgKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgMiArLQogLi4uL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oICAgfCAgICA1ICsrLQog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCAgfCAgIDE5
ICsrKysrKysrKysrKystCiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuaCAgICB8ICAgMjIgKysrKysrKysrKysrKysrLQogNSBmaWxlcyBjaGFuZ2VkLCA3MCBp
bnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjBhY2I5Yi4uY2I2Zjc1MyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MCBAQAorMjAxMC0wOS0yNCAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpbHRlciBi
dWlsZGVyIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgZmlsdGVyIG9iamVjdCBkZXBlbmRl
bmNpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
ODEyCisKKyAgICAgICAgVG8gcHJvcGFnYXRlIHRoZSBjaGFuZ2VzIG9mIGEgcHJpbWl0aXZlIG9i
amVjdCwgYSBkYXRhIHN0cnVjdHVyZQorICAgICAgICBpcyBuZWVkZWQgd2hpY2ggc3RvcmVzIHRo
ZSBkZXBlbmRlbnQgcHJpbWl0aXZlIG9iamVjdHMuIChUaG9zZQorICAgICAgICB3aG8gdXNlIHRo
ZSByZXN1bHRpbmcgaW1hZ2UuKSBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIGltcGxlbWVudGVkCisg
ICAgICAgIGFzIGEgaGFzaCBtYXAsIHdoaWNoIGNvbnRhaW5zIHByaW1pdGl2ZSBvYmplY3QgYW5k
IHNldCBvZiBwcmltaXRpdmUKKyAgICAgICAgb2JqZWN0cyA8a2V5LHZhbHVlPiBwYWlycy4gVGhl
IGhhc2ggbWFwIGlzIGFibGUgdG8gZm9sbG93IHRoZQorICAgICAgICBkeW5hbWljIHRvcG9sb2d5
IGNoYW5nZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJp
bWl0aXZlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZTo6aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVjdFJlZmVyZW5jZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YWRkQnVpbHRpbkVmZmVjdHMpOgorCiAyMDEwLTA5
LTIzICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBTYW0gV2VpbmlnLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVz
b3VyY2VGaWx0ZXIuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXIuY3BwCmluZGV4IDY5ODAzM2UuLjRkY2NhZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAKQEAgLTkzLDcgKzkzLDYgQEAgUGFzc1JlZlB0cjxT
VkdGaWx0ZXJCdWlsZGVyPiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlcjo6YnVpbGRQcmltaXRpdmVz
KCkKIAogICAgIC8vIEFkZCBlZmZlY3RzIHRvIHRoZSBidWlsZGVyCiAgICAgUmVmUHRyPFNWR0Zp
bHRlckJ1aWxkZXI+IGJ1aWxkZXIgPSBTVkdGaWx0ZXJCdWlsZGVyOjpjcmVhdGUoKTsKLSAgICBi
dWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaWx0ZXJFbGVt
ZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgIGlmICghbm9kZS0+aXNTVkdFbGVtZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTEwOCw2ICsxMDcsNyBAQCBQYXNzUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNW
R1Jlc291cmNlRmlsdGVyOjpidWlsZFByaW1pdGl2ZXMoKQogICAgICAgICAgICAgYnVpbGRlci0+
Y2xlYXJFZmZlY3RzKCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQorICAgICAg
ICBidWlsZGVyLT5hcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoZWZmZWN0KTsKICAgICAg
ICAgZWZmZWN0RWxlbWVudC0+c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKHByaW1pdGl2ZUJvdW5kaW5n
Qm94TW9kZSwgZWZmZWN0LmdldCgpKTsKICAgICAgICAgYnVpbGRlci0+YWRkKGVmZmVjdEVsZW1l
bnQtPnJlc3VsdCgpLCBlZmZlY3QpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oCmluZGV4IDk2ZTJjNWUuLjRiMjM3
MzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVy
UHJpbWl0aXZlLmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0
ZXJQcmltaXRpdmUuaApAQCAtMzYsMTAgKzM2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUgOiBwdWJsaWMgUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyIHsKIHB1YmxpYzoKLSAgICAgUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQ
cmltaXRpdmUoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKiBmaWx0ZXJQcmlt
aXRpdmVFbGVtZW50KTsKKyAgICBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZShTVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIGZpbHRlclByaW1pdGl2ZUVsZW1lbnQp
OwogCiBwcml2YXRlOgotICAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJl
bmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRp
dmUiOyB9CisgICAgdmlydHVhbCBib29sIGlzU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3Bw
IGIvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcAppbmRl
eCA1YTZkMGI5Li5iZDI1N2Y5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRl
cnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKQEAgLTI3LDE1ICsyNywxNiBAQAogI2luY2x1ZGUgIlNv
dXJjZUFscGhhLmgiCiAjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgogCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFNWR0ZpbHRlckJ1aWxkZXI6OlNWR0ZpbHRlckJ1aWxkZXIoKQorICAgIDogbV9s
YXN0RWZmZWN0KDApCiB7CiAgICAgbV9idWlsdGluRWZmZWN0cy5hZGQoU291cmNlR3JhcGhpYzo6
ZWZmZWN0TmFtZSgpLCBTb3VyY2VHcmFwaGljOjpjcmVhdGUoKSk7CiAgICAgbV9idWlsdGluRWZm
ZWN0cy5hZGQoU291cmNlQWxwaGE6OmVmZmVjdE5hbWUoKSwgU291cmNlQWxwaGE6OmNyZWF0ZSgp
KTsKKyAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCiB2b2lkIFNWR0ZpbHRlckJ1aWxkZXI6
OmFkZChjb25zdCBBdG9taWNTdHJpbmcmIGlkLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Qp
CkBAIC02NywxMCArNjgsMjYgQEAgRmlsdGVyRWZmZWN0KiBTVkdGaWx0ZXJCdWlsZGVyOjpnZXRF
ZmZlY3RCeUlkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQpIGNvbnN0CiAgICAgcmV0dXJuIG1fbmFt
ZWRFZmZlY3RzLmdldChpZCkuZ2V0KCk7CiB9CiAKK3ZvaWQgU1ZHRmlsdGVyQnVpbGRlcjo6YXBw
ZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCkK
K3sKKyAgICAvLyBUaGUgZWZmZWN0IG11c3QgYmUgYSBuZXdseSBjcmVhdGVkIGZpbHRlciBlZmZl
Y3QuCisgICAgQVNTRVJUKCFtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7Cisg
ICAgbV9lZmZlY3RSZWZlcmVuY2VzLmFkZChlZmZlY3QsIEZpbHRlckVmZmVjdFNldCgpKTsKKwor
ICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzID0gZWZmZWN0LT5pbnB1dEVmZmVj
dHMoKTsKKyAgICBpbnQgc2l6ZSA9IGlucHV0RWZmZWN0cy5zaXplKCk7CisKKyAgICAvLyBJdCBp
cyBub3QgcG9zc2libGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgorICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBnZXRFZmZlY3RSZWZlcmVu
Y2VzKGVmZmVjdC5nZXQoKSkuYWRkKGlucHV0RWZmZWN0c1tpXS5nZXQoKSk7Cit9CisKIHZvaWQg
U1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJFZmZlY3RzKCkKIHsKICAgICBtX2xhc3RFZmZlY3QgPSAw
OwogICAgIG1fbmFtZWRFZmZlY3RzLmNsZWFyKCk7CisgICAgbV9lZmZlY3RSZWZlcmVuY2VzLmNs
ZWFyKCk7CisgICAgYWRkQnVpbHRpbkVmZmVjdHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmggYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
aAppbmRleCA0ZWY2ZmZlLi41OTE3ZjA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaAorKysgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9m
aWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
dGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+CiAKQEAgLTM0LDYgKzM1LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIAogICAgIGNsYXNzIFNWR0ZpbHRlckJ1aWxkZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxTVkdGaWx0ZXJCdWlsZGVyPiB7CiAgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIEhh
c2hTZXQ8RmlsdGVyRWZmZWN0Kj4gRmlsdGVyRWZmZWN0U2V0OworCiAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBTVkdGaWx0ZXJCdWlsZGVyKTsgfQogCiAgICAgICAgIHZvaWQgYWRkKGNvbnN0IEF0b21pY1N0
cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+IGVmZmVjdCk7CkBAIC00MSwxNSArNDQsMzIg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBGaWx0ZXJFZmZlY3QqIGdldEVmZmVjdEJ5
SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3Q7CiAgICAgICAgIEZpbHRlckVmZmVjdCog
bGFzdEVmZmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEVmZmVjdC5nZXQoKTsgfQogCi0gICAg
ICAgIGNvbnN0IEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0PiA+JiBu
YW1lZEVmZmVjdHMoKSB7IHJldHVybiBtX25hbWVkRWZmZWN0czsgfQorICAgICAgICB2b2lkIGFw
cGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhSZWZQdHI8RmlsdGVyRWZmZWN0PiBlZmZlY3Qp
OworCisgICAgICAgIGlubGluZSBGaWx0ZXJFZmZlY3RTZXQmIGdldEVmZmVjdFJlZmVyZW5jZXMo
RmlsdGVyRWZmZWN0KiBlZmZlY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9ubHkgYWxs
b3dlZCBmb3IgZWZmZWN0cyBiZWxvbmdzIHRvIHRoaXMgYnVpbGRlci4KKyAgICAgICAgICAgIEFT
U0VSVChtX2VmZmVjdFJlZmVyZW5jZXMuY29udGFpbnMoZWZmZWN0KSk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9lZmZlY3RSZWZlcmVuY2VzLmZpbmQoZWZmZWN0KS0+c2Vjb25kOworICAgICAgICB9
CiAKICAgICAgICAgdm9pZCBjbGVhckVmZmVjdHMoKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFNWR0ZpbHRlckJ1aWxkZXIoKTsKIAorICAgICAgICBpbmxpbmUgdm9pZCBhZGRCdWlsdGluRWZm
ZWN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQ
dHI8RmlsdGVyRWZmZWN0PiA+OjppdGVyYXRvciBlbmQgPSBtX2J1aWx0aW5FZmZlY3RzLmVuZCgp
OworICAgICAgICAgICAgZm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVm
ZmVjdD4gPjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZlY3RzLmJlZ2luKCk7IGl0
ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKKyAgICAgICAgICAgICAgICAgbV9lZmZlY3RSZWZl
cmVuY2VzLmFkZChpdGVyYXRvci0+c2Vjb25kLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CisgICAgICAg
IH0KKwogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4g
PiBtX2J1aWx0aW5FZmZlY3RzOwogICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRy
PEZpbHRlckVmZmVjdD4gPiBtX25hbWVkRWZmZWN0czsKKyAgICAgICAgLy8gVGhlIHZhbHVlIGlz
IGEgbGlzdCwgd2hpY2ggY29udGFpbnMgdGhvc2UgZmlsdGVyIGVmZmVjdHMsCisgICAgICAgIC8v
IHdoaWNoIGRlcGVuZHMgb24gdGhlIGtleSBmaWx0ZXIgZWZmZWN0LgorICAgICAgICBIYXNoTWFw
PFJlZlB0cjxGaWx0ZXJFZmZlY3Q+LCBGaWx0ZXJFZmZlY3RTZXQ+IG1fZWZmZWN0UmVmZXJlbmNl
czsKIAogICAgICAgICBSZWZQdHI8RmlsdGVyRWZmZWN0PiBtX2xhc3RFZmZlY3Q7CiAgICAgfTsK
LS0gCjEuNi4wLjQKCg==
</data>
<flag name="review"
          id="58233"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68896</attachid>
            <date>2010-09-27 03:42:13 -0700</date>
            <delta_ts>2010-09-27 04:17:01 -0700</delta_ts>
            <desc>Patch 2</desc>
            <filename>0001-filter-render.patch</filename>
            <type>text/plain</type>
            <size>8045</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAzZDQ0MmM1MDQ4YzMzYmRhODVjZTJiYWM0YjdkZmFjYjI2ZmEyYzFkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBNb24sIDI3IFNlcCAyMDEwIDExOjQ3OjI0ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gZmlsdGVyLXJlbmRlcgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMjcgKysrKysrKysrKysrKysrKysrKysKIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCAgICAgIHwgICAgMiArLQogLi4uL3Jl
bmRlcmluZy9SZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZS5oICAgfCAgICA1ICsrLQog
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCAgfCAgIDE5
ICsrKysrKysrKysrKystCiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1
aWxkZXIuaCAgICB8ICAgMjIgKysrKysrKysrKysrKysrLQogNSBmaWxlcyBjaGFuZ2VkLCA3MCBp
bnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdl
TG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmZhMjlkOS4uMmViMWFmYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
MCBAQAorMjAxMC0wOS0yNCAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpbHRlciBi
dWlsZGVyIHNob3VsZCBiZSBhYmxlIHRvIGZvbGxvdyB0aGUgZmlsdGVyIG9iamVjdCBkZXBlbmRl
bmNpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
ODEyCisKKyAgICAgICAgVG8gcHJvcGFnYXRlIHRoZSBjaGFuZ2VzIG9mIGEgcHJpbWl0aXZlIG9i
amVjdCwgYSBkYXRhIHN0cnVjdHVyZQorICAgICAgICBpcyBuZWVkZWQgd2hpY2ggc3RvcmVzIHRo
ZSBkZXBlbmRlbnQgcHJpbWl0aXZlIG9iamVjdHMuIChUaG9zZQorICAgICAgICB3aG8gdXNlIHRo
ZSByZXN1bHRpbmcgaW1hZ2UuKSBUaGlzIGRhdGEgc3RydWN0dXJlIGlzIGltcGxlbWVudGVkCisg
ICAgICAgIGFzIGEgaGFzaCBtYXAsIHdoaWNoIGNvbnRhaW5zIHByaW1pdGl2ZSBvYmplY3QgYW5k
IHNldCBvZiBwcmltaXRpdmUKKyAgICAgICAgb2JqZWN0cyA8a2V5LHZhbHVlPiBwYWlycy4gVGhl
IGhhc2ggbWFwIGlzIGFibGUgdG8gZm9sbG93IHRoZQorICAgICAgICBkeW5hbWljIHRvcG9sb2d5
IGNoYW5nZXMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJp
bWl0aXZlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJp
bWl0aXZlLmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZTo6cmVuZGVyTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlclByaW1pdGl2ZTo6aXNTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSk6CisgICAgICAgICog
c3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpTVkdGaWx0ZXJCdWlsZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMpOgorICAgICAg
ICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmdldEVmZmVjdFJlZmVyZW5jZXMpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YWRkQnVpbHRpbkVmZmVjdHMpOgorCiAyMDEwLTA5
LTI2ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5jcHAKaW5kZXggNjk4MDMzZS4uNGRjY2FkNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXIuY3BwCisrKyBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcApAQCAtOTMsNyArOTMsNiBAQCBQYXNz
UmVmUHRyPFNWR0ZpbHRlckJ1aWxkZXI+IFJlbmRlclNWR1Jlc291cmNlRmlsdGVyOjpidWlsZFBy
aW1pdGl2ZXMoKQogCiAgICAgLy8gQWRkIGVmZmVjdHMgdG8gdGhlIGJ1aWxkZXIKICAgICBSZWZQ
dHI8U1ZHRmlsdGVyQnVpbGRlcj4gYnVpbGRlciA9IFNWR0ZpbHRlckJ1aWxkZXI6OmNyZWF0ZSgp
OwotICAgIGJ1aWxkZXItPmNsZWFyRWZmZWN0cygpOwogICAgIGZvciAoTm9kZSogbm9kZSA9IGZp
bHRlckVsZW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5pc1NWR0VsZW1lbnQoKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtMTA4LDYgKzEwNyw3IEBAIFBhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4g
UmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXI6OmJ1aWxkUHJpbWl0aXZlcygpCiAgICAgICAgICAgICBi
dWlsZGVyLT5jbGVhckVmZmVjdHMoKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9
CisgICAgICAgIGJ1aWxkZXItPmFwcGVuZEVmZmVjdFRvRWZmZWN0UmVmZXJlbmNlcyhlZmZlY3Qp
OwogICAgICAgICBlZmZlY3RFbGVtZW50LT5zZXRTdGFuZGFyZEF0dHJpYnV0ZXMocHJpbWl0aXZl
Qm91bmRpbmdCb3hNb2RlLCBlZmZlY3QuZ2V0KCkpOwogICAgICAgICBidWlsZGVyLT5hZGQoZWZm
ZWN0RWxlbWVudC0+cmVzdWx0KCksIGVmZmVjdCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3VyY2VGaWx0ZXJQcmltaXRpdmUuaCBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmgKaW5kZXggOTZlMmM1
ZS4uNGIyMzczNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHUmVzb3Vy
Y2VGaWx0ZXJQcmltaXRpdmUuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdSZXNv
dXJjZUZpbHRlclByaW1pdGl2ZS5oCkBAIC0zNiwxMCArMzYsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlclByaW1pdGl2ZSA6IHB1YmxpYyBS
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIgewogcHVibGljOgotICAgICBSZW5kZXJTVkdSZXNvdXJj
ZUZpbHRlclByaW1pdGl2ZShTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMqIGZp
bHRlclByaW1pdGl2ZUVsZW1lbnQpOworICAgIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0
aXZlKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyogZmlsdGVyUHJpbWl0aXZl
RWxlbWVudCk7CiAKIHByaXZhdGU6Ci0gICAgIHZpcnR1YWwgYm9vbCBpc1NWR1Jlc291cmNlRmls
dGVyUHJpbWl0aXZlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTVkdSZXNvdXJjZUZpbHRl
clByaW1pdGl2ZSI7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdSZXNvdXJjZUZpbHRlclByaW1p
dGl2ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVp
bGRlci5jcHAgYi9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIu
Y3BwCmluZGV4IDVhNmQwYjkuLjkzYWZlOTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcApAQCAtMjcsMTUgKzI3LDE2IEBACiAjaW5j
bHVkZSAiU291cmNlQWxwaGEuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAKLSNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogU1ZHRmlsdGVyQnVpbGRlcjo6U1ZHRmlsdGVyQnVpbGRlcigpCisg
ICAgOiBtX2xhc3RFZmZlY3QoMCkKIHsKICAgICBtX2J1aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VH
cmFwaGljOjplZmZlY3ROYW1lKCksIFNvdXJjZUdyYXBoaWM6OmNyZWF0ZSgpKTsKICAgICBtX2J1
aWx0aW5FZmZlY3RzLmFkZChTb3VyY2VBbHBoYTo6ZWZmZWN0TmFtZSgpLCBTb3VyY2VBbHBoYTo6
Y3JlYXRlKCkpOworICAgIGFkZEJ1aWx0aW5FZmZlY3RzKCk7CiB9CiAKIHZvaWQgU1ZHRmlsdGVy
QnVpbGRlcjo6YWRkKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
IGVmZmVjdCkKQEAgLTY3LDEwICs2OCwyNiBAQCBGaWx0ZXJFZmZlY3QqIFNWR0ZpbHRlckJ1aWxk
ZXI6OmdldEVmZmVjdEJ5SWQoY29uc3QgQXRvbWljU3RyaW5nJiBpZCkgY29uc3QKICAgICByZXR1
cm4gbV9uYW1lZEVmZmVjdHMuZ2V0KGlkKS5nZXQoKTsKIH0KIAordm9pZCBTVkdGaWx0ZXJCdWls
ZGVyOjphcHBlbmRFZmZlY3RUb0VmZmVjdFJlZmVyZW5jZXMoUmVmUHRyPEZpbHRlckVmZmVjdD4g
ZWZmZWN0UmVmZXJlbmNlKQoreworICAgIC8vIFRoZSBlZmZlY3QgbXVzdCBiZSBhIG5ld2x5IGNy
ZWF0ZWQgZmlsdGVyIGVmZmVjdC4KKyAgICBBU1NFUlQoIW1fZWZmZWN0UmVmZXJlbmNlcy5jb250
YWlucyhlZmZlY3RSZWZlcmVuY2UpKTsKKyAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVj
dFJlZmVyZW5jZSwgRmlsdGVyRWZmZWN0U2V0KCkpOworCisgICAgRmlsdGVyRWZmZWN0KiBlZmZl
Y3QgPSBlZmZlY3RSZWZlcmVuY2UuZ2V0KCk7CisgICAgaW50IG51bWJlck9mSW5wdXRFZmZlY3Rz
ID0gZWZmZWN0LT5pbnB1dEVmZmVjdHMoKS5zaXplKCk7CisKKyAgICAvLyBJdCBpcyBub3QgcG9z
c2libGUgdG8gYWRkIHRoZSBzYW1lIHZhbHVlIHRvIGEgc2V0IHR3aWNlLgorICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnVtYmVyT2ZJbnB1dEVmZmVjdHM7ICsraSkKKyAgICAgICAgZ2V0RWZmZWN0
UmVmZXJlbmNlcyhlZmZlY3QtPmlucHV0RWZmZWN0KGkpKS5hZGQoZWZmZWN0KTsKK30KKwogdm9p
ZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhckVmZmVjdHMoKQogewogICAgIG1fbGFzdEVmZmVjdCA9
IDA7CiAgICAgbV9uYW1lZEVmZmVjdHMuY2xlYXIoKTsKKyAgICBtX2VmZmVjdFJlZmVyZW5jZXMu
Y2xlYXIoKTsKKyAgICBhZGRCdWlsdGluRWZmZWN0cygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRl
ckJ1aWxkZXIuaCBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRl
ci5oCmluZGV4IDRlZjZmZmUuLjMyMDA4OGQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvc3ZnL2dyYXBo
aWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvc3ZnL2dyYXBoaWNz
L2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKIAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L0F0b21pY1N0cmluZ0hhc2guaD4KIApAQCAtMzQsNiArMzUsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgCiAgICAgY2xhc3MgU1ZHRmlsdGVyQnVpbGRlciA6IHB1YmxpYyBSZWZD
b3VudGVkPFNWR0ZpbHRlckJ1aWxkZXI+IHsKICAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYg
SGFzaFNldDxGaWx0ZXJFZmZlY3QqPiBGaWx0ZXJFZmZlY3RTZXQ7CisKICAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1ZHRmlsdGVyQnVpbGRlcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYo
bmV3IFNWR0ZpbHRlckJ1aWxkZXIpOyB9CiAKICAgICAgICAgdm9pZCBhZGQoY29uc3QgQXRvbWlj
U3RyaW5nJiBpZCwgUmVmUHRyPEZpbHRlckVmZmVjdD4gZWZmZWN0KTsKQEAgLTQxLDE1ICs0NCwz
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEZpbHRlckVmZmVjdCogZ2V0RWZmZWN0
QnlJZChjb25zdCBBdG9taWNTdHJpbmcmIGlkKSBjb25zdDsKICAgICAgICAgRmlsdGVyRWZmZWN0
KiBsYXN0RWZmZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0RWZmZWN0LmdldCgpOyB9CiAKLSAg
ICAgICAgY29uc3QgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4m
IG5hbWVkRWZmZWN0cygpIHsgcmV0dXJuIG1fbmFtZWRFZmZlY3RzOyB9CisgICAgICAgIHZvaWQg
YXBwZW5kRWZmZWN0VG9FZmZlY3RSZWZlcmVuY2VzKFJlZlB0cjxGaWx0ZXJFZmZlY3Q+KTsKKwor
ICAgICAgICBpbmxpbmUgRmlsdGVyRWZmZWN0U2V0JiBnZXRFZmZlY3RSZWZlcmVuY2VzKEZpbHRl
ckVmZmVjdCogZWZmZWN0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBPbmx5IGFsbG93ZWQg
Zm9yIGVmZmVjdHMgYmVsb25ncyB0byB0aGlzIGJ1aWxkZXIuCisgICAgICAgICAgICBBU1NFUlQo
bV9lZmZlY3RSZWZlcmVuY2VzLmNvbnRhaW5zKGVmZmVjdCkpOworICAgICAgICAgICAgcmV0dXJu
IG1fZWZmZWN0UmVmZXJlbmNlcy5maW5kKGVmZmVjdCktPnNlY29uZDsKKyAgICAgICAgfQogCiAg
ICAgICAgIHZvaWQgY2xlYXJFZmZlY3RzKCk7CiAKICAgICBwcml2YXRlOgogICAgICAgICBTVkdG
aWx0ZXJCdWlsZGVyKCk7CiAKKyAgICAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVjdHMo
KQorICAgICAgICB7CisgICAgICAgICAgICBIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZp
bHRlckVmZmVjdD4gPjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZmZWN0cy5lbmQoKTsKKyAg
ICAgICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+
ID46Oml0ZXJhdG9yIGl0ZXJhdG9yID0gbV9idWlsdGluRWZmZWN0cy5iZWdpbigpOyBpdGVyYXRv
ciAhPSBlbmQ7ICsraXRlcmF0b3IpCisgICAgICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNl
cy5hZGQoaXRlcmF0b3ItPnNlY29uZCwgRmlsdGVyRWZmZWN0U2V0KCkpOworICAgICAgICB9CisK
ICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+ID4gbV9i
dWlsdGluRWZmZWN0czsKICAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0
ZXJFZmZlY3Q+ID4gbV9uYW1lZEVmZmVjdHM7CisgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBhIGxp
c3QsIHdoaWNoIGNvbnRhaW5zIHRob3NlIGZpbHRlciBlZmZlY3RzLAorICAgICAgICAvLyB3aGlj
aCBkZXBlbmRzIG9uIHRoZSBrZXkgZmlsdGVyIGVmZmVjdC4KKyAgICAgICAgSGFzaE1hcDxSZWZQ
dHI8RmlsdGVyRWZmZWN0PiwgRmlsdGVyRWZmZWN0U2V0PiBtX2VmZmVjdFJlZmVyZW5jZXM7CiAK
ICAgICAgICAgUmVmUHRyPEZpbHRlckVmZmVjdD4gbV9sYXN0RWZmZWN0OwogICAgIH07Ci0tIAox
LjYuMC40Cgo=
</data>
<flag name="review"
          id="58484"
          type_id="1"
          status="+"
          setter="krit"
    />
    <flag name="commit-queue"
          id="58485"
          type_id="3"
          status="-"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>