<?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>66878</bug_id>
          
          <creation_ts>2011-08-24 12:15:11 -0700</creation_ts>
          <short_desc>HTMLAudioElement can be garbage collected while it playing</short_desc>
          <delta_ts>2011-10-20 11:25:36 -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>Media</component>
          <version>420+</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69792</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Eugene Nalimov">enal</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>antonm</cc>
    
    <cc>ap</cc>
    
    <cc>crogers</cc>
    
    <cc>enal</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>jchaffraix</cc>
    
    <cc>ojan</cc>
    
    <cc>scherkus</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>456297</commentid>
    <comment_count>0</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-08-24 12:15:11 -0700</bug_when>
    <thetext>According to

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#playing-the-media-resource

&quot;4.8.10.8 Playing the media resource [...] Media elements must not stop playing just because all references to them have been removed; only once a media element is in a state where no further audio could ever be played by that element may the element be garbage collected. [...]&quot;

Unfortunately, that is not so with HTMLAudioElement. Original bug is Chrome one:

http://code.google.com/p/chromium/issues/detail?id=62604

That happens because Chrome internally uses HTMLAudioElement for its media player, and that element is garbage collected. Here is simple script that demonstrates the problem:

&lt;html&gt;
&lt;body&gt;
&lt;hl&gt; Test page &lt;/hl&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
function gc()
{
 if (window.GCController)
   return GCController.collect();

 for (var i = 0; i &lt; 1000; i++) {
   var s = new ArrayBuffer(10000);
 }
}

var begin_ms;
var a = new Audio(&quot;file://c:/temp/bwep.wav&quot;);
a.addEventListener(&apos;ended&apos;, function() {
 var end_ms = new Date().getTime();
 var duration_ms = end_ms - begin_ms;
 document.write(&quot;&lt;p&gt;Ended: &quot; + duration_ms + &quot;&lt;/p&gt;&quot;);
});
a.addEventListener(&apos;canplaythrough&apos;, function() {
 document.write(&quot;&lt;p&gt;CanPlayThrough&lt;/p&gt;&quot;);
 begin_ms = new Date().getTime();
 a.play();
 a = null;
 gc();
});
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;

You can use any sound file that is longer than ~1 second.

On Chrome, sound starts playing, but then abruptly stops, and no &apos;ended&apos; event is ever fired.

I believe I have simple fix, will submit is shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470191</commentid>
    <comment_count>1</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2011-09-20 11:05:14 -0700</bug_when>
    <thetext>Where we able to repro it in Safari or other ports that don&apos;t use V8?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470196</commentid>
    <comment_count>2</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-09-20 11:14:26 -0700</bug_when>
    <thetext>Bug does not demonstrate itself in Safari, or at least I was not able to cause it.

Part of the fix is in V8, so it should not affect Safari.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470816</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-09-21 08:19:23 -0700</bug_when>
    <thetext>This used to be special cased in the JS bindings, see https://bugs.webkit.org/attachment.cgi?id=32247&amp;action=review. I am not sure when isObservableThroughDOM when away, but I would *think* that a playing media element would not be collected because HTMLMediaElement derives from ActiveDOMObject and HTMLMediaElement::hasPendingActivity returns true when there are pending events. Is this not true in Chrome with your test case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470860</commentid>
    <comment_count>4</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-09-21 09:19:05 -0700</bug_when>
    <thetext>Unfortunately, just deriving from ActiveDomObject is not enough, at least in V8. You have to modify source/WebCore/bindings/scripts/CodeGeneratorV8.pm as well, adding type to the list of active types.

After that I had to change private inheritance to public, because otherwise some method used in the generated becomes inaccessible.

That is not enough, either -- when playing audio there are no pending events, so HTMLMediaElement::hasPendingActivity() returns false, and garbage collector happily deletes playing object. I had to implement hasPendingActivity() in  HTMLAudioElement.

When testing that change I hit another bug in V8 bindings -- listener object can be deleted while object that generates events is still alive, resulting in loss of JS events. Prolonging life of audio object exposed that bug, but it was in V8 forever. I was fortunate enough, my main repro case actively uses events. Fix is to change code generated for V8Node, and to do it in a way that would not cause every V8Node to have extra slot, usable only in small minority of objects. Anton Muhin helped me in investigation and suggested what fix might be.

I believe now I have all necessary changes, and will finally submit a patch shortly...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474043</commentid>
    <comment_count>5</comment_count>
      <attachid>108865</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-09-27 10:24:17 -0700</bug_when>
    <thetext>Created attachment 108865
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477682</commentid>
    <comment_count>6</comment_count>
      <attachid>108865</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-04 10:18:02 -0700</bug_when>
    <thetext>Comment on attachment 108865
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        Playing HTMLAudioElement can be garbage collected
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=66878
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Test: media/audio-garbage-collect.html

This ChangeLog isn&apos;t really helping me understand why you&apos;re making this change.  :(

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1167
&gt; +    elsif ($implClassName eq &quot;Node&quot;) {
&gt; +        push(@implContentDecls, &lt;&lt;END);
&gt; +        args.Holder()-&gt;${hiddenValueAction}HiddenValue(v8::String::Concat(v8::String::New(\&quot;listener/\&quot;),args[0]-&gt;ToString())${hiddenValueExtraArgs});

I don&apos;t really understand what this part of the change is doing.  Also, why is Node a special case?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2843
&gt;      return 1 if $type eq &quot;IDBTransaction&quot;;
&gt;      return 1 if $type eq &quot;FileReader&quot;;
&gt;      return 1 if $type eq &quot;FileWriter&quot;;
&gt; +    return 1 if $type eq &quot;HTMLAudioElement&quot;;

We shouldn&apos;t have this list in the code generator!!!  We should get this information from the IDL files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477864</commentid>
    <comment_count>7</comment_count>
      <attachid>109669</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-04 13:11:10 -0700</bug_when>
    <thetext>Created attachment 109669
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477974</commentid>
    <comment_count>8</comment_count>
      <attachid>109669</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-04 14:45:21 -0700</bug_when>
    <thetext>Comment on attachment 109669
Patch

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

I&apos;m not sure the part of this change that adds the hidden property is correct.  There can be many listeners added for each event.  I thought it was the job of V8EventListener (or one of those related classes) to stop the listener from being collected by GC.

If I were making this change, I would break it down into two parts.

1) Make CodeGeneratorV8.pm respect the ActiveDOMObject IDL attribute.  That will fix the proximate bug with HTMLAudioElement.
2) Fix the bug with event listeners getting garbage collected.

I suspect (2) is better fixed in the V8EventListener objects, which are already involved in managing the lifetimes of these objects.

&gt; Source/WebCore/ChangeLog:13
&gt; +        (b) fix v8 bindings bug that was in the code forever, event listener
&gt; +        could be garbage collected even if object it attached to is still
&gt; +        alive, resulting in the loss of events

Ah!  That makes sense.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1174
&gt; +        // value. Spec guarantees that one can have only a single event listener
&gt; +        // per event type. 

Why do we only have a single event listener for each event type?  Can&apos;t you add more with addEventListener?  Maybe you mean the onclick-like properties in the DOM?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2866
&gt; -    # FIXME: Consider making this an .idl attribute.
&gt; +    # FIXME: Make this an .idl attribute.

It is already an IDL attribute.  We need to respect the IDL attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479249</commentid>
    <comment_count>9</comment_count>
      <attachid>109972</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-06 10:15:09 -0700</bug_when>
    <thetext>Created attachment 109972
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479262</commentid>
    <comment_count>10</comment_count>
      <attachid>109972</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-10-06 10:30:25 -0700</bug_when>
    <thetext>Comment on attachment 109972
Patch

Attachment 109972 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9981274</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479264</commentid>
    <comment_count>11</comment_count>
      <attachid>109972</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-10-06 10:31:25 -0700</bug_when>
    <thetext>Comment on attachment 109972
Patch

Attachment 109972 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9969312</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479267</commentid>
    <comment_count>12</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-06 10:37:40 -0700</bug_when>
    <thetext>I tried to use ActiveDOMObject .idl attribute, in the past 2 days I
learned much more about Perl or our .idl files parser than I ever
wanted to know. Unfortunately, that is not easy -- I added comment
explaining problem and (hard) way it can be attacked. Main problem is
that Perl is not the right language to do semantic analysis, full type
info may be unavailable when we need it.

About listener: yes, technically that is unrelated problem, but for
game developer it does not matter if player itself or &quot;only&quot; listener
object was unexpectedly collected. Again, I do&apos;t see easy way to do
all the magic in the listener -- we should do actions when
adding/removing listeners to the events source, and code that does
that is auto-generated, so we have to edit generator every time new
type needs those actions. I could reuse existing mechanism used by
other types (hidden dependencies, object has to have extra slot to
keep array of those pointers), but it will grow each and every &quot;node&quot;,
while absolute majority of those objects would never have listener
attached. So I used slightly different approach.

Will send new patch after taking care of qt problem...

Thanks,
Eugene</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479289</commentid>
    <comment_count>13</comment_count>
      <attachid>109972</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-06 11:00:34 -0700</bug_when>
    <thetext>Comment on attachment 109972
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:2871
&gt; +    # FIXME: Make this an .idl attribute.
&gt; +    # Not easy because we do not have $dataNode, only $type, and caller may
&gt; +    # not have $dataNode as well. Getting extendedAttributes starting from
&gt; +    # $type is not supported. Most promising way is to iterate through all
&gt; +    # .idl files searching for the matching type name, and then look at the
&gt; +    # extendedAttributes, but that would require lot of changes...

How does CodeGeneratorJS solve this problem?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479297</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-06 11:04:19 -0700</bug_when>
    <thetext>&gt; About listener: yes, technically that is unrelated problem, but for
&gt; game developer it does not matter if player itself or &quot;only&quot; listener
&gt; object was unexpectedly collected.

Generally, we prefer to separate different issues into different patches.  Is there any technical benefit for fixing these two bugs in the same patch?  I agree that we should fix both bugs, but they should be fixed in separate patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479312</commentid>
    <comment_count>15</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-06 11:24:24 -0700</bug_when>
    <thetext>CodeGeneratorJS does not have &quot;bad&quot; caller, GetDomMapFunction(). It is
called when generating ${attrName}AttrGetter() -- actually,
CodeGeneratorJS does not generate ${attrName}AttrGetter() at all.

There, GetDomMapFunction() is called with $returnType, which is return
type for getter. At this point we have type name only, not pointer to
all the type info...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479314</commentid>
    <comment_count>16</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-06 11:25:04 -0700</bug_when>
    <thetext>Without 2nd fix I could not invent test case that demonstrates the 1st
problem is fixed. You don&apos;t want person to sit and listen to be sure
that audio played fully. Test case relies on the events...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479417</commentid>
    <comment_count>17</comment_count>
      <attachid>110005</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-06 13:18:59 -0700</bug_when>
    <thetext>Created attachment 110005
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481175</commentid>
    <comment_count>18</comment_count>
      <attachid>110005</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-10 14:35:02 -0700</bug_when>
    <thetext>Comment on attachment 110005
Patch

I&apos;m working on a patch to remove IsActiveDomType.  I&apos;ll upload it on a bug that&apos;s blocking this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481318</commentid>
    <comment_count>19</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-10 17:11:53 -0700</bug_when>
    <thetext>Ok.  That patch as landed.  Hopefully that unblocks this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481925</commentid>
    <comment_count>20</comment_count>
      <attachid>110580</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-11 14:43:07 -0700</bug_when>
    <thetext>Created attachment 110580
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481938</commentid>
    <comment_count>21</comment_count>
      <attachid>110580</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-11 14:51:49 -0700</bug_when>
    <thetext>Comment on attachment 110580
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        (b) fix v8 bindings bug that was in the code forever, event listener
&gt; +        could be garbage collected even if object it attached to is still
&gt; +        alive, resulting in the loss of events.

This part of the change doesn&apos;t appear to be in this patch anymore.  Maybe update the ChangeLog?

&gt; Source/WebCore/bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:50
&gt; -WrapperTypeInfo V8HTMLAudioElementConstructor::info = { V8HTMLAudioElementConstructor::GetTemplate, 0, 0, 0 };
&gt; +WrapperTypeInfo V8HTMLAudioElementConstructor::info = { V8HTMLAudioElementConstructor::GetTemplate, V8HTMLAudioElement::derefObject, V8HTMLAudioElement::toActiveDOMObject, 0 };

Do we need to do this for every ActiveDOMObject?  Why doesn&apos;t the code generator do this for us?

&gt; Source/WebCore/bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:78
&gt; -    V8DOMWrapper::setJSWrapperForDOMNode(audio.get(), v8::Persistent&lt;v8::Object&gt;::New(args.Holder()));
&gt; +    V8DOMWrapper::setJSWrapperForActiveDOMObject(audio.get(), v8::Persistent&lt;v8::Object&gt;::New(args.Holder()));

Do we need to do this for every active dom object?  Should we check all the constructors for active DOM objects?

&gt; LayoutTests/fast/xpath/xpath-result-eventlistener-crash.html:29
&gt; -    for (var i = 0; i &lt; 5000; ++i)
&gt; +    for (var i = 0; i &lt; 2000; ++i)

This change seems unrelated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481946</commentid>
    <comment_count>22</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-11 14:58:52 -0700</bug_when>
    <thetext>(1) Oops, code generator changes somehow not included into patch... Will resubmit shortly...

&gt;Do we need to do this for every ActiveDOMObject?  Why doesn&apos;t the code generator &gt;do this for us?

&gt;&gt; Source/WebCore/bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:78
&gt;&gt; -    V8DOMWrapper::setJSWrapperForDOMNode(audio.get(), v8::Persistent&lt;v8::Object&gt;::New(args.Holder()));
&gt;&gt; +    V8DOMWrapper::setJSWrapperForActiveDOMObject(audio.get(), v8::Persistent&lt;v8::Object&gt;::New(args.Holder()));

&gt;Do we need to do this for every active dom object?  Should we check all the &gt;constructors for active DOM objects?

(2) That is custom constructor, not generated one. If it was generated everything would be Ok.

&gt;&gt; LayoutTests/fast/xpath/xpath-result-eventlistener-crash.html:29
&gt;&gt; -    for (var i = 0; i &lt; 5000; ++i)
&gt;&gt; +    for (var i = 0; i &lt; 2000; ++i)

&gt;This change seems unrelated.

(3) On my (slow) Mac test started to time out when running debug Chrome build, because event listener became slower. Reduced number of iterations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481949</commentid>
    <comment_count>23</comment_count>
      <attachid>110585</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-11 15:07:03 -0700</bug_when>
    <thetext>Created attachment 110585
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481950</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-11 15:11:58 -0700</bug_when>
    <thetext>&gt; &gt;&gt; LayoutTests/fast/xpath/xpath-result-eventlistener-crash.html:29
&gt; &gt;&gt; -    for (var i = 0; i &lt; 5000; ++i)
&gt; &gt;&gt; +    for (var i = 0; i &lt; 2000; ++i)
&gt; 
&gt; &gt;This change seems unrelated.
&gt; 
&gt; (3) On my (slow) Mac test started to time out when running debug Chrome build, because event listener became slower. Reduced number of iterations.

Does this mean your patch is causing a performance regression (even in release)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481951</commentid>
    <comment_count>25</comment_count>
      <attachid>110585</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-11 15:13:27 -0700</bug_when>
    <thetext>Comment on attachment 110585
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1183
&gt; +        char prefix[64];
&gt; +        sprintf(prefix, \&quot;listener/%p/\&quot;, listener.get());
&gt; +        args.Holder()-&gt;${hiddenValueAction}HiddenValue(v8::String::Concat(v8::String::New(prefix), args[0]-&gt;ToString())${hiddenValueExtraArgs});

I&apos;m still skeptical about this approach.  This doesn&apos;t seem like the right way of solving this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481958</commentid>
    <comment_count>26</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-11 15:23:31 -0700</bug_when>
    <thetext>&gt;Does this mean your patch is causing a performance regression (even in release)?

In release test passed, but I assume code became slower, too -- I am doing more when adding/removing event listener. Some other types are also have slower add/removeEventListenerCallback() because they also keep track of listener objects, but V8Node till that moment did not keep track, and that was the bug...

&gt;I&apos;m still skeptical about this approach.  This doesn&apos;t seem like the right way of solving this problem.

I discussed it with Anton Muhin. Initially he thought I should do what all other objects are doing, that is adding/removing hidden dependency, but later suggested that approach. He believes that is better, because it avoids adding extra slot to V8Node object -- there are lot of nodes, and absolute majority of them would never have listener attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481963</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-11 15:32:59 -0700</bug_when>
    <thetext>Would it be better to do the work during GC using object groups?  Can&apos;t we just add the slot to V8AudioElement and not to all V8Nodes ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482141</commentid>
    <comment_count>28</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-11 18:33:02 -0700</bug_when>
    <thetext>&gt;Can&apos;t we just add the slot to V8AudioElement and not to all V8Nodes ? 

Take a look at the test which I had to speed up, LayoutTests/fast/xpath/xpath-result-eventlistener-crash.html. There is no single HTMLAudioElement in it, but it adds event listener to JS object that inherits from V8Node. And I bet it&apos;s possible to write similar test demonstrating the problem...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482231</commentid>
    <comment_count>29</comment_count>
      <attachid>110585</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-11 22:47:04 -0700</bug_when>
    <thetext>Comment on attachment 110585
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.h:61
&gt; -class HTMLMediaElement : public HTMLElement, public MediaPlayerClient, private MediaCanStartListener, private ActiveDOMObject {
&gt; +class HTMLMediaElement : public HTMLElement, public MediaPlayerClient, private MediaCanStartListener, public ActiveDOMObject {

I think the plan is to stop inheriting from ActiveDOMObject in HTMLMediaElement.

&gt; LayoutTests/fast/xpath/xpath-result-eventlistener-crash.html:29
&gt; -    for (var i = 0; i &lt; 5000; ++i)
&gt; +    for (var i = 0; i &lt; 2000; ++i)

Please don&apos;t make unrelated tests weaker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482468</commentid>
    <comment_count>30</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 09:47:49 -0700</bug_when>
    <thetext>&gt; I think the plan is to stop inheriting from ActiveDOMObject in HTMLMediaElement.

Do you have an alternative proposal for fixing this bug without making HMLTAudioElement an active DOM object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482524</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-10-12 10:55:30 -0700</bug_when>
    <thetext>I should have been specific about reasons for r-, which is because of XPath test changes. Changing ActiveDOMObject inheritance from private to public is not a big deal - this comment was informative. Sorry for the confusion.

In fact, it may no longer be true that we need to stop inheriting from ActiveDOMObject. I&apos;ve been thinking of bug 45306 comment 9 and bug 45309, which both seem obsolete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482545</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 11:14:45 -0700</bug_when>
    <thetext>Thanks Alexey.  I agree that the changes to the XPath test are incorrect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482558</commentid>
    <comment_count>33</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-12 11:31:45 -0700</bug_when>
    <thetext>As suggested, working on much smaller change that fixes only V8HTMLAudioElement, without attempts to fix V8Node addEventListenerCallback() issue.

That will avoid non-trivial changes in the code generator or changes in seemingly unrelated files.

Will send for review later today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482578</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 11:46:17 -0700</bug_when>
    <thetext>&gt; As suggested, working on much smaller change that fixes only V8HTMLAudioElement, without attempts to fix V8Node addEventListenerCallback() issue.

I see.  This can occur even for Nodes which aren&apos;t ActiveDOMObjects if something retains the Node without retaining the EventListener.  The EventListener can then be GCed and the Node won&apos;t be GCed.

I&apos;m curious why it isn&apos;t a better solution to group the Nodes and their EventListeners in V8GCController so they&apos;re collected together or not at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482582</commentid>
    <comment_count>35</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-12 11:52:41 -0700</bug_when>
    <thetext>I never worked with object groups, and heard that such thing exists only yesterday.

In any case, we can create object, and add event listener much later. Or we can remove event listener from the node, and add new one -- in such case it is perfectly Ok to GC first event listener, I would even argue it is bug not to collect unused event listener...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482586</commentid>
    <comment_count>36</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-12 11:59:47 -0700</bug_when>
    <thetext>&gt; I never worked with object groups, and heard that such thing exists only yesterday.

Basically they way it works is just before we run a GC, we can temporarily group objects together so that they&apos;re all collected together or not at all.  For example, that&apos;s who we keep CSSOM wrappers alive.  In this case, we&apos;d associate event listeners with their Nodes.

There are trade-offs involved.  The approach you&apos;ve got here pays a runtime and memory cost O(number of event listeners added/removed).  The GCController approach pays a runtime cost O(number of nodes) or something else if we&apos;re more clever.

I still think the right approach here is to fix HTMLAudioElement to not be GCed why playing and to worry about the event listener issue in a separate bug.  The event listener thing is subtle and needs to be done carefully.

It&apos;s unfortunate that we can&apos;t write a test for the HTMLAudioElement issue before fixing the event listener issue.  One way to handle that is to file a bug for adding the test that&apos;s blocked on the (new) event listener bug.  When we fix the event listener bug, we can land the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483191</commentid>
    <comment_count>37</comment_count>
      <attachid>110845</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-13 08:15:28 -0700</bug_when>
    <thetext>Created attachment 110845
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483222</commentid>
    <comment_count>38</comment_count>
      <attachid>110845</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-13 09:03:29 -0700</bug_when>
    <thetext>Comment on attachment 110845
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        Fix consists of 2 parts:
&gt; +        (a) make HTMLAudioElement an &apos;active&apos; one, meaning that it cannot be
&gt; +        garbage collected if it has panding activity
&gt; +        (b) workaround for v8 bindings bug that was in the code forever, event
&gt; +        listener could be garbage collected even if object it attached to is
&gt; +        still alive, resulting in the loss of events. Workaround is to make
&gt; +        HTMLAudioElement to implement EventTarget interface, and modify code
&gt; +        generator to create hidden dependency between object and event listener
&gt; +        even for types that inherit from Node (but not for Node itself).

Can&apos;t this be broken into two patches? While part (a) depends on part (b), the later is not specific to this bug and seems worthy of its own bug/patch.

&gt; LayoutTests/media/audio-garbage-collect.html:7
&gt; +&lt;html&gt;
&gt; +&lt;body&gt;
&gt; +
&gt; +&lt;p&gt;Tests that we don&apos;t garbage collect playing audio object or event listener.&lt;/p&gt;
&gt; +&lt;p&gt;According to http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html,&lt;br /&gt;

Nit: Indentation would make this file much more readable, IMO.

&gt; LayoutTests/media/audio-garbage-collect.html:18
&gt; +&lt;/p&gt;
&gt; +
&gt; +&lt;script src=media-file.js&gt;&lt;/script&gt;
&gt; +&lt;script src=video-test.js&gt;&lt;/script&gt;

Nit: Is there any reason to not have the script nodes in &lt;head&gt;?

&gt; LayoutTests/media/audio-garbage-collect.html:26
&gt; +var a;
&gt; +var num_played;
&gt; +var total_played = 0;

Nit: is there any reason to have these in the global scope?

&gt; LayoutTests/media/audio-garbage-collect.html:46
&gt; +  var audioFile = findMediaFile(&quot;audio&quot;, &quot;content/click2&quot;);

1. Why do you need a new audio file, can&apos;t you use silence.wav (it and all of the existing files with audio tracks purposely have encoded silence so a computer running layout tests doesn&apos;t make noise)? If it is too long, just seek to near the end before starting playback. 
2. findMediaFile() is only necessary when you have a multiple versions of a media file with different encodings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483236</commentid>
    <comment_count>39</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-13 09:24:58 -0700</bug_when>
    <thetext>&gt;Can&apos;t this be broken into two patches?

I thought about that. Problem is that I could not (easily) reproduce 2nd problem without 1st fix, I tried and then gave up. At lest now all changes are HTMLAudioElement-only.

I&apos;ll do that if you say I need, but I&apos;d prefer to have one checkin that fixes HTML5 GC-related problems...

&gt;Nit: Is there any reason to not have the script nodes in &lt;head&gt;?
&gt;Nit: Indentation would make this file much more readable, IMO.

I did not invented test from scratch. I started from existing one, and modified it. I believe absolute majority of our tests following that pattern...

&gt;Nit: is there any reason to have these in the global scope?

I have to have communicating callbacks (event functions), and I thought that just using globals would be simplest way. Here you don&apos;t need smart code, you need code that can be understood by average developer in 30 seconds...

&gt;1. Why do you need a new audio file, can&apos;t you use silence.wav (it and all of the existing files with audio tracks purposely have encoded silence so a computer running layout tests doesn&apos;t make noise)? If it is too long, just seek to near the end before starting playback.

On specific file problem demonstrates itself much more often than on other files. Maybe that is exact timing, maybe something else, I tried silence.wav and decided I&apos;d better check in file where problem happens 95% of times.
 
&gt;2. findMediaFile() is only necessary when you have a multiple versions of a media file with different encodings.

All audio tests use that functions to open files, I decided to do that as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483238</commentid>
    <comment_count>40</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-13 09:30:26 -0700</bug_when>
    <thetext>More, both fixes touch exactly the same file -- HTMLAudioElement.idl...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483248</commentid>
    <comment_count>41</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-13 09:51:01 -0700</bug_when>
    <thetext>(In reply to comment #39)
&gt; 
&gt; &gt;Nit: Is there any reason to not have the script nodes in &lt;head&gt;?
&gt; &gt;Nit: Indentation would make this file much more readable, IMO.
&gt; 
&gt; I did not invented test from scratch. I started from existing one, and modified it. I believe absolute majority of our tests following that pattern...

  You may not have invented the test, but it is new to the media directory, where the absolute majority of tests do NOT follow this pattern.


&gt; &gt;Nit: is there any reason to have these in the global scope?
&gt; 
&gt; I have to have communicating callbacks (event functions), and I thought that just using globals would be simplest way. 

  Aren&apos;t all of your event listeners in start&apos;s scope?

&gt; Here you don&apos;t need smart code you need code that can be understood by average developer in 30 seconds...
  We need to write code that can be understood by the average developer in 30 seconds? I haven&apos;t heard this &quot;rule&quot; before, do we have &quot;average&quot; developers contributing a lot of code to WebKit? 

  In any case, I definitely don&apos;t agree. IWebKit code doesn&apos;t need to be complex, but it *should* be clean and understandable by WebKit contributors. It should not be needlessly sloppy, IMO.


&gt; &gt;1. Why do you need a new audio file, can&apos;t you use silence.wav (it and all of the existing files with audio tracks purposely have encoded silence so a computer running layout tests doesn&apos;t make noise)? If it is too long, just seek to near the end before starting playback.
&gt; 
&gt; On specific file problem demonstrates itself much more often than on other files. Maybe that is exact timing, maybe something else, I tried silence.wav and decided I&apos;d better check in file where problem happens 95% of times.
&gt; 

  Are you saying that the problem does not happen with other files? If so, I don&apos;t think we understand the problem - how can the content of a media file change the behavior of the GC?


&gt; &gt;2. findMediaFile() is only necessary when you have a multiple versions of a media file with different encodings.
&gt; 
&gt; All audio tests use that functions to open files, I decided to do that as well.

  Read the function. It is only necessary when there are multiple encodings of a given file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483278</commentid>
    <comment_count>42</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-13 10:23:39 -0700</bug_when>
    <thetext>1. Will work on cleaning up the test... 
2. Depending on exactly when GC happens -- during playback, or after playback, when event was fired but still waiting in the message queue -- we are hitting either one of 2 bugs, or if we are lucky no bug at all (for majority of test we have reference to audio player, and if GC happens after we fire the first event but before we add next event then 2nd bug would not be noticeable, too). So test behavior depends on the exact duration of audio stream, and to some degree on CPU speed, though this degree is much smaller. I&apos;ll try to use silence.wav and figure out exact position in file, hope will be able to do so.
3. I don&apos;t think closure is trivial concept, or that all developers know about it, or know exact JS semantics, but I will change the test to use closure (i.e. local scope).
4. Will send next revision for review either later today or tomorrow. Working on M15 blocker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485406</commentid>
    <comment_count>43</comment_count>
      <attachid>110845</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-17 12:49:57 -0700</bug_when>
    <thetext>Comment on attachment 110845
Patch

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

I agree with Eric that the V8 bindings fix and the audio element fix should be separated.

&gt; Source/WebCore/html/HTMLAudioElement.h:43
&gt; +    virtual bool hasPendingActivity() const { return isPlaying() || HTMLMediaElement::hasPendingActivity(); }

This should be private, not public.

&gt; Source/WebCore/html/HTMLAudioElement.idl:29
&gt; +        EventTarget,

This is a bad idea.

&gt; Source/WebCore/html/HTMLAudioElement.idl:40
&gt; +        // EventTarget interface                           
&gt; +        void addEventListener(in DOMString type,
&gt; +                              in EventListener listener,
&gt; +                              in [Optional] boolean useCapture);
&gt; +        void removeEventListener(in DOMString type,
&gt; +                                 in EventListener listener,
&gt; +                                 in [Optional] boolean useCapture);
&gt; +        boolean dispatchEvent(in Event event)
&gt; +            raises(EventException);    

This is wrong. We never have to repeat the EventTarget interface like this in a Node subclass. If this was necessary we’d have it tons of other classes too.

&gt; Source/WebCore/html/HTMLMediaElement.h:61
&gt; +class HTMLMediaElement : public HTMLElement, public MediaPlayerClient, private MediaCanStartListener, public ActiveDOMObject {

This should stay private.

&gt; Source/WebCore/html/HTMLMediaElement.h:208
&gt; +    virtual bool hasPendingActivity() const;

This should be protected, not public.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485432</commentid>
    <comment_count>44</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-17 13:14:23 -0700</bug_when>
    <thetext>&gt;I agree with Eric that the V8 bindings fix and the audio element fix should be separated.

Ok, will separate. Hope I&apos;ll be able to check in audio element fix without test case -- I was told it is no-no...

&gt;This should be private, not public.

The moment you make type &quot;officially&quot; active -- i.e. it does not just inherit from ActiveDOMObject, but code generator knows about it -- hasPendingActivity() should be public, otherwise some generated code would not compile: http://queues.webkit.org/results/9969312. I initially had protected/private, exactly as you suggested...

&gt;This is wrong. We never have to repeat the EventTarget interface like this in a Node subclass. If this was necessary we’d have it tons of other classes too.

I tried to limit the change to HTMLAudioElement node, without touching Node class -- reviewer wrote &quot;... event listener thing is subtle and needs to be done carefully.&quot;... My initial attempt included Node fix, and I still think it is right one.

Will submit audio fix only, but we really need both parts of the fix, because events are being lost...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486843</commentid>
    <comment_count>45</comment_count>
      <attachid>111634</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-19 09:29:55 -0700</bug_when>
    <thetext>Created attachment 111634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486953</commentid>
    <comment_count>46</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-10-19 13:33:59 -0700</bug_when>
    <thetext>I am not qualified to review the V8 portion of the fix, but the media element changes look fine. 

I would, however, like to see a layout test with this change. Wouldn&apos;t it be possible to include a layout test if this change is submitted after bug 70421?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486971</commentid>
    <comment_count>47</comment_count>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-19 13:45:46 -0700</bug_when>
    <thetext>I can try submitting fix for 70421 first, but it will have exactly the same issue -- its layout test would be blocked by that bug. Garbage collection triggers both issues, and bugs manifest themselves only if timing is right. Maybe it&apos;s possible to invent separate test case for 70421, but I could not. (I was told there were bug reports about events losses, but they are not in our bug databases, and reproducing is extremely unreliable...)

That is why I tried to submit both fixes together...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486981</commentid>
    <comment_count>48</comment_count>
      <attachid>111634</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-10-19 14:00:34 -0700</bug_when>
    <thetext>Comment on attachment 111634
Patch

Thanks.  Please be sure to add a test once we fix Bug 70421.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487541</commentid>
    <comment_count>49</comment_count>
      <attachid>111764</attachid>
    <who name="Eugene Nalimov">enal</who>
    <bug_when>2011-10-20 07:09:10 -0700</bug_when>
    <thetext>Created attachment 111764
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487726</commentid>
    <comment_count>50</comment_count>
      <attachid>111764</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-20 11:25:27 -0700</bug_when>
    <thetext>Comment on attachment 111764
Patch

Clearing flags on attachment: 111764

Committed r98005: &lt;http://trac.webkit.org/changeset/98005&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487727</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-20 11:25:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108865</attachid>
            <date>2011-09-27 10:24:17 -0700</date>
            <delta_ts>2011-10-04 13:11:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20110927102416.patch</filename>
            <type>text/plain</type>
            <size>12082</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2MTIzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0OiBtZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3Qu
aHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06Cisg
ICAgICAgIChHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFjayk6CisgICAgICAgIChJc0FjdGl2
ZURvbVR5cGUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1l
bnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2OEhUTUxBdWRpb0VsZW1lbnRD
b25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdWRpb0VsZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50Lmg6CisKIDIwMTEtMDktMjcgIENzYWJh
IE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggRU5BQkxFKFNR
TF9EQVRBQkFTRSk9MCBidWlsZCBhZnRlciByOTU5MTkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA5NTk3
MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBt
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQ2LDYgKzExNDYsOCBAQCBzdWIgR2VuZXJhdGVFdmVudExp
c3RlbmVyQ2FsbGJhY2sKICAgICBteSAkbG9va3VwVHlwZSA9ICgkZnVuY3Rpb25OYW1lIGVxICJh
ZGQiKSA/ICJPckNyZWF0ZSIgOiAiT25seSI7CiAgICAgbXkgJHBhc3NSZWZQdHJIYW5kbGluZyA9
ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICIiIDogIi5nZXQoKSI7CiAgICAgbXkgJGhpZGRl
bkRlcGVuZGVuY3lBY3Rpb24gPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiY3JlYXRlIiA6
ICJyZW1vdmUiOworICAgIG15ICRoaWRkZW5WYWx1ZUFjdGlvbiA9ICgkZnVuY3Rpb25OYW1lIGVx
ICJhZGQiKSA/ICJTZXQiIDogIkRlbGV0ZSI7CisgICAgbXkgJGhpZGRlblZhbHVlRXh0cmFBcmdz
ID0gKCRmdW5jdGlvbk5hbWUgZXEgImFkZCIpID8gIiwgYXJnc1sxXSIgOiAiIjsKICAKICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+ICR7ZnVuY3Rpb25OYW1lfUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1l
bnRzJiBhcmdzKQpAQCAtMTE2MCw2ICsxMTYyLDExIEBAIEVORAogICAgICAgICAke2hpZGRlbkRl
cGVuZGVuY3lBY3Rpb259SGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBW
OCR7aW1wbENsYXNzTmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKIEVORAogICAgIH0K
KyAgICBlbHNpZiAoJGltcGxDbGFzc05hbWUgZXEgIk5vZGUiKSB7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50RGVjbHMsIDw8RU5EKTsKKyAgICAgICAgYXJncy5Ib2xkZXIoKS0+JHtoaWRkZW5W
YWx1ZUFjdGlvbn1IaWRkZW5WYWx1ZSh2ODo6U3RyaW5nOjpDb25jYXQodjg6OlN0cmluZzo6TmV3
KFwibGlzdGVuZXIvXCIpLGFyZ3NbMF0tPlRvU3RyaW5nKCkpJHtoaWRkZW5WYWx1ZUV4dHJhQXJn
c30pOworRU5ECisgICAgfQogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAg
ICB9CiAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTI4MzMsNiArMjg0MCw3IEBAIHN1
YiBJc0FjdGl2ZURvbVR5cGUKICAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSURCVHJhbnNhY3Rp
b24iOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJGaWxlUmVhZGVyIjsKICAgICByZXR1cm4g
MSBpZiAkdHlwZSBlcSAiRmlsZVdyaXRlciI7CisgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkhU
TUxBdWRpb0VsZW1lbnQiOwogICAgIHJldHVybiAwOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDk1OTcyKQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVdyYXBwZXJUeXBlSW5mbyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsg
VjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCAwLCAwLCAwIH07CitX
cmFwcGVyVHlwZUluZm8gVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4
SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgVjhIVE1MQXVkaW9FbGVt
ZW50OjpkZXJlZk9iamVjdCwgVjhIVE1MQXVkaW9FbGVtZW50Ojp0b0FjdGl2ZURPTU9iamVjdCwg
MCB9OwogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvRWxlbWVudENv
bnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKQEAgLTY1LDcg
KzY1LDYgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxBdWRpbwogICAgIC8v
IG1heSBlbmQgdXAgYmVpbmcgdGhlIG9ubHkgbm9kZSBpbiB0aGUgbWFwIGFuZCBnZXQgZ2FyYmFn
ZS1jb2xsZWN0ZWQgcHJlbWF0dXJlbHkuCiAgICAgdG9WOChkb2N1bWVudCk7CiAKLQogICAgIFN0
cmluZyBzcmM7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAwKQogICAgICAgICBzcmMgPSB0b1dl
YkNvcmVTdHJpbmcoYXJnc1swXSk7CkBAIC03Myw3ICs3Miw3IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW8KIAogICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBl
cihhcmdzLkhvbGRlcigpLCAmVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8sIGF1
ZGlvLmdldCgpKTsKICAgICBhdWRpby0+cmVmKCk7Ci0gICAgVjhET01XcmFwcGVyOjpzZXRKU1dy
YXBwZXJGb3JET01Ob2RlKGF1ZGlvLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6
TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckFj
dGl2ZURPTU9iamVjdChhdWRpby5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5l
dyhhcmdzLkhvbGRlcigpKSk7CiAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5oCShyZXZpc2lvbiA5NTk3MikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NCw2ICs0NCw3IEBAIHByaXZhdGU6CiAgICAgSFRNTEF1ZGlvRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgYm9vbCBpc1ZpZGVvKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QgeyByZXR1cm4gaXNQbGF5aW5nKCkgfHwgSFRNTE1lZGlhRWxlbWVudDo6aGFzUGVu
ZGluZ0FjdGl2aXR5KCk7IH0KIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA5NTk3MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3
IEBAIGNsYXNzIFdpZGdldDsKIC8vIEJ1dCBpdCBjYW4ndCBiZSB1bnRpbCB0aGUgQ2hyb21pdW0g
V2ViTWVkaWFQbGF5ZXJDbGllbnRJbXBsIGNsYXNzIGlzIGZpeGVkIHNvIGl0CiAvLyBubyBsb25n
ZXIgZGVwZW5kcyBvbiB0eXBlY2FzdGluZyBhIE1lZGlhUGxheWVyQ2xpZW50IHRvIGFuIEhUTUxN
ZWRpYUVsZW1lbnQuCiAKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1l
bnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVu
ZXIsIHByaXZhdGUgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBw
dWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRp
YUNhblN0YXJ0TGlzdGVuZXIsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAg
IE1lZGlhUGxheWVyKiBwbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllci5nZXQoKTsgfQog
ICAgIApAQCAtMjI3LDYgKzIyNyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2V0
RGlzcGxheU1vZGUoRGlzcGxheU1vZGUgbW9kZSkgeyBtX2Rpc3BsYXlNb2RlID0gbW9kZTsgfQog
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CiAKICAg
ICAvLyBSZXN0cmljdGlvbnMgdG8gY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3JzLgogICAgIGVudW0g
QmVoYXZpb3JSZXN0cmljdGlvbkZsYWdzIHsKQEAgLTI2Nyw3ICsyNjgsNiBAQCBwcml2YXRlOgog
ICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pOwogICAgIHZpcnR1
YWwgdm9pZCByZXN1bWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAgIHZpcnR1YWwg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQg
bWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTYxMjMpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAx
MS0wOS0yNyAgRXVnZW5lIE5hbGltb3YgIDxlbmFsQGNocm9taXVtLm9yZz4KKworICAgICAgICBQ
bGF5aW5nIEhUTUxBdWRpb0VsZW1lbnQgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogbWVkaWEvYXVkaW8tZ2Fy
YmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvYXVkaW8t
Z2FyYmFnZS1jb2xsZWN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL2NvbnRlbnQvY2xp
Y2syLndhdjogQWRkZWQuCisKIDIwMTEtMDktMjcgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZy
YWl4QHdlYmtpdC5vcmc+CiAKICAgICAgICAgQ3Jhc2ggYmVjYXVzZSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBhc3N1bWVzIGZvbnRNZXRyaWNzIGFyZSBhdmFpbGFibGUK
SW5kZXg6IExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdh
cmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAK
K1Rlc3RzIHRoYXQgd2UgZG9uJ3QgZ2FyYmFnZSBjb2xsZWN0IHBsYXlpbmcgYXVkaW8gb2JqZWN0
IG9yIGV2ZW50IGxpc3RlbmVyLgorCitBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53aGF0d2cub3Jn
L3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLXZpZGVvLWVsZW1lbnQu
aHRtbCwKKyI0LjguMTAuOCBQbGF5aW5nIHRoZSBtZWRpYSByZXNvdXJjZSIsCisiTWVkaWEgZWxl
bWVudHMgbXVzdCBub3Qgc3RvcCBwbGF5aW5nIGp1c3QgYmVjYXVzZSBhbGwgcmVmZXJlbmNlcyB0
byB0aGVtIGhhdmUgYmVlbiByZW1vdmVkOyBvbmx5IG9uY2UgYSBtZWRpYSBlbGVtZW50IGlzIGlu
IGEgc3RhdGUgd2hlcmUgbm8gZnVydGhlciBhdWRpbyBjb3VsZCBldmVyIGJlIHBsYXllZCBieSB0
aGF0IGVsZW1lbnQgbWF5IHRoZSBlbGVtZW50IGJlIGdhcmJhZ2UgY29sbGVjdGVkLiIKKworKHNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzggYW5kIGh0dHA6
Ly9jcmJ1Zy5jb20vNjI2MDQgZm9yIG1vcmUgZGV0YWlscykuCisKK1BBU1MKKworCkluZGV4OiBM
YXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRNTD4KKworPGh0bWw+Cis8Ym9k
eT4KKworPHA+VGVzdHMgdGhhdCB3ZSBkb24ndCBnYXJiYWdlIGNvbGxlY3QgcGxheWluZyBhdWRp
byBvYmplY3Qgb3IgZXZlbnQgbGlzdGVuZXIuPC9wPgorPHA+QWNjb3JkaW5nIHRvIGh0dHA6Ly93
d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS12
aWRlby1lbGVtZW50Lmh0bWwsPGJyIC8+CisiNC44LjEwLjggUGxheWluZyB0aGUgbWVkaWEgcmVz
b3VyY2UiLDxiciAvPgorIk1lZGlhIGVsZW1lbnRzIG11c3Qgbm90IHN0b3AgcGxheWluZyBqdXN0
IGJlY2F1c2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBoYXZlCitiZWVuIHJlbW92ZWQ7IG9ubHkg
b25jZSBhIG1lZGlhIGVsZW1lbnQgaXMgaW4gYSBzdGF0ZSB3aGVyZSBubyBmdXJ0aGVyIGF1ZGlv
Citjb3VsZCBldmVyIGJlIHBsYXllZCBieSB0aGF0IGVsZW1lbnQgbWF5IHRoZSBlbGVtZW50IGJl
IGdhcmJhZ2UgY29sbGVjdGVkLiI8YnIgLz48YnIgLz4KKyhzZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODc4IGFuZCBodHRwOi8vY3JidWcuY29tLzYyNjA0IGZv
ciBtb3JlIGRldGFpbHMpLjwvcD4KKzxwIGlkPSJyZXN1bHQiPgorICAgIEZBSUw6IFRlc3QgZWl0
aGVyIHN0aWxsIHJ1bm5pbmcgb3Igc3RvcHBlZCBwcmVtYXR1cmVseS4KKzwvcD4KKworPHNjcmlw
dCBzcmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPXZpZGVvLXRlc3QuanM+
PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBudW1fcGxh
eWVycyA9IDQ7Cit2YXIgcGxheV90aW1lcyA9IDU7CisKK3ZhciBhOwordmFyIG51bV9wbGF5ZWQ7
Cit2YXIgdG90YWxfcGxheWVkID0gMDsKKworZnVuY3Rpb24gZm9yY2VHQygpIHsKKyAgaWYgKHdp
bmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisK
KyAgLy8gRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uCisgIGZvciAodmFyIG5keCA9IDA7IG5keCA8
IDk5MDAwOyBuZHggKyspCisgICAgdmFyIHN0ciA9IG5ldyBTdHJpbmcoIjEyMzQiKTsKK30KKwor
ZnVuY3Rpb24gZmluaXNoKCkgeworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0Iiku
aW5uZXJUZXh0ID0gIlBBU1MiOworICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICB9Cit9CisKK2Z1bmN0
aW9uIHN0YXJ0KCkgeworICBudW1fcGxheWVkID0gMDsKKyAgdmFyIGF1ZGlvRmlsZSA9IGZpbmRN
ZWRpYUZpbGUoImF1ZGlvIiwgImNvbnRlbnQvY2xpY2syIik7CisgIGEgPSBuZXcgQXVkaW8oYXVk
aW9GaWxlKTsKKyAgYS5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGZ1bmN0aW9uKCkgeworICAg
IG51bV9wbGF5ZWQgKys7CisgICAgaWYgKG51bV9wbGF5ZWQgPCBwbGF5X3RpbWVzKSB7CisgICAg
ICBhLmN1cnJlbnRUaW1lID0gMDsKKyAgICAgIGEucGxheSgpOworICAgICAgaWYgKG51bV9wbGF5
ZWQgPT0gcGxheV90aW1lcyAtIDEpIHsKKyAgICAgICAgYSA9IG51bGw7CisgICAgICAgIGZvcmNl
R0MoKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdG90YWxfcGxheWVkICsrOworICAg
ICAgaWYgKHRvdGFsX3BsYXllZCA8IG51bV9wbGF5ZXJzKQorICAgICAgICBzdGFydCgpOworICAg
ICAgZWxzZQorICAgICAgICBmaW5pc2goKTsKKyAgICB9CisgIH0pOworICBhLmFkZEV2ZW50TGlz
dGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgZnVuY3Rpb24oKSB7CisgICAgYS5wbGF5KCk7CisgIH0p
OworfQorCitzdGFydCgpOworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPiAKSW5kZXg6
IExheW91dFRlc3RzL21lZGlhL2NvbnRlbnQvY2xpY2syLndhdgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9t
ZWRpYS9jb250ZW50L2NsaWNrMi53YXYKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQog
ICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKClVrbEdSblFHQUFCWFFWWkZabTEwSUJBQUFB
QUJBQUVBRVNzQUFCRXJBQUFCQUFnQVpHRjBZVThHQUFDQmdJRi9nbjJDZjRCK2duNSsKZllKL2dJ
Ri9nSCtCZlg2QWZYdDVmWHg3ZTN4OWZIMStmNENBZm54OWYzdDlnSUI5ZW4yRGZuNThmWUtEZ0lK
OWhuaDdoSVo4Z1lSNgpmSHlDZTRHQ2lvRitnSDkzZm9XQ2dvSjVnSHg1Z25pQWVZSjBkbmVDZ1hO
MWpuMStmSTF6ZkhwOGRZaUNlM3FJaEhwbWZYcU1lWkowCkFDYi9BQUQvL3dBQVEvOEEzcFlBTnYv
cVllazVPR3AzdElDZWV4allVa1dnWU16ekFCLy9oRHlWY1gyWWk1cHBYTE5zWFlLRVozbDcKYUhH
VG4xcG5sWmx3VnB1VWdxT0tnSU9NWUlwc29YVnlkSktkYzI5NmtabDNoM09BY29WNmFvNkJlMjk4
aXBDRmhJRnhrM3lJZVhOdQpoNGVIaVloL2MzaDFlSkNVZW5DQ2ZIOXllWlNLY0hSN2VIOXVnWWwr
ZUltRmZXeHVoWDF1aUl4K2dZWm1nMzU1aEhsemdYbDFkSWVXCmRHbWNpWHB0ZVlXTWMzR09mbnR5
ZTVLaGgxK2Jlb2FGZ21KNWs0S1VlM0NYaW0yR2RKYUZZWG1lYzFHb21HOTdiNG1aY25DSWJYNkUK
Ylg2TGJXZDFlNEIwZDR4NmNYdUtjb0tNZG9CNWVadDlkb2gwZTMyQWc1Q1Nnbk9Fa0lXQmdYNkFl
WXFSZW5KOWhvS0RoSVI2Z0lCdAplNDJEZUh1RmhtMThnMzV3ZTR4OWRubUJnSHArYm5pQmZJRjJl
WUIzZllWM2RYK0ZkSU9DZjNaN2ZvRjhlNG1BZkh1Q2RuK0xjM1dLCmhYeUVobnQ3Z29GNGZvU0Ro
SDE3ZjR1RmZucC9pbzkwYzRPQmZIdUNnNEp5aEl4eWNIMkpnbnVEaUhsOGhIOThkSU9EZElLQmVJ
WjgKZkhlQ2lYeCtmM1NJZjNWN2VZU0NkSHVDZ25oNmhJRnppb1YzZ1l1QWVYbDllNFY3ZTMrSmdu
VjZnSUo3aElpQ2UzeUlpbng5aFlHQQpoWDE3aDRPQmZJQ0ZmSWlGZkhoOWhuOTNnbnAyaFlSNmZv
RjRkbjkvZFgxL2VYOS9kSE4rZ29CM2VvRjhmSHQ2ZjMxNmZJRjZnSUY4CmVIMkNnbnQvZ29WNmlI
eDNpSVI2ZjRDRGczdUdnM3lBaUlOOWc0Qi9nbitDZ1g1OWhuOTZmbitGZlg1OWY0U0NnSVI3Zm9K
N2ZZR0EKZm9GNmY0RjVmSHlEZlhtRmZudDVoSUI1Zm4xL2ZYMStnSGw5Zm9OOGZZR0Nmb0NHZW42
QWdvQi9nSDkvZzNwOGZZV0dmWHFEaEgxNwpnSU9DZm4rQ2VvQ0RnM3A2ZklHRmZYcC9nWVI5ZFlO
L2dYNTdlMzU5Zm9KOWZvR0FmMzU3Z0lDQWZJSjdmbjE2aG9WNmZYeUFnWCtCCmZuNStnbmw1Z1lT
QmZIMTllNGg3ZklTRWVJQitnSCtFZDMrQ2YzcDZoWDJBZjNxQWZYNS9mbjk4ZjRHQmdIdDNnWVov
Zlg5OWdIeDgKZ0g5N2hvUjNnWDUvZzNsK2czMS9nMzE1ZjROOGZYK0FnWDZBZjM1K2dINkFnWDk3
Zm9DQ2ZYOTlnbjErZ1lGN2dJUjllbitEZ0g1OQpmMzE5Z1lCOGZuMS9mMzJCZTN1Q2dYeCtmWVIv
ZkgyQ2YzMStmb0tFZkh5QmczMS9mbjUvZ29KN2dJYUFmWDkvZ24rQmduNTZnNEovCmdvRi9mb0Iv
Z0lCL2ZuK0JmM3VBZ245NmYzOThnSUIvZm55QWdIeDlmbjUrZjNwK2dueDlmM3gvZjM5OGYzOTln
SDkvZm42RGYzeUIKZjM5L2dJQjlmNEYvZ1lGK2Y0Q0Nmb0YvZjRLQ2dJQ0FmNEtBZzRCK2Y0S0Nm
WDU5Z29OOWZZQi9nSUI2Z0g5OWZJQ0FmWDEvZ254NwpmWUIvZ1h4OWZuNS9mbjk5Zlg1K2ZYNStm
bjUvZjM5L2dYNS9nbngrZ0lGL2ZvQ0NmbjJBZjRKK2ZvR0JnWDkvZjRDQ2ZJR0FnWUYvCmYzNkFn
WUIrZ0lHQWdIMkFnWDk5Z0g5L2dIMkFmMytBZlh4OWdIeCtmSHlBZlg1K2ZIMkFnbnQ3ZjM1L2ZY
OS9mMzkvZlhwK2dINSsKZ29COWYzOS9nbjU5Z1grQWYzMS9nSUIvZjM5L2dINkFnSUNCZm9DRWY0
QitmNEtCZjRCL2dZR0RmbitBZjRCL2ZuNTlmb0YrZm9LQgpmbjkrZkh5QWZuNStmbitCZVgrRmcz
TjdoWDU4Z0grQWZuNkZkSHVJZ25oK2c0QjZlNGlHZUhxRmhYaDdnMytBZjM2QWc0U0FlWCtFCmVu
MStnNFY3ZW42RWYzK0FnWDkvZjRCK2ZIeCtmb0ovZkg2Q2hIeDlmb0dCZzN0NWZvSi9mM3grZllG
K2YzMStnSUNCZ1g1L2Y0RisKZm41L2ZYNTlmbjkrZ0lPQWYzK0FmNEI5Zm45K2dYOStnWCtCZm9H
QmdJQi9mMzEvZ24rQ2ZJQi9mWUYrZjM2QmYzNS9mb0IvZjM5OApnWCtBZjMxL2Y0Q0JmMzU4Z0lL
QWZuOStnbjJBZjM1K2duOTlmMzZCZjMxK2YzK0FmMzk5ZjRDQmZvQ0FmWCtCZlgrQWdINkFnSDkr
CmdJWjlmWUovaUlCM2ZJdC9kSVNCZ0h4L2Y0T0ZmMzJBZ1g1M2ZJT0NlNEtCZm4yQmVuNTdmM3Q0
ZjROOWdINkJnWUtBZ0hsL2duMS8KZjROL2YzNkRnb0NCZm9KK2VYMTdnSDE4ZTRGL2ZZQitoWDZE
ZzRPQmdJQjhmSHQrZjM5K2ZYOS9mb0tCZ0lHRWYzMS9nWDZBZ29HRApmb0NFZjMyQkFBPT0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109669</attachid>
            <date>2011-10-04 13:11:10 -0700</date>
            <delta_ts>2011-10-06 10:15:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111004131109.patch</filename>
            <type>text/plain</type>
            <size>14361</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NjA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXggY29uc2lzdHMgb2YgMiBwYXJ0czoKKyAgICAgICAg
KGEpIG1ha2UgSFRNTEF1ZGlvRWxlbWVudCBhbiAnYWN0aXZlJyBvbmUsIG1lYW5pbmcgdGhhdCBp
dCBjYW5ub3QgYmUKKyAgICAgICAgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgaXQgaGFzIHBhbmRpbmcg
YWN0aXZpdHkKKyAgICAgICAgKGIpIGZpeCB2OCBiaW5kaW5ncyBidWcgdGhhdCB3YXMgaW4gdGhl
IGNvZGUgZm9yZXZlciwgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgY291bGQgYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQgZXZlbiBpZiBvYmplY3QgaXQgYXR0YWNoZWQgdG8gaXMgc3RpbGwKKyAgICAgICAg
YWxpdmUsIHJlc3VsdGluZyBpbiB0aGUgbG9zcyBvZiBldmVudHMKKworICAgICAgICBUZXN0OiBt
ZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUV2ZW50TGlzdGVuZXJD
YWxsYmFjayk6CisgICAgICAgIChJc0FjdGl2ZURvbVR5cGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
KiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdWRpb0Vs
ZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50Lmg6CisKIDIwMTEtMTAtMDQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29t
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IG1ha2UgU291cmNlRnJhbWUgY29tcGlsZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtCShyZXZpc2lvbiA5NjYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQyLDEwICsxMTQyLDEz
IEBAIHN1YiBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFjawogewogICAgIG15ICRpbXBsQ2xh
c3NOYW1lID0gc2hpZnQ7CiAgICAgbXkgJHJlcXVpcmVzSGlkZGVuRGVwZW5kZW5jeSA9IHNoaWZ0
OworICAgIG15ICRyZXF1aXJlc0hpZGRlblZhbHVlID0gc2hpZnQ7CiAgICAgbXkgJGZ1bmN0aW9u
TmFtZSA9IHNoaWZ0OwogICAgIG15ICRsb29rdXBUeXBlID0gKCRmdW5jdGlvbk5hbWUgZXEgImFk
ZCIpID8gIk9yQ3JlYXRlIiA6ICJPbmx5IjsKICAgICBteSAkcGFzc1JlZlB0ckhhbmRsaW5nID0g
KCRmdW5jdGlvbk5hbWUgZXEgImFkZCIpID8gIiIgOiAiLmdldCgpIjsKICAgICBteSAkaGlkZGVu
RGVwZW5kZW5jeUFjdGlvbiA9ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICJjcmVhdGUiIDog
InJlbW92ZSI7CisgICAgbXkgJGhpZGRlblZhbHVlQWN0aW9uID0gKCRmdW5jdGlvbk5hbWUgZXEg
ImFkZCIpID8gIlNldCIgOiAiRGVsZXRlIjsKKyAgICBteSAkaGlkZGVuVmFsdWVFeHRyYUFyZ3Mg
PSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiLCBhcmdzWzFdIiA6ICIiOwogIAogICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gJHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVu
dHMmIGFyZ3MpCkBAIC0xMTYwLDYgKzExNjMsMTggQEAgRU5ECiAgICAgICAgICR7aGlkZGVuRGVw
ZW5kZW5jeUFjdGlvbn1IaWRkZW5EZXBlbmRlbmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4
JHtpbXBsQ2xhc3NOYW1lfTo6ZXZlbnRMaXN0ZW5lckNhY2hlSW5kZXgpOwogRU5ECiAgICAgfQor
ICAgIGVsc2lmICgkcmVxdWlyZXNIaWRkZW5WYWx1ZSkgeworICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCA8PEVORCk7CisgICAgICAgIC8vIEF0dGFjaCBsaXN0ZW5lciB0byB0aGUgb2Jq
ZWN0IHNvIGxpc3RlbmVyIGNhbm5vdCBiZSBjb2xsZWN0ZWQgd2hpbGUKKyAgICAgICAgLy8gb2Jq
ZWN0IGlzIHN0aWxsIGFsaXZlLiBEb24ndCB3YW50IHRvIGFkZCBleHRyYSBzbG90IHRvIHRoZSBO
b2RlIHR5cGUsCisgICAgICAgIC8vIGFzIGl0IHdpbGwgZ3JvdyBlYWNoIGFuZCBldmVyeSBub2Rl
LCB3aGlsZSBhYnNvbHV0ZSBtYWpvcml0eSBvZiBub2RlcworICAgICAgICAvLyB3b3VsZCBuZXZl
ciBoYXZlIGxpc3RlbmVycyBhdHRhY2hlZC4gSW5zdGVhZCB1c2UgVjggaGlkZGVuIHZhbHVlCisg
ICAgICAgIC8vIG1lY2hhbmlzbSAtLSBhZGQvcmVtb3ZlIGtleSAibGlzdGVuZXIvPGV2ZW50IG5h
bWU+IiB3aXRoIGxpc3RlbmVyIGFzCisgICAgICAgIC8vIHZhbHVlLiBTcGVjIGd1YXJhbnRlZXMg
dGhhdCBvbmUgY2FuIGhhdmUgb25seSBhIHNpbmdsZSBldmVudCBsaXN0ZW5lcgorICAgICAgICAv
LyBwZXIgZXZlbnQgdHlwZS4gCisgICAgICAgIGFyZ3MuSG9sZGVyKCktPiR7aGlkZGVuVmFsdWVB
Y3Rpb259SGlkZGVuVmFsdWUodjg6OlN0cmluZzo6Q29uY2F0KHY4OjpTdHJpbmc6Ok5ldyhcImxp
c3RlbmVyL1wiKSxhcmdzWzBdLT5Ub1N0cmluZygpKSR7aGlkZGVuVmFsdWVFeHRyYUFyZ3N9KTsK
K0VORAorICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgfQog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC0xMjY2LDEwICsxMjgxLDEwIEBAIHN1YiBH
ZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2sKICAgICAjIGJ1dCB0aGV5IGFyZSBleHRyZW1lbHkgY29u
c2lzdGVudCBhY3Jvc3MgdGhlIHZhcmlvdXMgY2xhc3NlcyB0aGF0IHRha2UgZXZlbnQgbGlzdGVu
ZXJzLAogICAgICMgc28gd2UgY2FuIGdlbmVyYXRlIHRoZW0gYXMgYSAic3BlY2lhbCBjYXNlIi4K
ICAgICBpZiAoJG5hbWUgZXEgImFkZEV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIEdlbmVyYXRl
RXZlbnRMaXN0ZW5lckNhbGxiYWNrKCRpbXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0
YU5vZGUpLCAiYWRkIik7CisgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKCRp
bXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpLCAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9LCAiYWRkIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9IGVsc2lmICgkbmFtZSBlcSAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAg
R2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJU
eXBlKCRkYXRhTm9kZSksICJyZW1vdmUiKTsKKyAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVy
Q2FsbGJhY2soJGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSksICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In0sICJyZW1vdmUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjg0OCw3ICsyODYzLDcgQEAgc3ViIEdldERvbU1h
cEZ1bmN0aW9uCiAKIHN1YiBJc0FjdGl2ZURvbVR5cGUKIHsKLSAgICAjIEZJWE1FOiBDb25zaWRl
ciBtYWtpbmcgdGhpcyBhbiAuaWRsIGF0dHJpYnV0ZS4KKyAgICAjIEZJWE1FOiBNYWtlIHRoaXMg
YW4gLmlkbCBhdHRyaWJ1dGUuCiAgICAgbXkgJHR5cGUgPSBzaGlmdDsKICAgICByZXR1cm4gMSBp
ZiAkdHlwZSBlcSAiRXZlbnRTb3VyY2UiOwogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJNZXNz
YWdlUG9ydCI7CkBAIC0yODYwLDYgKzI4NzUsNyBAQCBzdWIgSXNBY3RpdmVEb21UeXBlCiAgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIklEQlRyYW5zYWN0aW9uIjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiRmlsZVJlYWRlciI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVXcml0
ZXIiOworICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJIVE1MQXVkaW9FbGVtZW50IjsKICAgICBy
ZXR1cm4gMDsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiA5NjYwNSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcg
KzQ0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhIVE1M
QXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0
cnVjdG9yOjpHZXRUZW1wbGF0ZSwgMCwgMCwgMCB9OworV3JhcHBlclR5cGVJbmZvIFY4SFRNTEF1
ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1
Y3Rvcjo6R2V0VGVtcGxhdGUsIFY4SFRNTEF1ZGlvRWxlbWVudDo6ZGVyZWZPYmplY3QsIFY4SFRN
TEF1ZGlvRWxlbWVudDo6dG9BY3RpdmVET01PYmplY3QsIDAgfTsKIAogc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0
IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CkBAIC02NSw3ICs2NSw2IEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW8KICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBv
bmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5
LgogICAgIHRvVjgoZG9jdW1lbnQpOwogCi0KICAgICBTdHJpbmcgc3JjOwogICAgIGlmIChhcmdz
Lkxlbmd0aCgpID4gMCkKICAgICAgICAgc3JjID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwpA
QCAtNzMsNyArNzIsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlv
CiAKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8t
PnJlZigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShhdWRpby5n
ZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3QoYXVkaW8uZ2V0
KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwogICAg
IHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdWRpb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
dWRpb0VsZW1lbnQuaAkocmV2aXNpb24gOTY2MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdWRpb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsNyBAQCBwcml2YXRl
OgogICAgIEhUTUxBdWRpb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Cisg
ICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IHsgcmV0dXJuIGlzUGxh
eWluZygpIHx8IEhUTUxNZWRpYUVsZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpOyB9CiB9Owog
CiB9IC8vbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkocmV2aXNpb24gOTY2MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBjbGFzcyBXaWRnZXQ7CiAvLyBC
dXQgaXQgY2FuJ3QgYmUgdW50aWwgdGhlIENocm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1w
bCBjbGFzcyBpcyBmaXhlZCBzbyBpdAogLy8gbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3Rp
bmcgYSBNZWRpYVBsYXllckNsaWVudCB0byBhbiBIVE1MTWVkaWFFbGVtZW50LgogCi1jbGFzcyBI
VE1MTWVkaWFFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJD
bGllbnQsIHByaXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyLCBwcml2YXRlIEFjdGl2ZURPTU9i
amVjdCB7CitjbGFzcyBIVE1MTWVkaWFFbGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJs
aWMgTWVkaWFQbGF5ZXJDbGllbnQsIHByaXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyLCBwdWJs
aWMgQWN0aXZlRE9NT2JqZWN0IHsKIHB1YmxpYzoKICAgICBNZWRpYVBsYXllciogcGxheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9wbGF5ZXIuZ2V0KCk7IH0KICAgICAKQEAgLTIyNyw2ICsyMjcsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHNldERpc3BsYXlNb2RlKERpc3BsYXlNb2Rl
IG1vZGUpIHsgbV9kaXNwbGF5TW9kZSA9IG1vZGU7IH0KICAgICAKICAgICB2aXJ0dWFsIGJvb2wg
aXNNZWRpYUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogCiAgICAgLy8gUmVzdHJpY3Rpb25zIHRvIGNo
YW5nZSBkZWZhdWx0IGJlaGF2aW9ycy4KICAgICBlbnVtIEJlaGF2aW9yUmVzdHJpY3Rpb25GbGFn
cyB7CkBAIC0yNjcsNyArMjY4LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZChSZWFzb25Gb3JTdXNwZW5zaW9uKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lKCk7CiAgICAg
dmlydHVhbCB2b2lkIHN0b3AoKTsKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIG1lZGlhVm9sdW1lRGlkQ2hhbmdlKCk7
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NjA1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBOYWxpbW92
ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9FbGVtZW50
IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCByZWdyZXNzaW9uIHRlc3QgdGhhdCBwbGF5cyBzaG9ydCBh
dWRpbyAofjEgc2Vjb25kKSBzZXZlcmFsIHRpbWVzCisgICAgICAgIGluIGEgcm93IGFuZCBjYXVz
ZXMgZ2FyYmFnZSBjb2xsZWN0b3IgaW4gcGFyYWxsZWwuIFRlc3Qgc2hvdWxkIHBsYXkKKyAgICAg
ICAgYXVkaW8gc3RyZWFtIHNwZWNpZmllZCBudW1iZXIgb2YgdGltZXMgYW5kIHNpZ25hbCAnZW5k
ZWQnIGV2ZW50LgorCisgICAgICAgICogbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0LWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0Lmh0
bWw6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL2NvbnRlbnQvY2xpY2syLndhdjogQWRkZWQuCisK
IDIwMTEtMTAtMDQgIE1hcmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFVucmV2aWV3ZWQ7IHJlYmFzZWxpbmVzIGZvciBHVEsgYWZ0ZXIgcjk2NTA5LgpJ
bmRleDogTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4
dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3Qt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2Fy
YmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
VGVzdHMgdGhhdCB3ZSBkb24ndCBnYXJiYWdlIGNvbGxlY3QgcGxheWluZyBhdWRpbyBvYmplY3Qg
b3IgZXZlbnQgbGlzdGVuZXIuCisKK0FjY29yZGluZyB0byBodHRwOi8vd3d3LndoYXR3Zy5vcmcv
c3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtdmlkZW8tZWxlbWVudC5o
dG1sLAorIjQuOC4xMC44IFBsYXlpbmcgdGhlIG1lZGlhIHJlc291cmNlIiwKKyJNZWRpYSBlbGVt
ZW50cyBtdXN0IG5vdCBzdG9wIHBsYXlpbmcganVzdCBiZWNhdXNlIGFsbCByZWZlcmVuY2VzIHRv
IHRoZW0gaGF2ZSBiZWVuIHJlbW92ZWQ7IG9ubHkgb25jZSBhIG1lZGlhIGVsZW1lbnQgaXMgaW4g
YSBzdGF0ZSB3aGVyZSBubyBmdXJ0aGVyIGF1ZGlvIGNvdWxkIGV2ZXIgYmUgcGxheWVkIGJ5IHRo
YXQgZWxlbWVudCBtYXkgdGhlIGVsZW1lbnQgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuIgorCisoc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OCBhbmQgaHR0cDov
L2NyYnVnLmNvbS82MjYwNCBmb3IgbW9yZSBkZXRhaWxzKS4KKworUEFTUworCisKSW5kZXg6IExh
eW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0Lmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKzwhRE9DVFlQRSBIVE1MPgorCis8aHRtbD4KKzxib2R5
PgorCis8cD5UZXN0cyB0aGF0IHdlIGRvbid0IGdhcmJhZ2UgY29sbGVjdCBwbGF5aW5nIGF1ZGlv
IG9iamVjdCBvciBldmVudCBsaXN0ZW5lci48L3A+Cis8cD5BY2NvcmRpbmcgdG8gaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLXZp
ZGVvLWVsZW1lbnQuaHRtbCw8YnIgLz4KKyI0LjguMTAuOCBQbGF5aW5nIHRoZSBtZWRpYSByZXNv
dXJjZSIsPGJyIC8+CisiTWVkaWEgZWxlbWVudHMgbXVzdCBub3Qgc3RvcCBwbGF5aW5nIGp1c3Qg
YmVjYXVzZSBhbGwgcmVmZXJlbmNlcyB0byB0aGVtIGhhdmUKK2JlZW4gcmVtb3ZlZDsgb25seSBv
bmNlIGEgbWVkaWEgZWxlbWVudCBpcyBpbiBhIHN0YXRlIHdoZXJlIG5vIGZ1cnRoZXIgYXVkaW8K
K2NvdWxkIGV2ZXIgYmUgcGxheWVkIGJ5IHRoYXQgZWxlbWVudCBtYXkgdGhlIGVsZW1lbnQgYmUg
Z2FyYmFnZSBjb2xsZWN0ZWQuIjxiciAvPjxiciAvPgorKHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzggYW5kIGh0dHA6Ly9jcmJ1Zy5jb20vNjI2MDQgZm9y
IG1vcmUgZGV0YWlscykuPC9wPgorPHAgaWQ9InJlc3VsdCI+CisgICAgRkFJTDogVGVzdCBlaXRo
ZXIgc3RpbGwgcnVubmluZyBvciBzdG9wcGVkIHByZW1hdHVyZWx5LgorPC9wPgorCis8c2NyaXB0
IHNyYz1tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9dmlkZW8tdGVzdC5qcz48
L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwordmFyIG51bV9wbGF5
ZXJzID0gNDsKK3ZhciBwbGF5X3RpbWVzID0gNTsKKwordmFyIGE7Cit2YXIgbnVtX3BsYXllZDsK
K3ZhciB0b3RhbF9wbGF5ZWQgPSAwOworCitmdW5jdGlvbiBmb3JjZUdDKCkgeworICBpZiAod2lu
ZG93LkdDQ29udHJvbGxlcikKKyAgICByZXR1cm4gR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKwor
ICAvLyBGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgZm9yICh2YXIgbmR4ID0gMDsgbmR4IDwg
OTkwMDA7IG5keCArKykKKyAgICB2YXIgc3RyID0gbmV3IFN0cmluZygiMTIzNCIpOworfQorCitm
dW5jdGlvbiBmaW5pc2goKSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHQiKS5p
bm5lclRleHQgPSAiUEFTUyI7CisgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgIH0KK30KKworZnVuY3Rp
b24gc3RhcnQoKSB7CisgIG51bV9wbGF5ZWQgPSAwOworICB2YXIgYXVkaW9GaWxlID0gZmluZE1l
ZGlhRmlsZSgiYXVkaW8iLCAiY29udGVudC9jbGljazIiKTsKKyAgYSA9IG5ldyBBdWRpbyhhdWRp
b0ZpbGUpOworICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgZnVuY3Rpb24oKSB7CisgICAg
bnVtX3BsYXllZCArKzsKKyAgICBpZiAobnVtX3BsYXllZCA8IHBsYXlfdGltZXMpIHsKKyAgICAg
IGEuY3VycmVudFRpbWUgPSAwOworICAgICAgYS5wbGF5KCk7CisgICAgICBpZiAobnVtX3BsYXll
ZCA9PSBwbGF5X3RpbWVzIC0gMSkgeworICAgICAgICBhID0gbnVsbDsKKyAgICAgICAgZm9yY2VH
QygpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB0b3RhbF9wbGF5ZWQgKys7CisgICAg
ICBpZiAodG90YWxfcGxheWVkIDwgbnVtX3BsYXllcnMpCisgICAgICAgIHN0YXJ0KCk7CisgICAg
ICBlbHNlCisgICAgICAgIGZpbmlzaCgpOworICAgIH0KKyAgfSk7CisgIGEuYWRkRXZlbnRMaXN0
ZW5lcignY2FucGxheXRocm91Z2gnLCBmdW5jdGlvbigpIHsKKyAgICBhLnBsYXkoKTsKKyAgfSk7
Cit9CisKK3N0YXJ0KCk7CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+IApJbmRleDog
TGF5b3V0VGVzdHMvbWVkaWEvY29udGVudC9jbGljazIud2F2Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL21l
ZGlhL2NvbnRlbnQvY2xpY2syLndhdgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAg
ICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKVWtsR1JuUUdBQUJYUVZaRlptMTBJQkFBQUFB
QkFBRUFFU3NBQUJFckFBQUJBQWdBWkdGMFlVOEdBQUNCZ0lGL2duMkNmNEIrZ241KwpmWUovZ0lG
L2dIK0JmWDZBZlh0NWZYeDdlM3g5ZkgxK2Y0Q0Fmbng5ZjN0OWdJQjllbjJEZm41OGZZS0RnSUo5
aG5oN2hJWjhnWVI2CmZIeUNlNEdDaW9GK2dIOTNmb1dDZ29KNWdIeDVnbmlBZVlKMGRuZUNnWE4x
am4xK2ZJMXpmSHA4ZFlpQ2UzcUloSHBtZlhxTWVaSjAKQUNiL0FBRC8vd0FBUS84QTNwWUFOdi9x
WWVrNU9HcDN0SUNlZXhqWVVrV2dZTXp6QUIvL2hEeVZjWDJZaTVwcFhMTnNYWUtFWjNsNwphSEdU
bjFwbmxabHdWcHVVZ3FPS2dJT01ZSXBzb1hWeWRKS2RjMjk2a1psM2gzT0Fjb1Y2YW82QmUyOThp
cENGaElGeGszeUllWE51Cmg0ZUhpWWgvYzNoMWVKQ1VlbkNDZkg5eWVaU0tjSFI3ZUg5dWdZbCtl
SW1GZld4dWhYMXVpSXgrZ1labWczNTVoSGx6Z1hsMWRJZVcKZEdtY2lYcHRlWVdNYzNHT2ZudHll
NUtoaDErYmVvYUZnbUo1azRLVWUzQ1hpbTJHZEphRllYbWVjMUdvbUc5N2I0bVpjbkNJYlg2RQpi
WDZMYldkMWU0QjBkNHg2Y1h1S2NvS01kb0I1ZVp0OWRvaDBlMzJBZzVDU2duT0VrSVdCZ1g2QWVZ
cVJlbko5aG9LRGhJUjZnSUJ0CmU0MkRlSHVGaG0xOGczNXdlNHg5ZG5tQmdIcCtibmlCZklGMmVZ
QjNmWVYzZFgrRmRJT0NmM1o3Zm9GOGU0bUFmSHVDZG4rTGMzV0sKaFh5RWhudDdnb0Y0Zm9TRGhI
MTdmNHVGZm5wL2lvOTBjNE9CZkh1Q2c0SnloSXh5Y0gySmdudURpSGw4aEg5OGRJT0RkSUtCZUla
OApmSGVDaVh4K2YzU0lmM1Y3ZVlTQ2RIdUNnbmg2aElGemlvVjNnWXVBZVhsOWU0VjdlMytKZ25W
NmdJSjdoSWlDZTN5SWlueDloWUdBCmhYMTdoNE9CZklDRmZJaUZmSGg5aG45M2ducDJoWVI2Zm9G
NGRuOS9kWDEvZVg5L2RITitnb0IzZW9GOGZIdDZmMzE2ZklGNmdJRjgKZUgyQ2dudC9nb1Y2aUh4
M2lJUjZmNENEZzN1R2czeUFpSU45ZzRCL2duK0NnWDU5aG45NmZuK0ZmWDU5ZjRTQ2dJUjdmb0o3
ZllHQQpmb0Y2ZjRGNWZIeURmWG1GZm50NWhJQjVmbjEvZlgxK2dIbDlmb044ZllHQ2ZvQ0dlbjZB
Z29CL2dIOS9nM3A4ZllXR2ZYcURoSDE3CmdJT0NmbitDZW9DRGczcDZmSUdGZlhwL2dZUjlkWU4v
Z1g1N2UzNTlmb0o5Zm9HQWYzNTdnSUNBZklKN2ZuMTZob1Y2Zlh5QWdYK0IKZm41K2dubDVnWVNC
ZkgxOWU0aDdmSVNFZUlCK2dIK0VkMytDZjNwNmhYMkFmM3FBZlg1L2ZuOThmNEdCZ0h0M2dZWi9m
WDk5Z0h4OApnSDk3aG9SM2dYNS9nM2wrZzMxL2czMTVmNE44ZlgrQWdYNkFmMzUrZ0g2QWdYOTdm
b0NDZlg5OWduMStnWUY3Z0lSOWVuK0RnSDU5CmYzMTlnWUI4Zm4xL2YzMkJlM3VDZ1h4K2ZZUi9m
SDJDZjMxK2ZvS0VmSHlCZzMxL2ZuNS9nb0o3Z0lhQWZYOS9nbitCZ241Nmc0Si8KZ29GL2ZvQi9n
SUIvZm4rQmYzdUFnbjk2ZjM5OGdJQi9mbnlBZ0h4OWZuNStmM3ArZ254OWYzeC9mMzk4ZjM5OWdI
OS9mbjZEZjN5QgpmMzkvZ0lCOWY0Ri9nWUYrZjRDQ2ZvRi9mNEtDZ0lDQWY0S0FnNEIrZjRLQ2ZY
NTlnb045ZllCL2dJQjZnSDk5ZklDQWZYMS9nbng3CmZZQi9nWHg5Zm41L2ZuOTlmWDUrZlg1K2Zu
NS9mMzkvZ1g1L2dueCtnSUYvZm9DQ2ZuMkFmNEorZm9HQmdYOS9mNENDZklHQWdZRi8KZjM2QWdZ
QitnSUdBZ0gyQWdYOTlnSDkvZ0gyQWYzK0FmWHg5Z0h4K2ZIeUFmWDUrZkgyQWdudDdmMzUvZlg5
L2YzOS9mWHArZ0g1Kwpnb0I5ZjM5L2duNTlnWCtBZjMxL2dJQi9mMzkvZ0g2QWdJQ0Jmb0NFZjRC
K2Y0S0JmNEIvZ1lHRGZuK0FmNEIvZm41OWZvRitmb0tCCmZuOStmSHlBZm41K2ZuK0JlWCtGZzNO
N2hYNThnSCtBZm42RmRIdUlnbmgrZzRCNmU0aUdlSHFGaFhoN2czK0FmMzZBZzRTQWVYK0UKZW4x
K2c0VjdlbjZFZjMrQWdYOS9mNEIrZkh4K2ZvSi9mSDZDaEh4OWZvR0JnM3Q1Zm9KL2YzeCtmWUYr
ZjMxK2dJQ0JnWDUvZjRGKwpmbjUvZlg1OWZuOStnSU9BZjMrQWY0QjlmbjkrZ1g5K2dYK0Jmb0dC
Z0lCL2YzMS9nbitDZklCL2ZZRitmMzZCZjM1L2ZvQi9mMzk4CmdYK0FmMzEvZjRDQmYzNThnSUtB
Zm45K2duMkFmMzUrZ245OWYzNkJmMzErZjMrQWYzOTlmNENCZm9DQWZYK0JmWCtBZ0g2QWdIOSsK
Z0laOWZZSi9pSUIzZkl0L2RJU0JnSHgvZjRPRmYzMkFnWDUzZklPQ2U0S0JmbjJCZW41N2YzdDRm
NE45Z0g2QmdZS0FnSGwvZ24xLwpmNE4vZjM2RGdvQ0Jmb0orZVgxN2dIMThlNEYvZllCK2hYNkRn
NE9CZ0lCOGZIdCtmMzkrZlg5L2ZvS0JnSUdFZjMxL2dYNkFnb0dECmZvQ0VmMzJCQUE9PQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109972</attachid>
            <date>2011-10-06 10:15:09 -0700</date>
            <delta_ts>2011-10-06 13:18:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111006101508.patch</filename>
            <type>text/plain</type>
            <size>15157</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NzE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXggY29uc2lzdHMgb2YgMiBwYXJ0czoKKyAgICAgICAg
KGEpIG1ha2UgSFRNTEF1ZGlvRWxlbWVudCBhbiAnYWN0aXZlJyBvbmUsIG1lYW5pbmcgdGhhdCBp
dCBjYW5ub3QgYmUKKyAgICAgICAgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgaXQgaGFzIHBhbmRpbmcg
YWN0aXZpdHkKKyAgICAgICAgKGIpIGZpeCB2OCBiaW5kaW5ncyBidWcgdGhhdCB3YXMgaW4gdGhl
IGNvZGUgZm9yZXZlciwgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgY291bGQgYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQgZXZlbiBpZiBvYmplY3QgaXQgYXR0YWNoZWQgdG8gaXMgc3RpbGwKKyAgICAgICAg
YWxpdmUsIHJlc3VsdGluZyBpbiB0aGUgbG9zcyBvZiBldmVudHMKKworICAgICAgICBUZXN0OiBt
ZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAorCisgICAgICAgICogYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUV2ZW50TGlzdGVuZXJD
YWxsYmFjayk6CisgICAgICAgIChJc0FjdGl2ZURvbVR5cGUpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp2OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKToKKyAgICAgICAg
KiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdWRpb0Vs
ZW1lbnQ6Omhhc1BlbmRpbmdBY3Rpdml0eSk6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVt
ZW50Lmg6CisKIDIwMTEtMTAtMDUgIFl1cnkgU2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5v
cmc+CiAgICAgICAgIAogICAgICAgICBVbnJldmlld2VkLiBCdWlsZCBmaXg6IG1ha2UgSW5zcGVj
dG9yU3RhdGVDbGllbnQuaCBQcml2YXRlIGluIFhDb2RlIHByb2plY3QuCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkocmV2
aXNpb24gOTY3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtMTE0MiwxMCArMTE0MiwxMyBAQCBzdWIgR2Vu
ZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2sKIHsKICAgICBteSAkaW1wbENsYXNzTmFtZSA9IHNo
aWZ0OwogICAgIG15ICRyZXF1aXJlc0hpZGRlbkRlcGVuZGVuY3kgPSBzaGlmdDsKKyAgICBteSAk
cmVxdWlyZXNIaWRkZW5WYWx1ZSA9IHNoaWZ0OwogICAgIG15ICRmdW5jdGlvbk5hbWUgPSBzaGlm
dDsKICAgICBteSAkbG9va3VwVHlwZSA9ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICJPckNy
ZWF0ZSIgOiAiT25seSI7CiAgICAgbXkgJHBhc3NSZWZQdHJIYW5kbGluZyA9ICgkZnVuY3Rpb25O
YW1lIGVxICJhZGQiKSA/ICIiIDogIi5nZXQoKSI7CiAgICAgbXkgJGhpZGRlbkRlcGVuZGVuY3lB
Y3Rpb24gPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAiY3JlYXRlIiA6ICJyZW1vdmUiOwor
ICAgIG15ICRoaWRkZW5WYWx1ZUFjdGlvbiA9ICgkZnVuY3Rpb25OYW1lIGVxICJhZGQiKSA/ICJT
ZXQiIDogIkRlbGV0ZSI7CisgICAgbXkgJGhpZGRlblZhbHVlRXh0cmFBcmdzID0gKCRmdW5jdGlv
bk5hbWUgZXEgImFkZCIpID8gIiwgYXJnc1sxXSIgOiAiIjsKICAKICAgICBwdXNoKEBpbXBsQ29u
dGVudERlY2xzLCA8PEVORCk7CiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+ICR7ZnVuY3Rp
b25OYW1lfUV2ZW50TGlzdGVuZXJDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQpA
QCAtMTE2MCw2ICsxMTYzLDE4IEBAIEVORAogICAgICAgICAke2hpZGRlbkRlcGVuZGVuY3lBY3Rp
b259SGlkZGVuRGVwZW5kZW5jeShhcmdzLkhvbGRlcigpLCBhcmdzWzFdLCBWOCR7aW1wbENsYXNz
TmFtZX06OmV2ZW50TGlzdGVuZXJDYWNoZUluZGV4KTsKIEVORAogICAgIH0KKyAgICBlbHNpZiAo
JHJlcXVpcmVzSGlkZGVuVmFsdWUpIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
PDxFTkQpOworICAgICAgICAvLyBBdHRhY2ggbGlzdGVuZXIgdG8gdGhlIG9iamVjdCBzbyBsaXN0
ZW5lciBjYW5ub3QgYmUgY29sbGVjdGVkIHdoaWxlCisgICAgICAgIC8vIG9iamVjdCBpcyBzdGls
bCBhbGl2ZS4gRG9uJ3Qgd2FudCB0byBhZGQgZXh0cmEgc2xvdCB0byB0aGUgTm9kZSB0eXBlLAor
ICAgICAgICAvLyBhcyBpdCB3aWxsIGdyb3cgZWFjaCBhbmQgZXZlcnkgbm9kZSwgd2hpbGUgYWJz
b2x1dGUgbWFqb3JpdHkgb2Ygbm9kZXMKKyAgICAgICAgLy8gd291bGQgbmV2ZXIgaGF2ZSBsaXN0
ZW5lcnMgYXR0YWNoZWQuIEluc3RlYWQgdXNlIFY4IGhpZGRlbiB2YWx1ZQorICAgICAgICAvLyBt
ZWNoYW5pc20gLS0gYWRkL3JlbW92ZSBrZXkgImxpc3RlbmVyLzxldmVudCBuYW1lPiIgd2l0aCBs
aXN0ZW5lciBhcworICAgICAgICAvLyB2YWx1ZS4gU3BlYyBndWFyYW50ZWVzIHRoYXQgb25lIGNh
biBoYXZlIG9ubHkgYSBzaW5nbGUgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgLy8gcGVyIGV2ZW50
IHR5cGUuIAorICAgICAgICBhcmdzLkhvbGRlcigpLT4ke2hpZGRlblZhbHVlQWN0aW9ufUhpZGRl
blZhbHVlKHY4OjpTdHJpbmc6OkNvbmNhdCh2ODo6U3RyaW5nOjpOZXcoXCJsaXN0ZW5lci9cIiks
YXJnc1swXS0+VG9TdHJpbmcoKSkke2hpZGRlblZhbHVlRXh0cmFBcmdzfSk7CitFTkQKKyAgICB9
CiAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwogICAgIH0KICAgICByZXR1cm4g
djg6OlVuZGVmaW5lZCgpOwpAQCAtMTI2NiwxMCArMTI4MSwxMCBAQCBzdWIgR2VuZXJhdGVGdW5j
dGlvbkNhbGxiYWNrCiAgICAgIyBidXQgdGhleSBhcmUgZXh0cmVtZWx5IGNvbnNpc3RlbnQgYWNy
b3NzIHRoZSB2YXJpb3VzIGNsYXNzZXMgdGhhdCB0YWtlIGV2ZW50IGxpc3RlbmVycywKICAgICAj
IHNvIHdlIGNhbiBnZW5lcmF0ZSB0aGVtIGFzIGEgInNwZWNpYWwgY2FzZSIuCiAgICAgaWYgKCRu
YW1lIGVxICJhZGRFdmVudExpc3RlbmVyIikgewotICAgICAgICBHZW5lcmF0ZUV2ZW50TGlzdGVu
ZXJDYWxsYmFjaygkaW1wbENsYXNzTmFtZSwgIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSwgImFk
ZCIpOworICAgICAgICBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFjaygkaW1wbENsYXNzTmFt
ZSwgIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiRXZlbnRUYXJnZXQifSwgImFkZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNp
ZiAoJG5hbWUgZXEgInJlbW92ZUV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIEdlbmVyYXRlRXZl
bnRMaXN0ZW5lckNhbGxiYWNrKCRpbXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5v
ZGUpLCAicmVtb3ZlIik7CisgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKCRp
bXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpLCAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9LCAicmVtb3ZlIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTI4NDgsNyArMjg2MywxMiBAQCBzdWIgR2V0RG9tTWFwRnVuY3Rpb24K
IAogc3ViIElzQWN0aXZlRG9tVHlwZQogewotICAgICMgRklYTUU6IENvbnNpZGVyIG1ha2luZyB0
aGlzIGFuIC5pZGwgYXR0cmlidXRlLgorICAgICMgRklYTUU6IE1ha2UgdGhpcyBhbiAuaWRsIGF0
dHJpYnV0ZS4KKyAgICAjIE5vdCBlYXN5IGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgJGRhdGFOb2Rl
LCBvbmx5ICR0eXBlLCBhbmQgY2FsbGVyIG1heQorICAgICMgbm90IGhhdmUgJGRhdGFOb2RlIGFz
IHdlbGwuIEdldHRpbmcgZXh0ZW5kZWRBdHRyaWJ1dGVzIHN0YXJ0aW5nIGZyb20KKyAgICAjICR0
eXBlIGlzIG5vdCBzdXBwb3J0ZWQuIE1vc3QgcHJvbWlzaW5nIHdheSBpcyB0byBpdGVyYXRlIHRo
cm91Z2ggYWxsCisgICAgIyAuaWRsIGZpbGVzIHNlYXJjaGluZyBmb3IgdGhlIG1hdGNoaW5nIHR5
cGUgbmFtZSwgYW5kIHRoZW4gbG9vayBhdCB0aGUKKyAgICAjIGV4dGVuZGVkQXR0cmlidXRlcywg
YnV0IHRoYXQgd291bGQgcmVxdWlyZSBsb3Qgb2YgY2hhbmdlcy4uLgogICAgIG15ICR0eXBlID0g
c2hpZnQ7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkV2ZW50U291cmNlIjsKICAgICByZXR1
cm4gMSBpZiAkdHlwZSBlcSAiTWVzc2FnZVBvcnQiOwpAQCAtMjg2MCw2ICsyODgwLDcgQEAgc3Vi
IElzQWN0aXZlRG9tVHlwZQogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJJREJUcmFuc2FjdGlv
biI7CiAgICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVSZWFkZXIiOwogICAgIHJldHVybiAx
IGlmICR0eXBlIGVxICJGaWxlV3JpdGVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSFRN
TEF1ZGlvRWxlbWVudCI7CiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlv
RWxlbWVudENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTY3MTcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V3JhcHBlclR5cGVJbmZvIFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvID0geyBW
OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIDAsIDAsIDAgfTsKK1dy
YXBwZXJUeXBlSW5mbyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjhI
VE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCBWOEhUTUxBdWRpb0VsZW1l
bnQ6OmRlcmVmT2JqZWN0LCBWOEhUTUxBdWRpb0VsZW1lbnQ6OnRvQWN0aXZlRE9NT2JqZWN0LCAw
IH07CiAKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW9FbGVtZW50Q29u
c3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewpAQCAtNjUsNyAr
NjUsNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvCiAgICAgLy8g
bWF5IGVuZCB1cCBiZWluZyB0aGUgb25seSBub2RlIGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdl
LWNvbGxlY3RlZCBwcmVtYXR1cmVseS4KICAgICB0b1Y4KGRvY3VtZW50KTsKIAotCiAgICAgU3Ry
aW5nIHNyYzsKICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDApCiAgICAgICAgIHNyYyA9IHRvV2Vi
Q29yZVN0cmluZyhhcmdzWzBdKTsKQEAgLTczLDcgKzcyLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2OEhUTUxBdWRpbwogCiAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVy
KGFyZ3MuSG9sZGVyKCksICZWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbywgYXVk
aW8uZ2V0KCkpOwogICAgIGF1ZGlvLT5yZWYoKTsKLSAgICBWOERPTVdyYXBwZXI6OnNldEpTV3Jh
cHBlckZvckRPTU5vZGUoYXVkaW8uZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpO
ZXcoYXJncy5Ib2xkZXIoKSkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0
aXZlRE9NT2JqZWN0KGF1ZGlvLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3
KGFyZ3MuSG9sZGVyKCkpKTsKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgJKHJldmlzaW9uIDk2NzE3KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDYgKzQ0LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBib29sIGlzVmlkZW8oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHko
KSBjb25zdCB7IHJldHVybiBpc1BsYXlpbmcoKSB8fCBIVE1MTWVkaWFFbGVtZW50OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKTsgfQogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRsCShyZXZpc2lvbiA5NjcxNykKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDcgQEAKIAogbW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBbCisgICAgICAgIEFjdGl2
ZURPTU9iamVjdCwKICAgICAgICAgQ29uZGl0aW9uYWw9VklERU8KICAgICBdIEhUTUxBdWRpb0Vs
ZW1lbnQgOiBIVE1MTWVkaWFFbGVtZW50IHsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA5NjcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGNs
YXNzIFdpZGdldDsKIC8vIEJ1dCBpdCBjYW4ndCBiZSB1bnRpbCB0aGUgQ2hyb21pdW0gV2ViTWVk
aWFQbGF5ZXJDbGllbnRJbXBsIGNsYXNzIGlzIGZpeGVkIHNvIGl0CiAvLyBubyBsb25nZXIgZGVw
ZW5kcyBvbiB0eXBlY2FzdGluZyBhIE1lZGlhUGxheWVyQ2xpZW50IHRvIGFuIEhUTUxNZWRpYUVs
ZW1lbnQuCiAKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1
YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHBy
aXZhdGUgQWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMg
SFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0
YXJ0TGlzdGVuZXIsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIE1lZGlh
UGxheWVyKiBwbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllci5nZXQoKTsgfQogICAgIApA
QCAtMjI3LDYgKzIyNyw3IEBAIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RGlzcGxh
eU1vZGUoRGlzcGxheU1vZGUgbW9kZSkgeyBtX2Rpc3BsYXlNb2RlID0gbW9kZTsgfQogICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CiAKICAgICAvLyBS
ZXN0cmljdGlvbnMgdG8gY2hhbmdlIGRlZmF1bHQgYmVoYXZpb3JzLgogICAgIGVudW0gQmVoYXZp
b3JSZXN0cmljdGlvbkZsYWdzIHsKQEAgLTI2Nyw3ICsyNjgsNiBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pOwogICAgIHZpcnR1YWwgdm9p
ZCByZXN1bWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAgIHZpcnR1YWwgYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFW
b2x1bWVEaWRDaGFuZ2UoKTsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gOTY3MTcpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wOS0y
NyAgRXVnZW5lIE5hbGltb3YgIDxlbmFsQGNocm9taXVtLm9yZz4KKworICAgICAgICBQbGF5aW5n
IEhUTUxBdWRpb0VsZW1lbnQgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIHJlZ3Jlc3Npb24gdGVzdCB0
aGF0IHBsYXlzIHNob3J0IGF1ZGlvICh+MSBzZWNvbmQpIHNldmVyYWwgdGltZXMKKyAgICAgICAg
aW4gYSByb3cgYW5kIGNhdXNlcyBnYXJiYWdlIGNvbGxlY3RvciBpbiBwYXJhbGxlbC4gVGVzdCBz
aG91bGQgcGxheQorICAgICAgICBhdWRpbyBzdHJlYW0gc3BlY2lmaWVkIG51bWJlciBvZiB0aW1l
cyBhbmQgc2lnbmFsICdlbmRlZCcgZXZlbnQuCisKKyAgICAgICAgKiBtZWRpYS9hdWRpby1nYXJi
YWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9hdWRpby1n
YXJiYWdlLWNvbGxlY3QuaHRtbDogQWRkZWQuCisgICAgICAgICogbWVkaWEvY29udGVudC9jbGlj
azIud2F2OiBBZGRlZC4KKwogMjAxMS0xMC0wNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBVbnJldmlld2VkIGdhcmRlbmluZy4KSW5k
ZXg6IExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJh
Z2UtY29sbGVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1Rl
c3RzIHRoYXQgd2UgZG9uJ3QgZ2FyYmFnZSBjb2xsZWN0IHBsYXlpbmcgYXVkaW8gb2JqZWN0IG9y
IGV2ZW50IGxpc3RlbmVyLgorCitBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLXZpZGVvLWVsZW1lbnQuaHRt
bCwKKyI0LjguMTAuOCBQbGF5aW5nIHRoZSBtZWRpYSByZXNvdXJjZSIsCisiTWVkaWEgZWxlbWVu
dHMgbXVzdCBub3Qgc3RvcCBwbGF5aW5nIGp1c3QgYmVjYXVzZSBhbGwgcmVmZXJlbmNlcyB0byB0
aGVtIGhhdmUgYmVlbiByZW1vdmVkOyBvbmx5IG9uY2UgYSBtZWRpYSBlbGVtZW50IGlzIGluIGEg
c3RhdGUgd2hlcmUgbm8gZnVydGhlciBhdWRpbyBjb3VsZCBldmVyIGJlIHBsYXllZCBieSB0aGF0
IGVsZW1lbnQgbWF5IHRoZSBlbGVtZW50IGJlIGdhcmJhZ2UgY29sbGVjdGVkLiIKKworKHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzggYW5kIGh0dHA6Ly9j
cmJ1Zy5jb20vNjI2MDQgZm9yIG1vcmUgZGV0YWlscykuCisKK1BBU1MKKworCkluZGV4OiBMYXlv
dXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRNTD4KKworPGh0bWw+Cis8Ym9keT4K
KworPHA+VGVzdHMgdGhhdCB3ZSBkb24ndCBnYXJiYWdlIGNvbGxlY3QgcGxheWluZyBhdWRpbyBv
YmplY3Qgb3IgZXZlbnQgbGlzdGVuZXIuPC9wPgorPHA+QWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cu
d2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS12aWRl
by1lbGVtZW50Lmh0bWwsPGJyIC8+CisiNC44LjEwLjggUGxheWluZyB0aGUgbWVkaWEgcmVzb3Vy
Y2UiLDxiciAvPgorIk1lZGlhIGVsZW1lbnRzIG11c3Qgbm90IHN0b3AgcGxheWluZyBqdXN0IGJl
Y2F1c2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBoYXZlCitiZWVuIHJlbW92ZWQ7IG9ubHkgb25j
ZSBhIG1lZGlhIGVsZW1lbnQgaXMgaW4gYSBzdGF0ZSB3aGVyZSBubyBmdXJ0aGVyIGF1ZGlvCitj
b3VsZCBldmVyIGJlIHBsYXllZCBieSB0aGF0IGVsZW1lbnQgbWF5IHRoZSBlbGVtZW50IGJlIGdh
cmJhZ2UgY29sbGVjdGVkLiI8YnIgLz48YnIgLz4KKyhzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY2ODc4IGFuZCBodHRwOi8vY3JidWcuY29tLzYyNjA0IGZvciBt
b3JlIGRldGFpbHMpLjwvcD4KKzxwIGlkPSJyZXN1bHQiPgorICAgIEZBSUw6IFRlc3QgZWl0aGVy
IHN0aWxsIHJ1bm5pbmcgb3Igc3RvcHBlZCBwcmVtYXR1cmVseS4KKzwvcD4KKworPHNjcmlwdCBz
cmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPXZpZGVvLXRlc3QuanM+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBudW1fcGxheWVy
cyA9IDQ7Cit2YXIgcGxheV90aW1lcyA9IDU7CisKK3ZhciBhOwordmFyIG51bV9wbGF5ZWQ7Cit2
YXIgdG90YWxfcGxheWVkID0gMDsKKworZnVuY3Rpb24gZm9yY2VHQygpIHsKKyAgaWYgKHdpbmRv
dy5HQ0NvbnRyb2xsZXIpCisgICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAg
Ly8gRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uCisgIGZvciAodmFyIG5keCA9IDA7IG5keCA8IDk5
MDAwOyBuZHggKyspCisgICAgdmFyIHN0ciA9IG5ldyBTdHJpbmcoIjEyMzQiKTsKK30KKworZnVu
Y3Rpb24gZmluaXNoKCkgeworICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5u
ZXJUZXh0ID0gIlBBU1MiOworICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICB9Cit9CisKK2Z1bmN0aW9u
IHN0YXJ0KCkgeworICBudW1fcGxheWVkID0gMDsKKyAgdmFyIGF1ZGlvRmlsZSA9IGZpbmRNZWRp
YUZpbGUoImF1ZGlvIiwgImNvbnRlbnQvY2xpY2syIik7CisgIGEgPSBuZXcgQXVkaW8oYXVkaW9G
aWxlKTsKKyAgYS5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcsIGZ1bmN0aW9uKCkgeworICAgIG51
bV9wbGF5ZWQgKys7CisgICAgaWYgKG51bV9wbGF5ZWQgPCBwbGF5X3RpbWVzKSB7CisgICAgICBh
LmN1cnJlbnRUaW1lID0gMDsKKyAgICAgIGEucGxheSgpOworICAgICAgaWYgKG51bV9wbGF5ZWQg
PT0gcGxheV90aW1lcyAtIDEpIHsKKyAgICAgICAgYSA9IG51bGw7CisgICAgICAgIGZvcmNlR0Mo
KTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdG90YWxfcGxheWVkICsrOworICAgICAg
aWYgKHRvdGFsX3BsYXllZCA8IG51bV9wbGF5ZXJzKQorICAgICAgICBzdGFydCgpOworICAgICAg
ZWxzZQorICAgICAgICBmaW5pc2goKTsKKyAgICB9CisgIH0pOworICBhLmFkZEV2ZW50TGlzdGVu
ZXIoJ2NhbnBsYXl0aHJvdWdoJywgZnVuY3Rpb24oKSB7CisgICAgYS5wbGF5KCk7CisgIH0pOwor
fQorCitzdGFydCgpOworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPiAKSW5kZXg6IExh
eW91dFRlc3RzL21lZGlhL2NvbnRlbnQvY2xpY2syLndhdgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9tZWRp
YS9jb250ZW50L2NsaWNrMi53YXYKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICAr
IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKClVrbEdSblFHQUFCWFFWWkZabTEwSUJBQUFBQUJB
QUVBRVNzQUFCRXJBQUFCQUFnQVpHRjBZVThHQUFDQmdJRi9nbjJDZjRCK2duNSsKZllKL2dJRi9n
SCtCZlg2QWZYdDVmWHg3ZTN4OWZIMStmNENBZm54OWYzdDlnSUI5ZW4yRGZuNThmWUtEZ0lKOWhu
aDdoSVo4Z1lSNgpmSHlDZTRHQ2lvRitnSDkzZm9XQ2dvSjVnSHg1Z25pQWVZSjBkbmVDZ1hOMWpu
MStmSTF6ZkhwOGRZaUNlM3FJaEhwbWZYcU1lWkowCkFDYi9BQUQvL3dBQVEvOEEzcFlBTnYvcVll
azVPR3AzdElDZWV4allVa1dnWU16ekFCLy9oRHlWY1gyWWk1cHBYTE5zWFlLRVozbDcKYUhHVG4x
cG5sWmx3VnB1VWdxT0tnSU9NWUlwc29YVnlkSktkYzI5NmtabDNoM09BY29WNmFvNkJlMjk4aXBD
RmhJRnhrM3lJZVhOdQpoNGVIaVloL2MzaDFlSkNVZW5DQ2ZIOXllWlNLY0hSN2VIOXVnWWwrZUlt
RmZXeHVoWDF1aUl4K2dZWm1nMzU1aEhsemdYbDFkSWVXCmRHbWNpWHB0ZVlXTWMzR09mbnR5ZTVL
aGgxK2Jlb2FGZ21KNWs0S1VlM0NYaW0yR2RKYUZZWG1lYzFHb21HOTdiNG1aY25DSWJYNkUKYlg2
TGJXZDFlNEIwZDR4NmNYdUtjb0tNZG9CNWVadDlkb2gwZTMyQWc1Q1Nnbk9Fa0lXQmdYNkFlWXFS
ZW5KOWhvS0RoSVI2Z0lCdAplNDJEZUh1RmhtMThnMzV3ZTR4OWRubUJnSHArYm5pQmZJRjJlWUIz
ZllWM2RYK0ZkSU9DZjNaN2ZvRjhlNG1BZkh1Q2RuK0xjM1dLCmhYeUVobnQ3Z29GNGZvU0RoSDE3
ZjR1RmZucC9pbzkwYzRPQmZIdUNnNEp5aEl4eWNIMkpnbnVEaUhsOGhIOThkSU9EZElLQmVJWjgK
ZkhlQ2lYeCtmM1NJZjNWN2VZU0NkSHVDZ25oNmhJRnppb1YzZ1l1QWVYbDllNFY3ZTMrSmduVjZn
SUo3aElpQ2UzeUlpbng5aFlHQQpoWDE3aDRPQmZJQ0ZmSWlGZkhoOWhuOTNnbnAyaFlSNmZvRjRk
bjkvZFgxL2VYOS9kSE4rZ29CM2VvRjhmSHQ2ZjMxNmZJRjZnSUY4CmVIMkNnbnQvZ29WNmlIeDNp
SVI2ZjRDRGczdUdnM3lBaUlOOWc0Qi9nbitDZ1g1OWhuOTZmbitGZlg1OWY0U0NnSVI3Zm9KN2ZZ
R0EKZm9GNmY0RjVmSHlEZlhtRmZudDVoSUI1Zm4xL2ZYMStnSGw5Zm9OOGZZR0Nmb0NHZW42QWdv
Qi9nSDkvZzNwOGZZV0dmWHFEaEgxNwpnSU9DZm4rQ2VvQ0RnM3A2ZklHRmZYcC9nWVI5ZFlOL2dY
NTdlMzU5Zm9KOWZvR0FmMzU3Z0lDQWZJSjdmbjE2aG9WNmZYeUFnWCtCCmZuNStnbmw1Z1lTQmZI
MTllNGg3ZklTRWVJQitnSCtFZDMrQ2YzcDZoWDJBZjNxQWZYNS9mbjk4ZjRHQmdIdDNnWVovZlg5
OWdIeDgKZ0g5N2hvUjNnWDUvZzNsK2czMS9nMzE1ZjROOGZYK0FnWDZBZjM1K2dINkFnWDk3Zm9D
Q2ZYOTlnbjErZ1lGN2dJUjllbitEZ0g1OQpmMzE5Z1lCOGZuMS9mMzJCZTN1Q2dYeCtmWVIvZkgy
Q2YzMStmb0tFZkh5QmczMS9mbjUvZ29KN2dJYUFmWDkvZ24rQmduNTZnNEovCmdvRi9mb0IvZ0lC
L2ZuK0JmM3VBZ245NmYzOThnSUIvZm55QWdIeDlmbjUrZjNwK2dueDlmM3gvZjM5OGYzOTlnSDkv
Zm42RGYzeUIKZjM5L2dJQjlmNEYvZ1lGK2Y0Q0Nmb0YvZjRLQ2dJQ0FmNEtBZzRCK2Y0S0NmWDU5
Z29OOWZZQi9nSUI2Z0g5OWZJQ0FmWDEvZ254NwpmWUIvZ1h4OWZuNS9mbjk5Zlg1K2ZYNStmbjUv
ZjM5L2dYNS9nbngrZ0lGL2ZvQ0NmbjJBZjRKK2ZvR0JnWDkvZjRDQ2ZJR0FnWUYvCmYzNkFnWUIr
Z0lHQWdIMkFnWDk5Z0g5L2dIMkFmMytBZlh4OWdIeCtmSHlBZlg1K2ZIMkFnbnQ3ZjM1L2ZYOS9m
MzkvZlhwK2dINSsKZ29COWYzOS9nbjU5Z1grQWYzMS9nSUIvZjM5L2dINkFnSUNCZm9DRWY0Qitm
NEtCZjRCL2dZR0RmbitBZjRCL2ZuNTlmb0YrZm9LQgpmbjkrZkh5QWZuNStmbitCZVgrRmczTjdo
WDU4Z0grQWZuNkZkSHVJZ25oK2c0QjZlNGlHZUhxRmhYaDdnMytBZjM2QWc0U0FlWCtFCmVuMStn
NFY3ZW42RWYzK0FnWDkvZjRCK2ZIeCtmb0ovZkg2Q2hIeDlmb0dCZzN0NWZvSi9mM3grZllGK2Yz
MStnSUNCZ1g1L2Y0RisKZm41L2ZYNTlmbjkrZ0lPQWYzK0FmNEI5Zm45K2dYOStnWCtCZm9HQmdJ
Qi9mMzEvZ24rQ2ZJQi9mWUYrZjM2QmYzNS9mb0IvZjM5OApnWCtBZjMxL2Y0Q0JmMzU4Z0lLQWZu
OStnbjJBZjM1K2duOTlmMzZCZjMxK2YzK0FmMzk5ZjRDQmZvQ0FmWCtCZlgrQWdINkFnSDkrCmdJ
WjlmWUovaUlCM2ZJdC9kSVNCZ0h4L2Y0T0ZmMzJBZ1g1M2ZJT0NlNEtCZm4yQmVuNTdmM3Q0ZjRO
OWdINkJnWUtBZ0hsL2duMS8KZjROL2YzNkRnb0NCZm9KK2VYMTdnSDE4ZTRGL2ZZQitoWDZEZzRP
QmdJQjhmSHQrZjM5K2ZYOS9mb0tCZ0lHRWYzMS9nWDZBZ29HRApmb0NFZjMyQkFBPT0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110005</attachid>
            <date>2011-10-06 13:18:59 -0700</date>
            <delta_ts>2011-10-11 14:43:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111006131858.patch</filename>
            <type>text/plain</type>
            <size>15424</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NzE3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXggY29uc2lzdHMgb2YgMiBwYXJ0czoKKyAgICAgICAg
KGEpIG1ha2UgSFRNTEF1ZGlvRWxlbWVudCBhbiAnYWN0aXZlJyBvbmUsIG1lYW5pbmcgdGhhdCBp
dCBjYW5ub3QgYmUKKyAgICAgICAgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgaXQgaGFzIHBhbmRpbmcg
YWN0aXZpdHkKKyAgICAgICAgKGIpIGZpeCB2OCBiaW5kaW5ncyBidWcgdGhhdCB3YXMgaW4gdGhl
IGNvZGUgZm9yZXZlciwgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgY291bGQgYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQgZXZlbiBpZiBvYmplY3QgaXQgYXR0YWNoZWQgdG8gaXMgc3RpbGwKKyAgICAgICAg
YWxpdmUsIHJlc3VsdGluZyBpbiB0aGUgbG9zcyBvZiBldmVudHMuCisKKyAgICAgICAgU3VibWl0
dGluZyBib3RoIGZpeGVzIHRvZ2V0aGVyIGJlY2F1c2Ugd2l0aG91dCAybmQgZml4IEkgY291bGQg
bm90CisgICAgICAgIHByb2dyYW1tYXRpY2FsbHkgdGVzdCAxc3QgZml4IC0tIHRlc3QgaGFzIHRv
IGRlcGVuZCBvbiB0aGUgZXZlbnRzLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL2F1ZGlvLWdhcmJh
Z2UtY29sbGVjdC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKToKKyAgICAg
ICAgKElzQWN0aXZlRG9tVHlwZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnY4SFRNTEF1
ZGlvRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAqIGh0bWwvSFRNTEF1ZGlv
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudDo6aGFzUGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKwogMjAxMS0x
MC0wNSAgWXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KICAgICAgICAgCiAg
ICAgICAgIFVucmV2aWV3ZWQuIEJ1aWxkIGZpeDogbWFrZSBJbnNwZWN0b3JTdGF0ZUNsaWVudC5o
IFByaXZhdGUgaW4gWENvZGUgcHJvamVjdC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCShyZXZpc2lvbiA5NjcxNykKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTQyLDEwICsxMTQyLDEzIEBAIHN1YiBHZW5lcmF0ZUV2ZW50TGlzdGVu
ZXJDYWxsYmFjawogewogICAgIG15ICRpbXBsQ2xhc3NOYW1lID0gc2hpZnQ7CiAgICAgbXkgJHJl
cXVpcmVzSGlkZGVuRGVwZW5kZW5jeSA9IHNoaWZ0OworICAgIG15ICRyZXF1aXJlc0hpZGRlblZh
bHVlID0gc2hpZnQ7CiAgICAgbXkgJGZ1bmN0aW9uTmFtZSA9IHNoaWZ0OwogICAgIG15ICRsb29r
dXBUeXBlID0gKCRmdW5jdGlvbk5hbWUgZXEgImFkZCIpID8gIk9yQ3JlYXRlIiA6ICJPbmx5IjsK
ICAgICBteSAkcGFzc1JlZlB0ckhhbmRsaW5nID0gKCRmdW5jdGlvbk5hbWUgZXEgImFkZCIpID8g
IiIgOiAiLmdldCgpIjsKICAgICBteSAkaGlkZGVuRGVwZW5kZW5jeUFjdGlvbiA9ICgkZnVuY3Rp
b25OYW1lIGVxICJhZGQiKSA/ICJjcmVhdGUiIDogInJlbW92ZSI7CisgICAgbXkgJGhpZGRlblZh
bHVlQWN0aW9uID0gKCRmdW5jdGlvbk5hbWUgZXEgImFkZCIpID8gIlNldCIgOiAiRGVsZXRlIjsK
KyAgICBteSAkaGlkZGVuVmFsdWVFeHRyYUFyZ3MgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikg
PyAiLCBhcmdzWzFdIiA6ICIiOwogIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5E
KTsKIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gJHtmdW5jdGlvbk5hbWV9RXZlbnRMaXN0
ZW5lckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCkBAIC0xMTYwLDYgKzExNjMs
MTkgQEAgRU5ECiAgICAgICAgICR7aGlkZGVuRGVwZW5kZW5jeUFjdGlvbn1IaWRkZW5EZXBlbmRl
bmN5KGFyZ3MuSG9sZGVyKCksIGFyZ3NbMV0sIFY4JHtpbXBsQ2xhc3NOYW1lfTo6ZXZlbnRMaXN0
ZW5lckNhY2hlSW5kZXgpOwogRU5ECiAgICAgfQorICAgIGVsc2lmICgkcmVxdWlyZXNIaWRkZW5W
YWx1ZSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CisgICAgICAg
IC8vIEF0dGFjaCBsaXN0ZW5lciB0byB0aGUgb2JqZWN0IHNvIGxpc3RlbmVyIGNhbm5vdCBiZSBj
b2xsZWN0ZWQgd2hpbGUKKyAgICAgICAgLy8gb2JqZWN0IGlzIHN0aWxsIGFsaXZlLiBEb24ndCB3
YW50IHRvIGFkZCBleHRyYSBzbG90IHRvIHRoZSBOb2RlIHR5cGUsCisgICAgICAgIC8vIGFzIGl0
IHdpbGwgZ3JvdyBlYWNoIGFuZCBldmVyeSBub2RlLCB3aGlsZSBhYnNvbHV0ZSBtYWpvcml0eSBv
ZiBub2RlcworICAgICAgICAvLyB3b3VsZCBuZXZlciBoYXZlIGxpc3RlbmVycyBhdHRhY2hlZC4g
SW5zdGVhZCB1c2UgVjggaGlkZGVuIHZhbHVlCisgICAgICAgIC8vIG1lY2hhbmlzbSAtLSBhZGQv
cmVtb3ZlIGtleSAibGlzdGVuZXIvPGxpc3RlbmVyIGFkZHJlc3M+LzxldmVudCBuYW1lPiIKKyAg
ICAgICAgLy8gd2l0aCBsaXN0ZW5lciBhcyB2YWx1ZS4KKyAgICAgICAgY2hhciBwcmVmaXhbNjRd
OworICAgICAgICBzcHJpbnRmKHByZWZpeCwgXCJsaXN0ZW5lci8lcC9cIiwgbGlzdGVuZXIuZ2V0
KCkpOworICAgICAgICBhcmdzLkhvbGRlcigpLT4ke2hpZGRlblZhbHVlQWN0aW9ufUhpZGRlblZh
bHVlKHY4OjpTdHJpbmc6OkNvbmNhdCh2ODo6U3RyaW5nOjpOZXcocHJlZml4KSwgYXJnc1swXS0+
VG9TdHJpbmcoKSkke2hpZGRlblZhbHVlRXh0cmFBcmdzfSk7CitFTkQKKyAgICB9CiAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwogICAgIH0KICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwpAQCAtMTI2NiwxMCArMTI4MiwxMCBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxi
YWNrCiAgICAgIyBidXQgdGhleSBhcmUgZXh0cmVtZWx5IGNvbnNpc3RlbnQgYWNyb3NzIHRoZSB2
YXJpb3VzIGNsYXNzZXMgdGhhdCB0YWtlIGV2ZW50IGxpc3RlbmVycywKICAgICAjIHNvIHdlIGNh
biBnZW5lcmF0ZSB0aGVtIGFzIGEgInNwZWNpYWwgY2FzZSIuCiAgICAgaWYgKCRuYW1lIGVxICJh
ZGRFdmVudExpc3RlbmVyIikgewotICAgICAgICBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFj
aygkaW1wbENsYXNzTmFtZSwgIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2RlKSwgImFkZCIpOworICAg
ICAgICBHZW5lcmF0ZUV2ZW50TGlzdGVuZXJDYWxsYmFjaygkaW1wbENsYXNzTmFtZSwgIUlzTm9k
ZVN1YlR5cGUoJGRhdGFOb2RlKSwgJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPnsiRXZl
bnRUYXJnZXQifSwgImFkZCIpOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNpZiAoJG5hbWUg
ZXEgInJlbW92ZUV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5l
ckNhbGxiYWNrKCRpbXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpLCAicmVt
b3ZlIik7CisgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKCRpbXBsQ2xhc3NO
YW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpLCAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmli
dXRlcy0+eyJFdmVudFRhcmdldCJ9LCAicmVtb3ZlIik7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKQEAgLTI4NDgsNyArMjg2NCwxMiBAQCBzdWIgR2V0RG9tTWFwRnVuY3Rpb24KIAogc3ViIElz
QWN0aXZlRG9tVHlwZQogewotICAgICMgRklYTUU6IENvbnNpZGVyIG1ha2luZyB0aGlzIGFuIC5p
ZGwgYXR0cmlidXRlLgorICAgICMgRklYTUU6IE1ha2UgdGhpcyBhbiAuaWRsIGF0dHJpYnV0ZS4K
KyAgICAjIE5vdCBlYXN5IGJlY2F1c2Ugd2UgZG8gbm90IGhhdmUgJGRhdGFOb2RlLCBvbmx5ICR0
eXBlLCBhbmQgY2FsbGVyIG1heQorICAgICMgbm90IGhhdmUgJGRhdGFOb2RlIGFzIHdlbGwuIEdl
dHRpbmcgZXh0ZW5kZWRBdHRyaWJ1dGVzIHN0YXJ0aW5nIGZyb20KKyAgICAjICR0eXBlIGlzIG5v
dCBzdXBwb3J0ZWQuIE1vc3QgcHJvbWlzaW5nIHdheSBpcyB0byBpdGVyYXRlIHRocm91Z2ggYWxs
CisgICAgIyAuaWRsIGZpbGVzIHNlYXJjaGluZyBmb3IgdGhlIG1hdGNoaW5nIHR5cGUgbmFtZSwg
YW5kIHRoZW4gbG9vayBhdCB0aGUKKyAgICAjIGV4dGVuZGVkQXR0cmlidXRlcywgYnV0IHRoYXQg
d291bGQgcmVxdWlyZSBsb3Qgb2YgY2hhbmdlcy4uLgogICAgIG15ICR0eXBlID0gc2hpZnQ7CiAg
ICAgcmV0dXJuIDEgaWYgJHR5cGUgZXEgIkV2ZW50U291cmNlIjsKICAgICByZXR1cm4gMSBpZiAk
dHlwZSBlcSAiTWVzc2FnZVBvcnQiOwpAQCAtMjg2MCw2ICsyODgxLDcgQEAgc3ViIElzQWN0aXZl
RG9tVHlwZQogICAgIHJldHVybiAxIGlmICR0eXBlIGVxICJJREJUcmFuc2FjdGlvbiI7CiAgICAg
cmV0dXJuIDEgaWYgJHR5cGUgZXEgIkZpbGVSZWFkZXIiOwogICAgIHJldHVybiAxIGlmICR0eXBl
IGVxICJGaWxlV3JpdGVyIjsKKyAgICByZXR1cm4gMSBpZiAkdHlwZSBlcSAiSFRNTEF1ZGlvRWxl
bWVudCI7CiAgICAgcmV0dXJuIDA7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gOTY3MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NCw3ICs0NCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV3JhcHBlclR5
cGVJbmZvIFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOEhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIDAsIDAsIDAgfTsKK1dyYXBwZXJUeXBl
SW5mbyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgVjhIVE1MQXVkaW9F
bGVtZW50Q29uc3RydWN0b3I6OkdldFRlbXBsYXRlLCBWOEhUTUxBdWRpb0VsZW1lbnQ6OmRlcmVm
T2JqZWN0LCBWOEhUTUxBdWRpb0VsZW1lbnQ6OnRvQWN0aXZlRE9NT2JqZWN0LCAwIH07CiAKIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3JD
YWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewpAQCAtNjUsNyArNjUsNiBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvCiAgICAgLy8gbWF5IGVuZCB1
cCBiZWluZyB0aGUgb25seSBub2RlIGluIHRoZSBtYXAgYW5kIGdldCBnYXJiYWdlLWNvbGxlY3Rl
ZCBwcmVtYXR1cmVseS4KICAgICB0b1Y4KGRvY3VtZW50KTsKIAotCiAgICAgU3RyaW5nIHNyYzsK
ICAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDApCiAgICAgICAgIHNyYyA9IHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzBdKTsKQEAgLTczLDcgKzcyLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2OEhUTUxBdWRpbwogCiAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9s
ZGVyKCksICZWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6aW5mbywgYXVkaW8uZ2V0KCkp
OwogICAgIGF1ZGlvLT5yZWYoKTsKLSAgICBWOERPTVdyYXBwZXI6OnNldEpTV3JhcHBlckZvckRP
TU5vZGUoYXVkaW8uZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5I
b2xkZXIoKSkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2Jq
ZWN0KGF1ZGlvLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9s
ZGVyKCkpKTsKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIApJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgJKHJldmlzaW9uIDk2NzE3KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQw
LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGNy
ZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBjcmVhdGVGb3JKU0NvbnN0cnVjdG9yKERvY3VtZW50Kiwg
Y29uc3QgU3RyaW5nJiBzcmMpOwogCisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0
eSgpIGNvbnN0IHsgcmV0dXJuIGlzUGxheWluZygpIHx8IEhUTUxNZWRpYUVsZW1lbnQ6Omhhc1Bl
bmRpbmdBY3Rpdml0eSgpOyB9CisKIHByaXZhdGU6CiAgICAgSFRNTEF1ZGlvRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXVkaW9FbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBdWRpb0VsZW1lbnQuaWRsCShyZXZpc2lvbiA5NjcxNykKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAogbW9kdWxlIGh0bWwgewogICAgIGludGVyZmFjZSBbCisgICAgICAgIEFjdGl2ZURPTU9i
amVjdCwKICAgICAgICAgQ29uZGl0aW9uYWw9VklERU8KICAgICBdIEhUTUxBdWRpb0VsZW1lbnQg
OiBIVE1MTWVkaWFFbGVtZW50IHsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCShyZXZpc2lvbiA5NjcxNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFdp
ZGdldDsKIC8vIEJ1dCBpdCBjYW4ndCBiZSB1bnRpbCB0aGUgQ2hyb21pdW0gV2ViTWVkaWFQbGF5
ZXJDbGllbnRJbXBsIGNsYXNzIGlzIGZpeGVkIHNvIGl0CiAvLyBubyBsb25nZXIgZGVwZW5kcyBv
biB0eXBlY2FzdGluZyBhIE1lZGlhUGxheWVyQ2xpZW50IHRvIGFuIEhUTUxNZWRpYUVsZW1lbnQu
CiAKLWNsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBN
ZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHByaXZhdGUg
QWN0aXZlRE9NT2JqZWN0IHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVs
ZW1lbnQsIHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlz
dGVuZXIsIHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIE1lZGlhUGxheWVy
KiBwbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllci5nZXQoKTsgfQogICAgIApAQCAtMjA0
LDYgKzIwNCw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgeyByZXR1
cm4gbV9wbGF5aW5nOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3Q7CisKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogICAgIE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZSogYXVkaW9Tb3VyY2VOb2RlKCkgeyByZXR1cm4gbV9hdWRpb1NvdXJjZU5vZGU7IH0K
ICAgICB2b2lkIHNldEF1ZGlvU291cmNlTm9kZShNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUq
KTsKQEAgLTI2Nyw3ICsyNjksNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5k
KFJlYXNvbkZvclN1c3BlbnNpb24pOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKICAgICB2
aXJ0dWFsIHZvaWQgc3RvcCgpOwotICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHko
KSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsK
IApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gOTY3MTcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxMS0wOS0yNyAgRXVnZW5lIE5hbGltb3Yg
IDxlbmFsQGNocm9taXVtLm9yZz4KKworICAgICAgICBQbGF5aW5nIEhUTUxBdWRpb0VsZW1lbnQg
Y2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02Njg3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGVkIHJlZ3Jlc3Npb24gdGVzdCB0aGF0IHBsYXlzIHNob3J0IGF1
ZGlvICh+MSBzZWNvbmQpIHNldmVyYWwgdGltZXMKKyAgICAgICAgaW4gYSByb3cgYW5kIGNhdXNl
cyBnYXJiYWdlIGNvbGxlY3RvciBpbiBwYXJhbGxlbC4gVGVzdCBzaG91bGQgcGxheQorICAgICAg
ICBhdWRpbyBzdHJlYW0gc3BlY2lmaWVkIG51bWJlciBvZiB0aW1lcyBhbmQgc2lnbmFsICdlbmRl
ZCcgZXZlbnQuCisKKyAgICAgICAgKiBtZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QuaHRt
bDogQWRkZWQuCisgICAgICAgICogbWVkaWEvY29udGVudC9jbGljazIud2F2OiBBZGRlZC4KKwog
MjAxMS0xMC0wNSAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFtRdF1bV0syXSBVbnJldmlld2VkIGdhcmRlbmluZy4KSW5kZXg6IExheW91dFRlc3RzL21l
ZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIHRoYXQgd2UgZG9uJ3Qg
Z2FyYmFnZSBjb2xsZWN0IHBsYXlpbmcgYXVkaW8gb2JqZWN0IG9yIGV2ZW50IGxpc3RlbmVyLgor
CitBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJl
bnQtd29yay9tdWx0aXBhZ2UvdGhlLXZpZGVvLWVsZW1lbnQuaHRtbCwKKyI0LjguMTAuOCBQbGF5
aW5nIHRoZSBtZWRpYSByZXNvdXJjZSIsCisiTWVkaWEgZWxlbWVudHMgbXVzdCBub3Qgc3RvcCBw
bGF5aW5nIGp1c3QgYmVjYXVzZSBhbGwgcmVmZXJlbmNlcyB0byB0aGVtIGhhdmUgYmVlbiByZW1v
dmVkOyBvbmx5IG9uY2UgYSBtZWRpYSBlbGVtZW50IGlzIGluIGEgc3RhdGUgd2hlcmUgbm8gZnVy
dGhlciBhdWRpbyBjb3VsZCBldmVyIGJlIHBsYXllZCBieSB0aGF0IGVsZW1lbnQgbWF5IHRoZSBl
bGVtZW50IGJlIGdhcmJhZ2UgY29sbGVjdGVkLiIKKworKHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzggYW5kIGh0dHA6Ly9jcmJ1Zy5jb20vNjI2MDQgZm9y
IG1vcmUgZGV0YWlscykuCisKK1BBU1MKKworCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9hdWRp
by1nYXJiYWdlLWNvbGxlY3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9h
dWRpby1nYXJiYWdlLWNvbGxlY3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21l
ZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1
IEBACis8IURPQ1RZUEUgSFRNTD4KKworPGh0bWw+Cis8Ym9keT4KKworPHA+VGVzdHMgdGhhdCB3
ZSBkb24ndCBnYXJiYWdlIGNvbGxlY3QgcGxheWluZyBhdWRpbyBvYmplY3Qgb3IgZXZlbnQgbGlz
dGVuZXIuPC9wPgorPHA+QWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93
ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS12aWRlby1lbGVtZW50Lmh0bWwsPGJy
IC8+CisiNC44LjEwLjggUGxheWluZyB0aGUgbWVkaWEgcmVzb3VyY2UiLDxiciAvPgorIk1lZGlh
IGVsZW1lbnRzIG11c3Qgbm90IHN0b3AgcGxheWluZyBqdXN0IGJlY2F1c2UgYWxsIHJlZmVyZW5j
ZXMgdG8gdGhlbSBoYXZlCitiZWVuIHJlbW92ZWQ7IG9ubHkgb25jZSBhIG1lZGlhIGVsZW1lbnQg
aXMgaW4gYSBzdGF0ZSB3aGVyZSBubyBmdXJ0aGVyIGF1ZGlvCitjb3VsZCBldmVyIGJlIHBsYXll
ZCBieSB0aGF0IGVsZW1lbnQgbWF5IHRoZSBlbGVtZW50IGJlIGdhcmJhZ2UgY29sbGVjdGVkLiI8
YnIgLz48YnIgLz4KKyhzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY2ODc4IGFuZCBodHRwOi8vY3JidWcuY29tLzYyNjA0IGZvciBtb3JlIGRldGFpbHMpLjwvcD4K
KzxwIGlkPSJyZXN1bHQiPgorICAgIEZBSUw6IFRlc3QgZWl0aGVyIHN0aWxsIHJ1bm5pbmcgb3Ig
c3RvcHBlZCBwcmVtYXR1cmVseS4KKzwvcD4KKworPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPXZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciBudW1fcGxheWVycyA9IDQ7Cit2YXIgcGxheV90
aW1lcyA9IDU7CisKK3ZhciBhOwordmFyIG51bV9wbGF5ZWQ7Cit2YXIgdG90YWxfcGxheWVkID0g
MDsKKworZnVuY3Rpb24gZm9yY2VHQygpIHsKKyAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisg
ICAgcmV0dXJuIEdDQ29udHJvbGxlci5jb2xsZWN0KCk7CisKKyAgLy8gRm9yY2UgZ2FyYmFnZSBj
b2xsZWN0aW9uCisgIGZvciAodmFyIG5keCA9IDA7IG5keCA8IDk5MDAwOyBuZHggKyspCisgICAg
dmFyIHN0ciA9IG5ldyBTdHJpbmcoIjEyMzQiKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgewor
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ID0gIlBBU1MiOwor
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICB9Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KCkgeworICBudW1f
cGxheWVkID0gMDsKKyAgdmFyIGF1ZGlvRmlsZSA9IGZpbmRNZWRpYUZpbGUoImF1ZGlvIiwgImNv
bnRlbnQvY2xpY2syIik7CisgIGEgPSBuZXcgQXVkaW8oYXVkaW9GaWxlKTsKKyAgYS5hZGRFdmVu
dExpc3RlbmVyKCdlbmRlZCcsIGZ1bmN0aW9uKCkgeworICAgIG51bV9wbGF5ZWQgKys7CisgICAg
aWYgKG51bV9wbGF5ZWQgPCBwbGF5X3RpbWVzKSB7CisgICAgICBhLmN1cnJlbnRUaW1lID0gMDsK
KyAgICAgIGEucGxheSgpOworICAgICAgaWYgKG51bV9wbGF5ZWQgPT0gcGxheV90aW1lcyAtIDEp
IHsKKyAgICAgICAgYSA9IG51bGw7CisgICAgICAgIGZvcmNlR0MoKTsKKyAgICAgIH0KKyAgICB9
IGVsc2UgeworICAgICAgdG90YWxfcGxheWVkICsrOworICAgICAgaWYgKHRvdGFsX3BsYXllZCA8
IG51bV9wbGF5ZXJzKQorICAgICAgICBzdGFydCgpOworICAgICAgZWxzZQorICAgICAgICBmaW5p
c2goKTsKKyAgICB9CisgIH0pOworICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdo
JywgZnVuY3Rpb24oKSB7CisgICAgYS5wbGF5KCk7CisgIH0pOworfQorCitzdGFydCgpOworCis8
L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPiAKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL2Nv
bnRlbnQvY2xpY2syLndhdgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBh
cyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9tZWRpYS9jb250ZW50L2NsaWNrMi53
YXYKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKClVrbEdSblFHQUFCWFFWWkZabTEwSUJBQUFBQUJBQUVBRVNzQUFCRXJBQUFCQUFn
QVpHRjBZVThHQUFDQmdJRi9nbjJDZjRCK2duNSsKZllKL2dJRi9nSCtCZlg2QWZYdDVmWHg3ZTN4
OWZIMStmNENBZm54OWYzdDlnSUI5ZW4yRGZuNThmWUtEZ0lKOWhuaDdoSVo4Z1lSNgpmSHlDZTRH
Q2lvRitnSDkzZm9XQ2dvSjVnSHg1Z25pQWVZSjBkbmVDZ1hOMWpuMStmSTF6ZkhwOGRZaUNlM3FJ
aEhwbWZYcU1lWkowCkFDYi9BQUQvL3dBQVEvOEEzcFlBTnYvcVllazVPR3AzdElDZWV4allVa1dn
WU16ekFCLy9oRHlWY1gyWWk1cHBYTE5zWFlLRVozbDcKYUhHVG4xcG5sWmx3VnB1VWdxT0tnSU9N
WUlwc29YVnlkSktkYzI5NmtabDNoM09BY29WNmFvNkJlMjk4aXBDRmhJRnhrM3lJZVhOdQpoNGVI
aVloL2MzaDFlSkNVZW5DQ2ZIOXllWlNLY0hSN2VIOXVnWWwrZUltRmZXeHVoWDF1aUl4K2dZWm1n
MzU1aEhsemdYbDFkSWVXCmRHbWNpWHB0ZVlXTWMzR09mbnR5ZTVLaGgxK2Jlb2FGZ21KNWs0S1Vl
M0NYaW0yR2RKYUZZWG1lYzFHb21HOTdiNG1aY25DSWJYNkUKYlg2TGJXZDFlNEIwZDR4NmNYdUtj
b0tNZG9CNWVadDlkb2gwZTMyQWc1Q1Nnbk9Fa0lXQmdYNkFlWXFSZW5KOWhvS0RoSVI2Z0lCdApl
NDJEZUh1RmhtMThnMzV3ZTR4OWRubUJnSHArYm5pQmZJRjJlWUIzZllWM2RYK0ZkSU9DZjNaN2Zv
RjhlNG1BZkh1Q2RuK0xjM1dLCmhYeUVobnQ3Z29GNGZvU0RoSDE3ZjR1RmZucC9pbzkwYzRPQmZI
dUNnNEp5aEl4eWNIMkpnbnVEaUhsOGhIOThkSU9EZElLQmVJWjgKZkhlQ2lYeCtmM1NJZjNWN2VZ
U0NkSHVDZ25oNmhJRnppb1YzZ1l1QWVYbDllNFY3ZTMrSmduVjZnSUo3aElpQ2UzeUlpbng5aFlH
QQpoWDE3aDRPQmZJQ0ZmSWlGZkhoOWhuOTNnbnAyaFlSNmZvRjRkbjkvZFgxL2VYOS9kSE4rZ29C
M2VvRjhmSHQ2ZjMxNmZJRjZnSUY4CmVIMkNnbnQvZ29WNmlIeDNpSVI2ZjRDRGczdUdnM3lBaUlO
OWc0Qi9nbitDZ1g1OWhuOTZmbitGZlg1OWY0U0NnSVI3Zm9KN2ZZR0EKZm9GNmY0RjVmSHlEZlht
RmZudDVoSUI1Zm4xL2ZYMStnSGw5Zm9OOGZZR0Nmb0NHZW42QWdvQi9nSDkvZzNwOGZZV0dmWHFE
aEgxNwpnSU9DZm4rQ2VvQ0RnM3A2ZklHRmZYcC9nWVI5ZFlOL2dYNTdlMzU5Zm9KOWZvR0FmMzU3
Z0lDQWZJSjdmbjE2aG9WNmZYeUFnWCtCCmZuNStnbmw1Z1lTQmZIMTllNGg3ZklTRWVJQitnSCtF
ZDMrQ2YzcDZoWDJBZjNxQWZYNS9mbjk4ZjRHQmdIdDNnWVovZlg5OWdIeDgKZ0g5N2hvUjNnWDUv
ZzNsK2czMS9nMzE1ZjROOGZYK0FnWDZBZjM1K2dINkFnWDk3Zm9DQ2ZYOTlnbjErZ1lGN2dJUjll
bitEZ0g1OQpmMzE5Z1lCOGZuMS9mMzJCZTN1Q2dYeCtmWVIvZkgyQ2YzMStmb0tFZkh5QmczMS9m
bjUvZ29KN2dJYUFmWDkvZ24rQmduNTZnNEovCmdvRi9mb0IvZ0lCL2ZuK0JmM3VBZ245NmYzOThn
SUIvZm55QWdIeDlmbjUrZjNwK2dueDlmM3gvZjM5OGYzOTlnSDkvZm42RGYzeUIKZjM5L2dJQjlm
NEYvZ1lGK2Y0Q0Nmb0YvZjRLQ2dJQ0FmNEtBZzRCK2Y0S0NmWDU5Z29OOWZZQi9nSUI2Z0g5OWZJ
Q0FmWDEvZ254NwpmWUIvZ1h4OWZuNS9mbjk5Zlg1K2ZYNStmbjUvZjM5L2dYNS9nbngrZ0lGL2Zv
Q0NmbjJBZjRKK2ZvR0JnWDkvZjRDQ2ZJR0FnWUYvCmYzNkFnWUIrZ0lHQWdIMkFnWDk5Z0g5L2dI
MkFmMytBZlh4OWdIeCtmSHlBZlg1K2ZIMkFnbnQ3ZjM1L2ZYOS9mMzkvZlhwK2dINSsKZ29COWYz
OS9nbjU5Z1grQWYzMS9nSUIvZjM5L2dINkFnSUNCZm9DRWY0QitmNEtCZjRCL2dZR0RmbitBZjRC
L2ZuNTlmb0YrZm9LQgpmbjkrZkh5QWZuNStmbitCZVgrRmczTjdoWDU4Z0grQWZuNkZkSHVJZ25o
K2c0QjZlNGlHZUhxRmhYaDdnMytBZjM2QWc0U0FlWCtFCmVuMStnNFY3ZW42RWYzK0FnWDkvZjRC
K2ZIeCtmb0ovZkg2Q2hIeDlmb0dCZzN0NWZvSi9mM3grZllGK2YzMStnSUNCZ1g1L2Y0RisKZm41
L2ZYNTlmbjkrZ0lPQWYzK0FmNEI5Zm45K2dYOStnWCtCZm9HQmdJQi9mMzEvZ24rQ2ZJQi9mWUYr
ZjM2QmYzNS9mb0IvZjM5OApnWCtBZjMxL2Y0Q0JmMzU4Z0lLQWZuOStnbjJBZjM1K2duOTlmMzZC
ZjMxK2YzK0FmMzk5ZjRDQmZvQ0FmWCtCZlgrQWdINkFnSDkrCmdJWjlmWUovaUlCM2ZJdC9kSVNC
Z0h4L2Y0T0ZmMzJBZ1g1M2ZJT0NlNEtCZm4yQmVuNTdmM3Q0ZjROOWdINkJnWUtBZ0hsL2duMS8K
ZjROL2YzNkRnb0NCZm9KK2VYMTdnSDE4ZTRGL2ZZQitoWDZEZzRPQmdJQjhmSHQrZjM5K2ZYOS9m
b0tCZ0lHRWYzMS9nWDZBZ29HRApmb0NFZjMyQkFBPT0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110580</attachid>
            <date>2011-10-11 14:43:07 -0700</date>
            <delta_ts>2011-10-11 15:06:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111011144306.patch</filename>
            <type>text/plain</type>
            <size>12324</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXggY29uc2lzdHMgb2YgMiBwYXJ0czoKKyAgICAgICAg
KGEpIG1ha2UgSFRNTEF1ZGlvRWxlbWVudCBhbiAnYWN0aXZlJyBvbmUsIG1lYW5pbmcgdGhhdCBp
dCBjYW5ub3QgYmUKKyAgICAgICAgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgaXQgaGFzIHBhbmRpbmcg
YWN0aXZpdHkKKyAgICAgICAgKGIpIGZpeCB2OCBiaW5kaW5ncyBidWcgdGhhdCB3YXMgaW4gdGhl
IGNvZGUgZm9yZXZlciwgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgY291bGQgYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQgZXZlbiBpZiBvYmplY3QgaXQgYXR0YWNoZWQgdG8gaXMgc3RpbGwKKyAgICAgICAg
YWxpdmUsIHJlc3VsdGluZyBpbiB0aGUgbG9zcyBvZiBldmVudHMuCisKKyAgICAgICAgU3VibWl0
dGluZyBib3RoIGZpeGVzIHRvZ2V0aGVyIGJlY2F1c2Ugd2l0aG91dCAybmQgZml4IEkgY291bGQg
bm90CisgICAgICAgIHByb2dyYW1tYXRpY2FsbHkgdGVzdCAxc3QgZml4IC0tIHRlc3QgaGFzIHRv
IGRlcGVuZCBvbiB0aGUgZXZlbnRzLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL2F1ZGlvLWdhcmJh
Z2UtY29sbGVjdC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKToKKyAgICAg
ICAgKElzQWN0aXZlRG9tVHlwZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnY4SFRNTEF1
ZGlvRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAqIGh0bWwvSFRNTEF1ZGlv
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudDo6aGFzUGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKwogMjAxMS0x
MC0xMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogbWFrZSBFeHRlbnNpb25zIGNvbXBvbmVudCBjb21waWxlLgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVj
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5NzE1MikKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6
OmluZm8gPSB7IFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgMCwg
MCwgMCB9OworV3JhcHBlclR5cGVJbmZvIFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjpp
bmZvID0geyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIFY4SFRN
TEF1ZGlvRWxlbWVudDo6ZGVyZWZPYmplY3QsIFY4SFRNTEF1ZGlvRWxlbWVudDo6dG9BY3RpdmVE
T01PYmplY3QsIDAgfTsKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxBdWRp
b0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7
CkBAIC02OCw3ICs2OCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVk
aW8KICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQg
Z2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgogICAgIHRvVjgoZG9jdW1lbnQpOwog
Ci0KICAgICBTdHJpbmcgc3JjOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCkKICAgICAgICAg
c3JjID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwpAQCAtNzYsNyArNzUsNyBAQCBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvCiAKICAgICBWOERPTVdyYXBwZXI6OnNl
dERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9y
OjppbmZvLCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8tPnJlZigpOwotICAgIFY4RE9NV3JhcHBl
cjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShhdWRpby5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6
Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dy
YXBwZXJGb3JBY3RpdmVET01PYmplY3QoYXVkaW8uZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpP
YmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkocmV2aXNpb24g
OTcxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
SFRNTEF1ZGlvRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCop
OwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGNyZWF0ZUZvckpTQ29u
c3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHNyYyk7CiAKKyAgICB2aXJ0dWFsIGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgeyByZXR1cm4gaXNQbGF5aW5nKCkgfHwgSFRN
TE1lZGlhRWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7IH0KKwogcHJpdmF0ZToKICAgICBI
VE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5pZGwJKHJldmlzaW9uIDk3MTUy
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiBtb2R1bGUgaHRtbCB7CiAgICAgaW50ZXJmYWNlIFsK
KyAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgICAgICBDb25kaXRpb25hbD1WSURFTwogICAg
IF0gSFRNTEF1ZGlvRWxlbWVudCA6IEhUTUxNZWRpYUVsZW1lbnQgewogICAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDk3MTUyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDcgKzU4LDcgQEAgY2xhc3MgV2lkZ2V0OwogLy8gQnV0IGl0IGNhbid0IGJlIHVudGlsIHRoZSBD
aHJvbWl1bSBXZWJNZWRpYVBsYXllckNsaWVudEltcGwgY2xhc3MgaXMgZml4ZWQgc28gaXQKIC8v
IG5vIGxvbmdlciBkZXBlbmRzIG9uIHR5cGVjYXN0aW5nIGEgTWVkaWFQbGF5ZXJDbGllbnQgdG8g
YW4gSFRNTE1lZGlhRWxlbWVudC4KIAotY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBI
VE1MRWxlbWVudCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwcml2YXRlIE1lZGlhQ2FuU3Rh
cnRMaXN0ZW5lciwgcHJpdmF0ZSBBY3RpdmVET01PYmplY3QgeworY2xhc3MgSFRNTE1lZGlhRWxl
bWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwcml2
YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJs
aWM6CiAgICAgTWVkaWFQbGF5ZXIqIHBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyLmdl
dCgpOyB9CiAgICAgCkBAIC0yMDUsNiArMjA1LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1Bs
YXlpbmcoKSBjb25zdCB7IHJldHVybiBtX3BsYXlpbmc7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKKwogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAg
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKiBhdWRpb1NvdXJjZU5vZGUoKSB7IHJldHVybiBt
X2F1ZGlvU291cmNlTm9kZTsgfQogICAgIHZvaWQgc2V0QXVkaW9Tb3VyY2VOb2RlKE1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZSopOwpAQCAtMjY4LDcgKzI3MCw2IEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbik7CiAgICAgdmlydHVhbCB2
b2lkIHJlc3VtZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7Ci0gICAgdmlydHVhbCBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBtZWRp
YVZvbHVtZURpZENoYW5nZSgpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NzE1MikKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTA5
LTI3ICBFdWdlbmUgTmFsaW1vdiAgPGVuYWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBsYXlp
bmcgSFRNTEF1ZGlvRWxlbWVudCBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODc4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0
IHRoYXQgcGxheXMgc2hvcnQgYXVkaW8gKH4xIHNlY29uZCkgc2V2ZXJhbCB0aW1lcworICAgICAg
ICBpbiBhIHJvdyBhbmQgY2F1c2VzIGdhcmJhZ2UgY29sbGVjdG9yIGluIHBhcmFsbGVsLiBUZXN0
IHNob3VsZCBwbGF5CisgICAgICAgIGF1ZGlvIHN0cmVhbSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRp
bWVzIGFuZCBzaWduYWwgJ2VuZGVkJyBldmVudC4KKworICAgICAgICAqIG1lZGlhL2F1ZGlvLWdh
cmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL2F1ZGlv
LWdhcmJhZ2UtY29sbGVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9jb250ZW50L2Ns
aWNrMi53YXY6IEFkZGVkLgorCiAyMDExLTEwLTA1ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmls
b3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVudCBDb21w
aWxlclNvdXJjZU1hcHBpbmdQcm92aWRlci4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QveHBhdGgv
eHBhdGgtcmVzdWx0LWV2ZW50bGlzdGVuZXItY3Jhc2guaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3hwYXRoL3hwYXRoLXJlc3VsdC1ldmVudGxpc3RlbmVyLWNyYXNoLmh0bWwJ
KHJldmlzaW9uIDk3MTUyKQorKysgTGF5b3V0VGVzdHMvZmFzdC94cGF0aC94cGF0aC1yZXN1bHQt
ZXZlbnRsaXN0ZW5lci1jcmFzaC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
IGZ1bmN0aW9uIGFsbG9jYXRlKCkgewogCiAgICAgLy8gRmlsbCB0aGUgaGVhcCB3aXRoIGV2ZW50
IGxpc3RlbmVycy4uLgogICAgIHZhciBhID0gW10KLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUw
MDA7ICsraSkKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDIwMDA7ICsraSkKICAgICAgICAgYVth
Lmxlbmd0aF0gPSBmdW5jdGlvbigpIHsgfTsKIAogICAgIC8vIC4uLmZvbGxvd2VkIGJ5IGEgRE9N
IG5vZGUgd3JhcHBlcgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xs
ZWN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1n
YXJiYWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
bWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMSBAQAorVGVzdHMgdGhhdCB3ZSBkb24ndCBnYXJiYWdlIGNvbGxlY3QgcGxheWlu
ZyBhdWRpbyBvYmplY3Qgb3IgZXZlbnQgbGlzdGVuZXIuCisKK0FjY29yZGluZyB0byBodHRwOi8v
d3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUt
dmlkZW8tZWxlbWVudC5odG1sLAorIjQuOC4xMC44IFBsYXlpbmcgdGhlIG1lZGlhIHJlc291cmNl
IiwKKyJNZWRpYSBlbGVtZW50cyBtdXN0IG5vdCBzdG9wIHBsYXlpbmcganVzdCBiZWNhdXNlIGFs
bCByZWZlcmVuY2VzIHRvIHRoZW0gaGF2ZSBiZWVuIHJlbW92ZWQ7IG9ubHkgb25jZSBhIG1lZGlh
IGVsZW1lbnQgaXMgaW4gYSBzdGF0ZSB3aGVyZSBubyBmdXJ0aGVyIGF1ZGlvIGNvdWxkIGV2ZXIg
YmUgcGxheWVkIGJ5IHRoYXQgZWxlbWVudCBtYXkgdGhlIGVsZW1lbnQgYmUgZ2FyYmFnZSBjb2xs
ZWN0ZWQuIgorCisoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
Njg3OCBhbmQgaHR0cDovL2NyYnVnLmNvbS82MjYwNCBmb3IgbW9yZSBkZXRhaWxzKS4KKworUEFT
UworCisKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xs
ZWN0Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKzwhRE9DVFlQRSBIVE1MPgor
Cis8aHRtbD4KKzxib2R5PgorCis8cD5UZXN0cyB0aGF0IHdlIGRvbid0IGdhcmJhZ2UgY29sbGVj
dCBwbGF5aW5nIGF1ZGlvIG9iamVjdCBvciBldmVudCBsaXN0ZW5lci48L3A+Cis8cD5BY2NvcmRp
bmcgdG8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9t
dWx0aXBhZ2UvdGhlLXZpZGVvLWVsZW1lbnQuaHRtbCw8YnIgLz4KKyI0LjguMTAuOCBQbGF5aW5n
IHRoZSBtZWRpYSByZXNvdXJjZSIsPGJyIC8+CisiTWVkaWEgZWxlbWVudHMgbXVzdCBub3Qgc3Rv
cCBwbGF5aW5nIGp1c3QgYmVjYXVzZSBhbGwgcmVmZXJlbmNlcyB0byB0aGVtIGhhdmUKK2JlZW4g
cmVtb3ZlZDsgb25seSBvbmNlIGEgbWVkaWEgZWxlbWVudCBpcyBpbiBhIHN0YXRlIHdoZXJlIG5v
IGZ1cnRoZXIgYXVkaW8KK2NvdWxkIGV2ZXIgYmUgcGxheWVkIGJ5IHRoYXQgZWxlbWVudCBtYXkg
dGhlIGVsZW1lbnQgYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuIjxiciAvPjxiciAvPgorKHNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzggYW5kIGh0dHA6Ly9jcmJ1
Zy5jb20vNjI2MDQgZm9yIG1vcmUgZGV0YWlscykuPC9wPgorPHAgaWQ9InJlc3VsdCI+CisgICAg
RkFJTDogVGVzdCBlaXRoZXIgc3RpbGwgcnVubmluZyBvciBzdG9wcGVkIHByZW1hdHVyZWx5Lgor
PC9wPgorCis8c2NyaXB0IHNyYz1tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
dmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
KwordmFyIG51bV9wbGF5ZXJzID0gNDsKK3ZhciBwbGF5X3RpbWVzID0gNTsKKwordmFyIGE7Cit2
YXIgbnVtX3BsYXllZDsKK3ZhciB0b3RhbF9wbGF5ZWQgPSAwOworCitmdW5jdGlvbiBmb3JjZUdD
KCkgeworICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICByZXR1cm4gR0NDb250cm9sbGVy
LmNvbGxlY3QoKTsKKworICAvLyBGb3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgZm9yICh2YXIg
bmR4ID0gMDsgbmR4IDwgOTkwMDA7IG5keCArKykKKyAgICB2YXIgc3RyID0gbmV3IFN0cmluZygi
MTIzNCIpOworfQorCitmdW5jdGlvbiBmaW5pc2goKSB7CisgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJyZXN1bHQiKS5pbm5lclRleHQgPSAiUEFTUyI7CisgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cisg
IH0KK30KKworZnVuY3Rpb24gc3RhcnQoKSB7CisgIG51bV9wbGF5ZWQgPSAwOworICB2YXIgYXVk
aW9GaWxlID0gZmluZE1lZGlhRmlsZSgiYXVkaW8iLCAiY29udGVudC9jbGljazIiKTsKKyAgYSA9
IG5ldyBBdWRpbyhhdWRpb0ZpbGUpOworICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZGVkJywgZnVu
Y3Rpb24oKSB7CisgICAgbnVtX3BsYXllZCArKzsKKyAgICBpZiAobnVtX3BsYXllZCA8IHBsYXlf
dGltZXMpIHsKKyAgICAgIGEuY3VycmVudFRpbWUgPSAwOworICAgICAgYS5wbGF5KCk7CisgICAg
ICBpZiAobnVtX3BsYXllZCA9PSBwbGF5X3RpbWVzIC0gMSkgeworICAgICAgICBhID0gbnVsbDsK
KyAgICAgICAgZm9yY2VHQygpOworICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICB0b3RhbF9w
bGF5ZWQgKys7CisgICAgICBpZiAodG90YWxfcGxheWVkIDwgbnVtX3BsYXllcnMpCisgICAgICAg
IHN0YXJ0KCk7CisgICAgICBlbHNlCisgICAgICAgIGZpbmlzaCgpOworICAgIH0KKyAgfSk7Cisg
IGEuYWRkRXZlbnRMaXN0ZW5lcignY2FucGxheXRocm91Z2gnLCBmdW5jdGlvbigpIHsKKyAgICBh
LnBsYXkoKTsKKyAgfSk7Cit9CisKK3N0YXJ0KCk7CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8
L2h0bWw+IApJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvY29udGVudC9jbGljazIud2F2Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjpt
aW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246
IExheW91dFRlc3RzL21lZGlhL2NvbnRlbnQvY2xpY2syLndhdgpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKVWtsR1JuUUdBQUJY
UVZaRlptMTBJQkFBQUFBQkFBRUFFU3NBQUJFckFBQUJBQWdBWkdGMFlVOEdBQUNCZ0lGL2duMkNm
NEIrZ241KwpmWUovZ0lGL2dIK0JmWDZBZlh0NWZYeDdlM3g5ZkgxK2Y0Q0Fmbng5ZjN0OWdJQjll
bjJEZm41OGZZS0RnSUo5aG5oN2hJWjhnWVI2CmZIeUNlNEdDaW9GK2dIOTNmb1dDZ29KNWdIeDVn
bmlBZVlKMGRuZUNnWE4xam4xK2ZJMXpmSHA4ZFlpQ2UzcUloSHBtZlhxTWVaSjAKQUNiL0FBRC8v
d0FBUS84QTNwWUFOdi9xWWVrNU9HcDN0SUNlZXhqWVVrV2dZTXp6QUIvL2hEeVZjWDJZaTVwcFhM
TnNYWUtFWjNsNwphSEdUbjFwbmxabHdWcHVVZ3FPS2dJT01ZSXBzb1hWeWRKS2RjMjk2a1psM2gz
T0Fjb1Y2YW82QmUyOThpcENGaElGeGszeUllWE51Cmg0ZUhpWWgvYzNoMWVKQ1VlbkNDZkg5eWVa
U0tjSFI3ZUg5dWdZbCtlSW1GZld4dWhYMXVpSXgrZ1labWczNTVoSGx6Z1hsMWRJZVcKZEdtY2lY
cHRlWVdNYzNHT2ZudHllNUtoaDErYmVvYUZnbUo1azRLVWUzQ1hpbTJHZEphRllYbWVjMUdvbUc5
N2I0bVpjbkNJYlg2RQpiWDZMYldkMWU0QjBkNHg2Y1h1S2NvS01kb0I1ZVp0OWRvaDBlMzJBZzVD
U2duT0VrSVdCZ1g2QWVZcVJlbko5aG9LRGhJUjZnSUJ0CmU0MkRlSHVGaG0xOGczNXdlNHg5ZG5t
QmdIcCtibmlCZklGMmVZQjNmWVYzZFgrRmRJT0NmM1o3Zm9GOGU0bUFmSHVDZG4rTGMzV0sKaFh5
RWhudDdnb0Y0Zm9TRGhIMTdmNHVGZm5wL2lvOTBjNE9CZkh1Q2c0SnloSXh5Y0gySmdudURpSGw4
aEg5OGRJT0RkSUtCZUlaOApmSGVDaVh4K2YzU0lmM1Y3ZVlTQ2RIdUNnbmg2aElGemlvVjNnWXVB
ZVhsOWU0VjdlMytKZ25WNmdJSjdoSWlDZTN5SWlueDloWUdBCmhYMTdoNE9CZklDRmZJaUZmSGg5
aG45M2ducDJoWVI2Zm9GNGRuOS9kWDEvZVg5L2RITitnb0IzZW9GOGZIdDZmMzE2ZklGNmdJRjgK
ZUgyQ2dudC9nb1Y2aUh4M2lJUjZmNENEZzN1R2czeUFpSU45ZzRCL2duK0NnWDU5aG45NmZuK0Zm
WDU5ZjRTQ2dJUjdmb0o3ZllHQQpmb0Y2ZjRGNWZIeURmWG1GZm50NWhJQjVmbjEvZlgxK2dIbDlm
b044ZllHQ2ZvQ0dlbjZBZ29CL2dIOS9nM3A4ZllXR2ZYcURoSDE3CmdJT0NmbitDZW9DRGczcDZm
SUdGZlhwL2dZUjlkWU4vZ1g1N2UzNTlmb0o5Zm9HQWYzNTdnSUNBZklKN2ZuMTZob1Y2Zlh5QWdY
K0IKZm41K2dubDVnWVNCZkgxOWU0aDdmSVNFZUlCK2dIK0VkMytDZjNwNmhYMkFmM3FBZlg1L2Zu
OThmNEdCZ0h0M2dZWi9mWDk5Z0h4OApnSDk3aG9SM2dYNS9nM2wrZzMxL2czMTVmNE44ZlgrQWdY
NkFmMzUrZ0g2QWdYOTdmb0NDZlg5OWduMStnWUY3Z0lSOWVuK0RnSDU5CmYzMTlnWUI4Zm4xL2Yz
MkJlM3VDZ1h4K2ZZUi9mSDJDZjMxK2ZvS0VmSHlCZzMxL2ZuNS9nb0o3Z0lhQWZYOS9nbitCZ241
Nmc0Si8KZ29GL2ZvQi9nSUIvZm4rQmYzdUFnbjk2ZjM5OGdJQi9mbnlBZ0h4OWZuNStmM3ArZ254
OWYzeC9mMzk4ZjM5OWdIOS9mbjZEZjN5QgpmMzkvZ0lCOWY0Ri9nWUYrZjRDQ2ZvRi9mNEtDZ0lD
QWY0S0FnNEIrZjRLQ2ZYNTlnb045ZllCL2dJQjZnSDk5ZklDQWZYMS9nbng3CmZZQi9nWHg5Zm41
L2ZuOTlmWDUrZlg1K2ZuNS9mMzkvZ1g1L2dueCtnSUYvZm9DQ2ZuMkFmNEorZm9HQmdYOS9mNEND
ZklHQWdZRi8KZjM2QWdZQitnSUdBZ0gyQWdYOTlnSDkvZ0gyQWYzK0FmWHg5Z0h4K2ZIeUFmWDUr
ZkgyQWdudDdmMzUvZlg5L2YzOS9mWHArZ0g1Kwpnb0I5ZjM5L2duNTlnWCtBZjMxL2dJQi9mMzkv
Z0g2QWdJQ0Jmb0NFZjRCK2Y0S0JmNEIvZ1lHRGZuK0FmNEIvZm41OWZvRitmb0tCCmZuOStmSHlB
Zm41K2ZuK0JlWCtGZzNON2hYNThnSCtBZm42RmRIdUlnbmgrZzRCNmU0aUdlSHFGaFhoN2czK0Fm
MzZBZzRTQWVYK0UKZW4xK2c0VjdlbjZFZjMrQWdYOS9mNEIrZkh4K2ZvSi9mSDZDaEh4OWZvR0Jn
M3Q1Zm9KL2YzeCtmWUYrZjMxK2dJQ0JnWDUvZjRGKwpmbjUvZlg1OWZuOStnSU9BZjMrQWY0Qjlm
bjkrZ1g5K2dYK0Jmb0dCZ0lCL2YzMS9nbitDZklCL2ZZRitmMzZCZjM1L2ZvQi9mMzk4CmdYK0Fm
MzEvZjRDQmYzNThnSUtBZm45K2duMkFmMzUrZ245OWYzNkJmMzErZjMrQWYzOTlmNENCZm9DQWZY
K0JmWCtBZ0g2QWdIOSsKZ0laOWZZSi9pSUIzZkl0L2RJU0JnSHgvZjRPRmYzMkFnWDUzZklPQ2U0
S0JmbjJCZW41N2YzdDRmNE45Z0g2QmdZS0FnSGwvZ24xLwpmNE4vZjM2RGdvQ0Jmb0orZVgxN2dI
MThlNEYvZllCK2hYNkRnNE9CZ0lCOGZIdCtmMzkrZlg5L2ZvS0JnSUdFZjMxL2dYNkFnb0dECmZv
Q0VmMzJCQUE9PQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110585</attachid>
            <date>2011-10-11 15:07:03 -0700</date>
            <delta_ts>2011-10-13 08:15:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111011150701.patch</filename>
            <type>text/plain</type>
            <size>15353</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXggY29uc2lzdHMgb2YgMiBwYXJ0czoKKyAgICAgICAg
KGEpIG1ha2UgSFRNTEF1ZGlvRWxlbWVudCBhbiAnYWN0aXZlJyBvbmUsIG1lYW5pbmcgdGhhdCBp
dCBjYW5ub3QgYmUKKyAgICAgICAgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgaXQgaGFzIHBhbmRpbmcg
YWN0aXZpdHkKKyAgICAgICAgKGIpIGZpeCB2OCBiaW5kaW5ncyBidWcgdGhhdCB3YXMgaW4gdGhl
IGNvZGUgZm9yZXZlciwgZXZlbnQgbGlzdGVuZXIKKyAgICAgICAgY291bGQgYmUgZ2FyYmFnZSBj
b2xsZWN0ZWQgZXZlbiBpZiBvYmplY3QgaXQgYXR0YWNoZWQgdG8gaXMgc3RpbGwKKyAgICAgICAg
YWxpdmUsIHJlc3VsdGluZyBpbiB0aGUgbG9zcyBvZiBldmVudHMuCisKKyAgICAgICAgU3VibWl0
dGluZyBib3RoIGZpeGVzIHRvZ2V0aGVyIGJlY2F1c2Ugd2l0aG91dCAybmQgZml4IEkgY291bGQg
bm90CisgICAgICAgIHByb2dyYW1tYXRpY2FsbHkgdGVzdCAxc3QgZml4IC0tIHRlc3QgaGFzIHRv
IGRlcGVuZCBvbiB0aGUgZXZlbnRzLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL2F1ZGlvLWdhcmJh
Z2UtY29sbGVjdC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKToKKyAgICAg
ICAgKElzQWN0aXZlRG9tVHlwZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnY4SFRNTEF1
ZGlvRWxlbWVudENvbnN0cnVjdG9yQ2FsbGJhY2spOgorICAgICAgICAqIGh0bWwvSFRNTEF1ZGlv
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlvRWxlbWVudDo6aGFzUGVuZGlu
Z0FjdGl2aXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKwogMjAxMS0x
MC0xMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogbWFrZSBFeHRlbnNpb25zIGNvbXBvbmVudCBjb21waWxlLgpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0J
KHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG0JKHdvcmtpbmcgY29weSkKQEAgLTExNDksMTAgKzExNDksMTMgQEAgc3Vi
IEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrCiB7CiAgICAgbXkgJGltcGxDbGFzc05hbWUg
PSBzaGlmdDsKICAgICBteSAkcmVxdWlyZXNIaWRkZW5EZXBlbmRlbmN5ID0gc2hpZnQ7CisgICAg
bXkgJHJlcXVpcmVzSGlkZGVuVmFsdWUgPSBzaGlmdDsKICAgICBteSAkZnVuY3Rpb25OYW1lID0g
c2hpZnQ7CiAgICAgbXkgJGxvb2t1cFR5cGUgPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikgPyAi
T3JDcmVhdGUiIDogIk9ubHkiOwogICAgIG15ICRwYXNzUmVmUHRySGFuZGxpbmcgPSAoJGZ1bmN0
aW9uTmFtZSBlcSAiYWRkIikgPyAiIiA6ICIuZ2V0KCkiOwogICAgIG15ICRoaWRkZW5EZXBlbmRl
bmN5QWN0aW9uID0gKCRmdW5jdGlvbk5hbWUgZXEgImFkZCIpID8gImNyZWF0ZSIgOiAicmVtb3Zl
IjsKKyAgICBteSAkaGlkZGVuVmFsdWVBY3Rpb24gPSAoJGZ1bmN0aW9uTmFtZSBlcSAiYWRkIikg
PyAiU2V0IiA6ICJEZWxldGUiOworICAgIG15ICRoaWRkZW5WYWx1ZUV4dHJhQXJncyA9ICgkZnVu
Y3Rpb25OYW1lIGVxICJhZGQiKSA/ICIsIGFyZ3NbMV0iIDogIiI7CiAgCiAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgPDxFTkQpOwogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiAke2Z1
bmN0aW9uTmFtZX1FdmVudExpc3RlbmVyQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKQEAgLTExNjcsNiArMTE3MCwxOSBAQCBFTkQKICAgICAgICAgJHtoaWRkZW5EZXBlbmRlbmN5
QWN0aW9ufUhpZGRlbkRlcGVuZGVuY3koYXJncy5Ib2xkZXIoKSwgYXJnc1sxXSwgVjgke2ltcGxD
bGFzc05hbWV9OjpldmVudExpc3RlbmVyQ2FjaGVJbmRleCk7CiBFTkQKICAgICB9CisgICAgZWxz
aWYgKCRyZXF1aXJlc0hpZGRlblZhbHVlKSB7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsIDw8RU5EKTsKKyAgICAgICAgLy8gQXR0YWNoIGxpc3RlbmVyIHRvIHRoZSBvYmplY3Qgc28g
bGlzdGVuZXIgY2Fubm90IGJlIGNvbGxlY3RlZCB3aGlsZQorICAgICAgICAvLyBvYmplY3QgaXMg
c3RpbGwgYWxpdmUuIERvbid0IHdhbnQgdG8gYWRkIGV4dHJhIHNsb3QgdG8gdGhlIE5vZGUgdHlw
ZSwKKyAgICAgICAgLy8gYXMgaXQgd2lsbCBncm93IGVhY2ggYW5kIGV2ZXJ5IG5vZGUsIHdoaWxl
IGFic29sdXRlIG1ham9yaXR5IG9mIG5vZGVzCisgICAgICAgIC8vIHdvdWxkIG5ldmVyIGhhdmUg
bGlzdGVuZXJzIGF0dGFjaGVkLiBJbnN0ZWFkIHVzZSBWOCBoaWRkZW4gdmFsdWUKKyAgICAgICAg
Ly8gbWVjaGFuaXNtIC0tIGFkZC9yZW1vdmUga2V5ICJsaXN0ZW5lci88bGlzdGVuZXIgYWRkcmVz
cz4vPGV2ZW50IG5hbWU+IgorICAgICAgICAvLyB3aXRoIGxpc3RlbmVyIGFzIHZhbHVlLgorICAg
ICAgICBjaGFyIHByZWZpeFs2NF07CisgICAgICAgIHNwcmludGYocHJlZml4LCBcImxpc3RlbmVy
LyVwL1wiLCBsaXN0ZW5lci5nZXQoKSk7CisgICAgICAgIGFyZ3MuSG9sZGVyKCktPiR7aGlkZGVu
VmFsdWVBY3Rpb259SGlkZGVuVmFsdWUodjg6OlN0cmluZzo6Q29uY2F0KHY4OjpTdHJpbmc6Ok5l
dyhwcmVmaXgpLCBhcmdzWzBdLT5Ub1N0cmluZygpKSR7aGlkZGVuVmFsdWVFeHRyYUFyZ3N9KTsK
K0VORAorICAgIH0KICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7CiAgICAgfQog
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC0xMjczLDEwICsxMjg5LDEwIEBAIHN1YiBH
ZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2sKICAgICAjIGJ1dCB0aGV5IGFyZSBleHRyZW1lbHkgY29u
c2lzdGVudCBhY3Jvc3MgdGhlIHZhcmlvdXMgY2xhc3NlcyB0aGF0IHRha2UgZXZlbnQgbGlzdGVu
ZXJzLAogICAgICMgc28gd2UgY2FuIGdlbmVyYXRlIHRoZW0gYXMgYSAic3BlY2lhbCBjYXNlIi4K
ICAgICBpZiAoJG5hbWUgZXEgImFkZEV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIEdlbmVyYXRl
RXZlbnRMaXN0ZW5lckNhbGxiYWNrKCRpbXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0
YU5vZGUpLCAiYWRkIik7CisgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKCRp
bXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpLCAkZGF0YU5vZGUtPmV4dGVu
ZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9LCAiYWRkIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9IGVsc2lmICgkbmFtZSBlcSAicmVtb3ZlRXZlbnRMaXN0ZW5lciIpIHsKLSAgICAgICAg
R2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJU
eXBlKCRkYXRhTm9kZSksICJyZW1vdmUiKTsKKyAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVy
Q2FsbGJhY2soJGltcGxDbGFzc05hbWUsICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSksICRkYXRh
Tm9kZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57IkV2ZW50VGFyZ2V0In0sICJyZW1vdmUiKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3Ry
dWN0b3IuY3BwCShyZXZpc2lvbiA5NzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUlu
Zm8gVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4SFRNTEF1ZGlvRWxl
bWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgMCwgMCwgMCB9OworV3JhcHBlclR5cGVJbmZv
IFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOEhUTUxBdWRpb0VsZW1l
bnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIFY4SFRNTEF1ZGlvRWxlbWVudDo6ZGVyZWZPYmpl
Y3QsIFY4SFRNTEF1ZGlvRWxlbWVudDo6dG9BY3RpdmVET01PYmplY3QsIDAgfTsKIAogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxi
YWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CkBAIC02OCw3ICs2OCw2IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW8KICAgICAvLyBtYXkgZW5kIHVwIGJl
aW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHBy
ZW1hdHVyZWx5LgogICAgIHRvVjgoZG9jdW1lbnQpOwogCi0KICAgICBTdHJpbmcgc3JjOwogICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMCkKICAgICAgICAgc3JjID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOwpAQCAtNzYsNyArNzUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4
SFRNTEF1ZGlvCiAKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIo
KSwgJlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCBhdWRpby5nZXQoKSk7CiAg
ICAgYXVkaW8tPnJlZigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9k
ZShhdWRpby5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRl
cigpKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qo
YXVkaW8uZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIo
KSkpOwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBA
QCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gY3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxBdWRpb0VsZW1lbnQ+IGNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25z
dCBTdHJpbmcmIHNyYyk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkg
Y29uc3QgeyByZXR1cm4gaXNQbGF5aW5nKCkgfHwgSFRNTE1lZGlhRWxlbWVudDo6aGFzUGVuZGlu
Z0FjdGl2aXR5KCk7IH0KKwogcHJpdmF0ZToKICAgICBIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdWRpb0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEF1ZGlvRWxlbWVudC5pZGwJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXVkaW9FbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
CiBtb2R1bGUgaHRtbCB7CiAgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQWN0aXZlRE9NT2JqZWN0
LAogICAgICAgICBDb25kaXRpb25hbD1WSURFTwogICAgIF0gSFRNTEF1ZGlvRWxlbWVudCA6IEhU
TUxNZWRpYUVsZW1lbnQgewogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgY2xhc3MgV2lkZ2V0
OwogLy8gQnV0IGl0IGNhbid0IGJlIHVudGlsIHRoZSBDaHJvbWl1bSBXZWJNZWRpYVBsYXllckNs
aWVudEltcGwgY2xhc3MgaXMgZml4ZWQgc28gaXQKIC8vIG5vIGxvbmdlciBkZXBlbmRzIG9uIHR5
cGVjYXN0aW5nIGEgTWVkaWFQbGF5ZXJDbGllbnQgdG8gYW4gSFRNTE1lZGlhRWxlbWVudC4KIAot
Y2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIE1lZGlh
UGxheWVyQ2xpZW50LCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciwgcHJpdmF0ZSBBY3Rp
dmVET01PYmplY3QgeworY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAgTWVkaWFQbGF5ZXIqIHBs
YXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyLmdldCgpOyB9CiAgICAgCkBAIC0yMDUsNiAr
MjA1LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1BsYXlpbmcoKSBjb25zdCB7IHJldHVybiBt
X3BsYXlpbmc7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dDsKKwogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlKiBhdWRpb1NvdXJjZU5vZGUoKSB7IHJldHVybiBtX2F1ZGlvU291cmNlTm9kZTsgfQogICAg
IHZvaWQgc2V0QXVkaW9Tb3VyY2VOb2RlKE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSopOwpA
QCAtMjY4LDcgKzI3MCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoUmVh
c29uRm9yU3VzcGVuc2lvbik7CiAgICAgdmlydHVhbCB2b2lkIHJlc3VtZSgpOwogICAgIHZpcnR1
YWwgdm9pZCBzdG9wKCk7Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVZvbHVtZURpZENoYW5nZSgpOwogCklu
ZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCShyZXZpc2lvbiA5NzE1MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTA5LTI3ICBFdWdlbmUgTmFsaW1vdiAgPGVu
YWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBsYXlpbmcgSFRNTEF1ZGlvRWxlbWVudCBjYW4g
YmUgZ2FyYmFnZSBjb2xsZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY2ODc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0IHRoYXQgcGxheXMgc2hvcnQgYXVkaW8g
KH4xIHNlY29uZCkgc2V2ZXJhbCB0aW1lcworICAgICAgICBpbiBhIHJvdyBhbmQgY2F1c2VzIGdh
cmJhZ2UgY29sbGVjdG9yIGluIHBhcmFsbGVsLiBUZXN0IHNob3VsZCBwbGF5CisgICAgICAgIGF1
ZGlvIHN0cmVhbSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzIGFuZCBzaWduYWwgJ2VuZGVkJyBl
dmVudC4KKworICAgICAgICAqIG1lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBtZWRpYS9jb250ZW50L2NsaWNrMi53YXY6IEFkZGVkLgorCisgICAg
ICAgIERlY3JlYXNlZCBudW1iZXIgb2YgaXRlcmF0aW9ucyBpbiBmYXN0L3hwYXRoL3hwYXRoLXJl
c3VsdC1ldmVudGxpc3RlbmVyLWNyYXNoLmh0bWwKKyAgICAgICAgdG8gYXZvaWQgdGVzdCB0aW1l
b3V0IG9uIChzbG93KSBNYWNzIHdoZW4gcnVubmluZyBkZWJ1ZyBDaHJvbWUgYnVpbGRzLCBhcwor
ICAgICAgICBXZWJDb3JlOjpOb2RlSW50ZXJuYWw6OmFkZEV2ZW50TGlzdGVuZXJDYWxsYmFjaygp
IGJlY2FtZSBzb21ld2hhdCBzbG93ZXIuCisKIDIwMTEtMTAtMDUgIFBhdmVsIFBvZGl2aWxvdiAg
PHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogaW1wbGVt
ZW50IENvbXBpbGVyU291cmNlTWFwcGluZ1Byb3ZpZGVyLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC94cGF0aC94cGF0aC1yZXN1bHQtZXZlbnRsaXN0ZW5lci1jcmFzaC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QveHBhdGgveHBhdGgtcmVzdWx0LWV2ZW50bGlzdGVuZXItY3Jh
c2guaHRtbAkocmV2aXNpb24gOTcxNTIpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3hwYXRoL3hwYXRo
LXJlc3VsdC1ldmVudGxpc3RlbmVyLWNyYXNoLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDcgQEAgZnVuY3Rpb24gYWxsb2NhdGUoKSB7CiAKICAgICAvLyBGaWxsIHRoZSBoZWFwIHdp
dGggZXZlbnQgbGlzdGVuZXJzLi4uCiAgICAgdmFyIGEgPSBbXQotICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgNTAwMDsgKytpKQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjAwMDsgKytpKQogICAg
ICAgICBhW2EubGVuZ3RoXSA9IGZ1bmN0aW9uKCkgeyB9OwogCiAgICAgLy8gLi4uZm9sbG93ZWQg
YnkgYSBET00gbm9kZSB3cmFwcGVyCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJi
YWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlh
L2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3QtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExIEBACitUZXN0cyB0aGF0IHdlIGRvbid0IGdhcmJhZ2UgY29sbGVj
dCBwbGF5aW5nIGF1ZGlvIG9iamVjdCBvciBldmVudCBsaXN0ZW5lci4KKworQWNjb3JkaW5nIHRv
IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlw
YWdlL3RoZS12aWRlby1lbGVtZW50Lmh0bWwsCisiNC44LjEwLjggUGxheWluZyB0aGUgbWVkaWEg
cmVzb3VyY2UiLAorIk1lZGlhIGVsZW1lbnRzIG11c3Qgbm90IHN0b3AgcGxheWluZyBqdXN0IGJl
Y2F1c2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBoYXZlIGJlZW4gcmVtb3ZlZDsgb25seSBvbmNl
IGEgbWVkaWEgZWxlbWVudCBpcyBpbiBhIHN0YXRlIHdoZXJlIG5vIGZ1cnRoZXIgYXVkaW8gY291
bGQgZXZlciBiZSBwbGF5ZWQgYnkgdGhhdCBlbGVtZW50IG1heSB0aGUgZWxlbWVudCBiZSBnYXJi
YWdlIGNvbGxlY3RlZC4iCisKKyhzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY2ODc4IGFuZCBodHRwOi8vY3JidWcuY29tLzYyNjA0IGZvciBtb3JlIGRldGFpbHMp
LgorCitQQVNTCisKKwpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1jb2xs
ZWN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvYXVkaW8tZ2FyYmFnZS1j
b2xsZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJi
YWdlLWNvbGxlY3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBF
IEhUTUw+CisKKzxodG1sPgorPGJvZHk+CisKKzxwPlRlc3RzIHRoYXQgd2UgZG9uJ3QgZ2FyYmFn
ZSBjb2xsZWN0IHBsYXlpbmcgYXVkaW8gb2JqZWN0IG9yIGV2ZW50IGxpc3RlbmVyLjwvcD4KKzxw
PkFjY29yZGluZyB0byBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVu
dC13b3JrL211bHRpcGFnZS90aGUtdmlkZW8tZWxlbWVudC5odG1sLDxiciAvPgorIjQuOC4xMC44
IFBsYXlpbmcgdGhlIG1lZGlhIHJlc291cmNlIiw8YnIgLz4KKyJNZWRpYSBlbGVtZW50cyBtdXN0
IG5vdCBzdG9wIHBsYXlpbmcganVzdCBiZWNhdXNlIGFsbCByZWZlcmVuY2VzIHRvIHRoZW0gaGF2
ZQorYmVlbiByZW1vdmVkOyBvbmx5IG9uY2UgYSBtZWRpYSBlbGVtZW50IGlzIGluIGEgc3RhdGUg
d2hlcmUgbm8gZnVydGhlciBhdWRpbworY291bGQgZXZlciBiZSBwbGF5ZWQgYnkgdGhhdCBlbGVt
ZW50IG1heSB0aGUgZWxlbWVudCBiZSBnYXJiYWdlIGNvbGxlY3RlZC4iPGJyIC8+PGJyIC8+Ciso
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02Njg3OCBhbmQgaHR0
cDovL2NyYnVnLmNvbS82MjYwNCBmb3IgbW9yZSBkZXRhaWxzKS48L3A+Cis8cCBpZD0icmVzdWx0
Ij4KKyAgICBGQUlMOiBUZXN0IGVpdGhlciBzdGlsbCBydW5uaW5nIG9yIHN0b3BwZWQgcHJlbWF0
dXJlbHkuCis8L3A+CisKKzxzY3JpcHQgc3JjPW1lZGlhLWZpbGUuanM+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz12aWRlby10ZXN0LmpzPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorCit2YXIgbnVtX3BsYXllcnMgPSA0OwordmFyIHBsYXlfdGltZXMgPSA1OworCit2
YXIgYTsKK3ZhciBudW1fcGxheWVkOwordmFyIHRvdGFsX3BsYXllZCA9IDA7CisKK2Z1bmN0aW9u
IGZvcmNlR0MoKSB7CisgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgIHJldHVybiBHQ0Nv
bnRyb2xsZXIuY29sbGVjdCgpOworCisgIC8vIEZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbgorICBm
b3IgKHZhciBuZHggPSAwOyBuZHggPCA5OTAwMDsgbmR4ICsrKQorICAgIHZhciBzdHIgPSBuZXcg
U3RyaW5nKCIxMjM0Iik7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaCgpIHsKKyAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInJlc3VsdCIpLmlubmVyVGV4dCA9ICJQQVNTIjsKKyAgaWYgKHdpbmRvdy5s
YXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgfQorfQorCitmdW5jdGlvbiBzdGFydCgpIHsKKyAgbnVtX3BsYXllZCA9IDA7Cisg
IHZhciBhdWRpb0ZpbGUgPSBmaW5kTWVkaWFGaWxlKCJhdWRpbyIsICJjb250ZW50L2NsaWNrMiIp
OworICBhID0gbmV3IEF1ZGlvKGF1ZGlvRmlsZSk7CisgIGEuYWRkRXZlbnRMaXN0ZW5lcignZW5k
ZWQnLCBmdW5jdGlvbigpIHsKKyAgICBudW1fcGxheWVkICsrOworICAgIGlmIChudW1fcGxheWVk
IDwgcGxheV90aW1lcykgeworICAgICAgYS5jdXJyZW50VGltZSA9IDA7CisgICAgICBhLnBsYXko
KTsKKyAgICAgIGlmIChudW1fcGxheWVkID09IHBsYXlfdGltZXMgLSAxKSB7CisgICAgICAgIGEg
PSBudWxsOworICAgICAgICBmb3JjZUdDKCk7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
IHRvdGFsX3BsYXllZCArKzsKKyAgICAgIGlmICh0b3RhbF9wbGF5ZWQgPCBudW1fcGxheWVycykK
KyAgICAgICAgc3RhcnQoKTsKKyAgICAgIGVsc2UKKyAgICAgICAgZmluaXNoKCk7CisgICAgfQor
ICB9KTsKKyAgYS5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5dGhyb3VnaCcsIGZ1bmN0aW9uKCkg
eworICAgIGEucGxheSgpOworICB9KTsKK30KKworc3RhcnQoKTsKKworPC9zY3JpcHQ+CisKKzwv
Ym9keT4KKzwvaHRtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9jb250ZW50L2NsaWNrMi53
YXYKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlw
ZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogTGF5b3V0VGVzdHMvbWVkaWEvY29udGVudC9jbGljazIud2F2Cl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgpVa2xH
Um5RR0FBQlhRVlpGWm0xMElCQUFBQUFCQUFFQUVTc0FBQkVyQUFBQkFBZ0FaR0YwWVU4R0FBQ0Jn
SUYvZ24yQ2Y0QitnbjUrCmZZSi9nSUYvZ0grQmZYNkFmWHQ1Zlh4N2UzeDlmSDErZjRDQWZueDlm
M3Q5Z0lCOWVuMkRmbjU4ZllLRGdJSjlobmg3aElaOGdZUjYKZkh5Q2U0R0Npb0YrZ0g5M2ZvV0Nn
b0o1Z0h4NWduaUFlWUowZG5lQ2dYTjFqbjErZkkxemZIcDhkWWlDZTNxSWhIcG1mWHFNZVpKMApB
Q2IvQUFELy93QUFRLzhBM3BZQU52L3FZZWs1T0dwM3RJQ2VleGpZVWtXZ1lNenpBQi8vaER5VmNY
MllpNXBwWExOc1hZS0VaM2w3CmFIR1RuMXBubFpsd1ZwdVVncU9LZ0lPTVlJcHNvWFZ5ZEpLZGMy
OTZrWmwzaDNPQWNvVjZhbzZCZTI5OGlwQ0ZoSUZ4azN5SWVYTnUKaDRlSGlZaC9jM2gxZUpDVWVu
Q0NmSDl5ZVpTS2NIUjdlSDl1Z1lsK2VJbUZmV3h1aFgxdWlJeCtnWVptZzM1NWhIbHpnWGwxZEll
VwpkR21jaVhwdGVZV01jM0dPZm50eWU1S2hoMStiZW9hRmdtSjVrNEtVZTNDWGltMkdkSmFGWVht
ZWMxR29tRzk3YjRtWmNuQ0liWDZFCmJYNkxiV2QxZTRCMGQ0eDZjWHVLY29LTWRvQjVlWnQ5ZG9o
MGUzMkFnNUNTZ25PRWtJV0JnWDZBZVlxUmVuSjlob0tEaElSNmdJQnQKZTQyRGVIdUZobTE4ZzM1
d2U0eDlkbm1CZ0hwK2JuaUJmSUYyZVlCM2ZZVjNkWCtGZElPQ2YzWjdmb0Y4ZTRtQWZIdUNkbitM
YzNXSwpoWHlFaG50N2dvRjRmb1NEaEgxN2Y0dUZmbnAvaW85MGM0T0JmSHVDZzRKeWhJeHljSDJK
Z251RGlIbDhoSDk4ZElPRGRJS0JlSVo4CmZIZUNpWHgrZjNTSWYzVjdlWVNDZEh1Q2duaDZoSUZ6
aW9WM2dZdUFlWGw5ZTRWN2UzK0pnblY2Z0lKN2hJaUNlM3lJaW54OWhZR0EKaFgxN2g0T0JmSUNG
ZklpRmZIaDlobjkzZ25wMmhZUjZmb0Y0ZG45L2RYMS9lWDkvZEhOK2dvQjNlb0Y4Zkh0NmYzMTZm
SUY2Z0lGOAplSDJDZ250L2dvVjZpSHgzaUlSNmY0Q0RnM3VHZzN5QWlJTjlnNEIvZ24rQ2dYNTlo
bjk2Zm4rRmZYNTlmNFNDZ0lSN2ZvSjdmWUdBCmZvRjZmNEY1Zkh5RGZYbUZmbnQ1aElCNWZuMS9m
WDErZ0hsOWZvTjhmWUdDZm9DR2VuNkFnb0IvZ0g5L2czcDhmWVdHZlhxRGhIMTcKZ0lPQ2ZuK0Nl
b0NEZzNwNmZJR0ZmWHAvZ1lSOWRZTi9nWDU3ZTM1OWZvSjlmb0dBZjM1N2dJQ0FmSUo3Zm4xNmhv
VjZmWHlBZ1grQgpmbjUrZ25sNWdZU0JmSDE5ZTRoN2ZJU0VlSUIrZ0grRWQzK0NmM3A2aFgyQWYz
cUFmWDUvZm45OGY0R0JnSHQzZ1laL2ZYOTlnSHg4CmdIOTdob1IzZ1g1L2czbCtnMzEvZzMxNWY0
TjhmWCtBZ1g2QWYzNStnSDZBZ1g5N2ZvQ0NmWDk5Z24xK2dZRjdnSVI5ZW4rRGdINTkKZjMxOWdZ
QjhmbjEvZjMyQmUzdUNnWHgrZllSL2ZIMkNmMzErZm9LRWZIeUJnMzEvZm41L2dvSjdnSWFBZlg5
L2duK0JnbjU2ZzRKLwpnb0YvZm9CL2dJQi9mbitCZjN1QWduOTZmMzk4Z0lCL2ZueUFnSHg5Zm41
K2YzcCtnbng5ZjN4L2YzOThmMzk5Z0g5L2ZuNkRmM3lCCmYzOS9nSUI5ZjRGL2dZRitmNENDZm9G
L2Y0S0NnSUNBZjRLQWc0QitmNEtDZlg1OWdvTjlmWUIvZ0lCNmdIOTlmSUNBZlgxL2dueDcKZllC
L2dYeDlmbjUvZm45OWZYNStmWDUrZm41L2YzOS9nWDUvZ254K2dJRi9mb0NDZm4yQWY0Sitmb0dC
Z1g5L2Y0Q0NmSUdBZ1lGLwpmMzZBZ1lCK2dJR0FnSDJBZ1g5OWdIOS9nSDJBZjMrQWZYeDlnSHgr
Zkh5QWZYNStmSDJBZ250N2YzNS9mWDkvZjM5L2ZYcCtnSDUrCmdvQjlmMzkvZ241OWdYK0FmMzEv
Z0lCL2YzOS9nSDZBZ0lDQmZvQ0VmNEIrZjRLQmY0Qi9nWUdEZm4rQWY0Qi9mbjU5Zm9GK2ZvS0IK
Zm45K2ZIeUFmbjUrZm4rQmVYK0ZnM043aFg1OGdIK0FmbjZGZEh1SWduaCtnNEI2ZTRpR2VIcUZo
WGg3ZzMrQWYzNkFnNFNBZVgrRQplbjErZzRWN2VuNkVmMytBZ1g5L2Y0QitmSHgrZm9KL2ZINkNo
SHg5Zm9HQmczdDVmb0ovZjN4K2ZZRitmMzErZ0lDQmdYNS9mNEYrCmZuNS9mWDU5Zm45K2dJT0Fm
MytBZjRCOWZuOStnWDkrZ1grQmZvR0JnSUIvZjMxL2duK0NmSUIvZllGK2YzNkJmMzUvZm9CL2Yz
OTgKZ1grQWYzMS9mNENCZjM1OGdJS0FmbjkrZ24yQWYzNStnbjk5ZjM2QmYzMStmMytBZjM5OWY0
Q0Jmb0NBZlgrQmZYK0FnSDZBZ0g5KwpnSVo5ZllKL2lJQjNmSXQvZElTQmdIeC9mNE9GZjMyQWdY
NTNmSU9DZTRLQmZuMkJlbjU3ZjN0NGY0TjlnSDZCZ1lLQWdIbC9nbjEvCmY0Ti9mMzZEZ29DQmZv
SitlWDE3Z0gxOGU0Ri9mWUIraFg2RGc0T0JnSUI4Zkh0K2YzOStmWDkvZm9LQmdJR0VmMzEvZ1g2
QWdvR0QKZm9DRWYzMkJBQT09Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110845</attachid>
            <date>2011-10-13 08:15:28 -0700</date>
            <delta_ts>2011-10-19 09:29:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111013081527.patch</filename>
            <type>text/plain</type>
            <size>14551</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBGaXggY29uc2lzdHMgb2YgMiBwYXJ0czoKKyAgICAgICAg
KGEpIG1ha2UgSFRNTEF1ZGlvRWxlbWVudCBhbiAnYWN0aXZlJyBvbmUsIG1lYW5pbmcgdGhhdCBp
dCBjYW5ub3QgYmUKKyAgICAgICAgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgaXQgaGFzIHBhbmRpbmcg
YWN0aXZpdHkKKyAgICAgICAgKGIpIHdvcmthcm91bmQgZm9yIHY4IGJpbmRpbmdzIGJ1ZyB0aGF0
IHdhcyBpbiB0aGUgY29kZSBmb3JldmVyLCBldmVudAorICAgICAgICBsaXN0ZW5lciBjb3VsZCBi
ZSBnYXJiYWdlIGNvbGxlY3RlZCBldmVuIGlmIG9iamVjdCBpdCBhdHRhY2hlZCB0byBpcworICAg
ICAgICBzdGlsbCBhbGl2ZSwgcmVzdWx0aW5nIGluIHRoZSBsb3NzIG9mIGV2ZW50cy4gV29ya2Fy
b3VuZCBpcyB0byBtYWtlCisgICAgICAgIEhUTUxBdWRpb0VsZW1lbnQgdG8gaW1wbGVtZW50IEV2
ZW50VGFyZ2V0IGludGVyZmFjZSwgYW5kIG1vZGlmeSBjb2RlCisgICAgICAgIGdlbmVyYXRvciB0
byBjcmVhdGUgaGlkZGVuIGRlcGVuZGVuY3kgYmV0d2VlbiBvYmplY3QgYW5kIGV2ZW50IGxpc3Rl
bmVyCisgICAgICAgIGV2ZW4gZm9yIHR5cGVzIHRoYXQgaW5oZXJpdCBmcm9tIE5vZGUgKGJ1dCBu
b3QgZm9yIE5vZGUgaXRzZWxmKS4KKworICAgICAgICBIYXZlIHRvIHVyZ2VudGx5IGNoZWNrIGlu
IHdvcmthcm91bmQgYmVjYXVzZQorICAgICAgICAoYSkgd2l0aG91dCAybmQgZml4IEkgY291bGQg
bm90IHByb2dyYW1tYXRpY2FsbHkgdGVzdCAxc3QgZml4IC0tIHRlc3QKKyAgICAgICAgaGFzIHRv
IGRlcGVuZCBvbiB0aGUgZXZlbnRzCisgICAgICAgIChiKSB3ZSB1cmdlbnRseSBuZWVkIHJlbGlh
YmxlIGF1ZGlvIGV2ZW50cywgc28gZGV2ZWxvcGVycyBjYW4gdXNlIEhUTUw1CisgICAgICAgIGF1
ZGlvIHRvIHdyaXRlIEpTL0hUTUw1IGdhbWVzLgorCisgICAgICAgIFRlc3Q6IG1lZGlhL2F1ZGlv
LWdhcmJhZ2UtY29sbGVjdC5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKToK
KyAgICAgICAgKEhhc0V2ZW50TGlzdGVuZXJDYWNoZUluZGV4KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6djhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3JDYWxsYmFjayk6CisgICAgICAg
ICogaHRtbC9IVE1MQXVkaW9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXVkaW9F
bGVtZW50OjpoYXNQZW5kaW5nQWN0aXZpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxl
bWVudC5oOgorCiAyMDExLTEwLTExICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AZ29vZ2xlLmNv
bT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBtYWtlIEV4dGVuc2lvbnMgY29tcG9uZW50IGNv
bXBpbGUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0Nv
ZGVHZW5lcmF0b3JWOC5wbQkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQkod29ya2luZyBjb3B5KQpAQCAtNTEyLDcg
KzUxMiw3IEBAIHN1YiBHZXRJbnRlcm5hbEZpZWxkcwogICAgICMgV2UgY2FuJ3QgYXNrIHdoZXRo
ZXIgYSBwYXJlbnQgdHlwZSBoYXMgYSBnaXZlbiBleHRlbmRlZEF0dHJpYnV0ZSwgc28gc3BlY2lh
bC1jYXNlIEFic3RyYWN0V29ya2VyIGFuZCBXb3JrZXJDb250ZXh0IHRvIGluY2x1ZGUgYWxsIHN1
Yi10eXBlcy4KICAgICAjIEV2ZW50IGxpc3RlbmVycyBvbiBET00gbm9kZXMgYXJlIGV4cGxpY2l0
bHkgc3VwcG9ydGVkIGluIHRoZSBHQyBjb250cm9sbGVyLgogICAgICMgRklYTUU6IFNWR0VsZW1l
bnRJbnN0YW5jZSBzaG91bGQgcHJvYmFibHkgaGF2ZSB0aGUgRXZlbnRUYXJnZXQgZXh0ZW5kZWQg
YXR0cmlidXRlLCBidXQgZG9lc24ndC4KLSAgICBpZiAoIUlzTm9kZVN1YlR5cGUoJGRhdGFOb2Rl
KSAmJgorICAgIGlmIChIYXNFdmVudExpc3RlbmVyQ2FjaGVJbmRleCgkZGF0YU5vZGUpICYmCiAg
ICAgICAgICgkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJFdmVudFRhcmdldCJ9IHx8
CiAgICAgICAgICBJc1N1YlR5cGUoJGRhdGFOb2RlLCAiQWJzdHJhY3RXb3JrZXIiKSB8fAogICAg
ICAgICAgSXNTdWJUeXBlKCRkYXRhTm9kZSwgIldvcmtlckNvbnRleHQiKSB8fApAQCAtNjY5LDYg
KzY2OSwxMiBAQCBzdWIgSXNTdWJUeXBlCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N1YiBIYXNFdmVu
dExpc3RlbmVyQ2FjaGVJbmRleAoreworICAgIG15ICRkYXRhTm9kZSA9IHNoaWZ0OworICAgIHJl
dHVybiAoJGRhdGFOb2RlLT5uYW1lIG5lICJOb2RlIik7Cit9CisKIHN1YiBJc05vZGVTdWJUeXBl
CiB7CiAgICAgbXkgJGRhdGFOb2RlID0gc2hpZnQ7CkBAIC0xMjczLDEwICsxMjc5LDEwIEBAIHN1
YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2sKICAgICAjIGJ1dCB0aGV5IGFyZSBleHRyZW1lbHkg
Y29uc2lzdGVudCBhY3Jvc3MgdGhlIHZhcmlvdXMgY2xhc3NlcyB0aGF0IHRha2UgZXZlbnQgbGlz
dGVuZXJzLAogICAgICMgc28gd2UgY2FuIGdlbmVyYXRlIHRoZW0gYXMgYSAic3BlY2lhbCBjYXNl
Ii4KICAgICBpZiAoJG5hbWUgZXEgImFkZEV2ZW50TGlzdGVuZXIiKSB7Ci0gICAgICAgIEdlbmVy
YXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNrKCRpbXBsQ2xhc3NOYW1lLCAhSXNOb2RlU3ViVHlwZSgk
ZGF0YU5vZGUpLCAiYWRkIik7CisgICAgICAgIEdlbmVyYXRlRXZlbnRMaXN0ZW5lckNhbGxiYWNr
KCRpbXBsQ2xhc3NOYW1lLCBIYXNFdmVudExpc3RlbmVyQ2FjaGVJbmRleCgkZGF0YU5vZGUpLCAi
YWRkIik7CiAgICAgICAgIHJldHVybjsKICAgICB9IGVsc2lmICgkbmFtZSBlcSAicmVtb3ZlRXZl
bnRMaXN0ZW5lciIpIHsKLSAgICAgICAgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGlt
cGxDbGFzc05hbWUsICFJc05vZGVTdWJUeXBlKCRkYXRhTm9kZSksICJyZW1vdmUiKTsKKyAgICAg
ICAgR2VuZXJhdGVFdmVudExpc3RlbmVyQ2FsbGJhY2soJGltcGxDbGFzc05hbWUsIEhhc0V2ZW50
TGlzdGVuZXJDYWNoZUluZGV4KCRkYXRhTm9kZSksICJyZW1vdmUiKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCShy
ZXZpc2lvbiA5NzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhIVE1MQXVk
aW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVj
dG9yOjpHZXRUZW1wbGF0ZSwgMCwgMCwgMCB9OworV3JhcHBlclR5cGVJbmZvIFY4SFRNTEF1ZGlv
RWxlbWVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rv
cjo6R2V0VGVtcGxhdGUsIFY4SFRNTEF1ZGlvRWxlbWVudDo6ZGVyZWZPYmplY3QsIFY4SFRNTEF1
ZGlvRWxlbWVudDo6dG9BY3RpdmVET01PYmplY3QsIDAgfTsKIAogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiB7CkBAIC02OCw3ICs2OCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW8KICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5
IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5Lgog
ICAgIHRvVjgoZG9jdW1lbnQpOwogCi0KICAgICBTdHJpbmcgc3JjOwogICAgIGlmIChhcmdzLkxl
bmd0aCgpID4gMCkKICAgICAgICAgc3JjID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwpAQCAt
NzYsNyArNzUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvCiAK
ICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRNTEF1
ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8tPnJl
ZigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShhdWRpby5nZXQo
KSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CisgICAg
VjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3QoYXVkaW8uZ2V0KCks
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwogICAgIHJl
dHVybiBhcmdzLkhvbGRlcigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
dWRpb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuaAkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
dWRpb0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBdWRpb0Vs
ZW1lbnQ+IGNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHNy
Yyk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgeyByZXR1
cm4gaXNQbGF5aW5nKCkgfHwgSFRNTE1lZGlhRWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7
IH0KKwogcHJpdmF0ZToKICAgICBIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVu
dC5pZGwJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9F
bGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTggQEAKIAogbW9kdWxlIGh0
bWwgewogICAgIGludGVyZmFjZSBbCisgICAgICAgIEFjdGl2ZURPTU9iamVjdCwKKyAgICAgICAg
RXZlbnRUYXJnZXQsCiAgICAgICAgIENvbmRpdGlvbmFsPVZJREVPCiAgICAgXSBIVE1MQXVkaW9F
bGVtZW50IDogSFRNTE1lZGlhRWxlbWVudCB7Ci0gICAgCisgICAgICAgIC8vIEV2ZW50VGFyZ2V0
IGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICB2b2lkIGFkZEV2
ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAgICAgICB2b2lkIHJl
bW92ZUV2ZW50TGlzdGVuZXIoaW4gRE9NU3RyaW5nIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbiBFdmVudExpc3RlbmVyIGxpc3RlbmVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW4gW09wdGlvbmFsXSBib29sZWFuIHVzZUNhcHR1cmUpOworICAg
ICAgICBib29sZWFuIGRpc3BhdGNoRXZlbnQoaW4gRXZlbnQgZXZlbnQpCisgICAgICAgICAgICBy
YWlzZXMoRXZlbnRFeGNlcHRpb24pOyAgICAKICAgICB9OwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDcgKzU4LDcg
QEAgY2xhc3MgV2lkZ2V0OwogLy8gQnV0IGl0IGNhbid0IGJlIHVudGlsIHRoZSBDaHJvbWl1bSBX
ZWJNZWRpYVBsYXllckNsaWVudEltcGwgY2xhc3MgaXMgZml4ZWQgc28gaXQKIC8vIG5vIGxvbmdl
ciBkZXBlbmRzIG9uIHR5cGVjYXN0aW5nIGEgTWVkaWFQbGF5ZXJDbGllbnQgdG8gYW4gSFRNTE1l
ZGlhRWxlbWVudC4KIAotY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVu
dCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5l
ciwgcHJpdmF0ZSBBY3RpdmVET01PYmplY3QgeworY2xhc3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIE1lZGlhUGxheWVyQ2xpZW50LCBwcml2YXRlIE1lZGlh
Q2FuU3RhcnRMaXN0ZW5lciwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CiBwdWJsaWM6CiAgICAg
TWVkaWFQbGF5ZXIqIHBsYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWVyLmdldCgpOyB9CiAg
ICAgCkBAIC0yMDUsNiArMjA1LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBpc1BsYXlpbmcoKSBj
b25zdCB7IHJldHVybiBtX3BsYXlpbmc7IH0KIAorICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdDsKKwogI2lmIEVOQUJMRShXRUJfQVVESU8pCiAgICAgTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlKiBhdWRpb1NvdXJjZU5vZGUoKSB7IHJldHVybiBtX2F1ZGlvU291
cmNlTm9kZTsgfQogICAgIHZvaWQgc2V0QXVkaW9Tb3VyY2VOb2RlKE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZSopOwpAQCAtMjY4LDcgKzI3MCw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2
b2lkIHN1c3BlbmQoUmVhc29uRm9yU3VzcGVuc2lvbik7CiAgICAgdmlydHVhbCB2b2lkIHJlc3Vt
ZSgpOwogICAgIHZpcnR1YWwgdm9pZCBzdG9wKCk7Ci0gICAgdmlydHVhbCBib29sIGhhc1BlbmRp
bmdBY3Rpdml0eSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBtZWRpYVZvbHVtZURp
ZENoYW5nZSgpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NzE1MikKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDExLTA5LTI3ICBFdWdl
bmUgTmFsaW1vdiAgPGVuYWxAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFBsYXlpbmcgSFRNTEF1
ZGlvRWxlbWVudCBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODc4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgcmVncmVzc2lvbiB0ZXN0IHRoYXQgcGxh
eXMgc2hvcnQgYXVkaW8gKH4xIHNlY29uZCkgc2V2ZXJhbCB0aW1lcworICAgICAgICBpbiBhIHJv
dyBhbmQgY2F1c2VzIGdhcmJhZ2UgY29sbGVjdG9yIGluIHBhcmFsbGVsLiBUZXN0IHNob3VsZCBw
bGF5CisgICAgICAgIGF1ZGlvIHN0cmVhbSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRpbWVzIGFuZCBz
aWduYWwgJ2VuZGVkJyBldmVudC4KKworICAgICAgICAqIG1lZGlhL2F1ZGlvLWdhcmJhZ2UtY29s
bGVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIG1lZGlhL2F1ZGlvLWdhcmJhZ2Ut
Y29sbGVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS9jb250ZW50L2NsaWNrMi53YXY6
IEFkZGVkLgorCiAyMDExLTEwLTA1ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVudCBDb21waWxlclNvdXJj
ZU1hcHBpbmdQcm92aWRlci4KSW5kZXg6IExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2Ut
Y29sbGVjdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvbWVkaWEvYXVk
aW8tZ2FyYmFnZS1jb2xsZWN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2UtY29sbGVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTEgQEAKK1Rlc3RzIHRoYXQgd2UgZG9uJ3QgZ2FyYmFnZSBjb2xsZWN0IHBs
YXlpbmcgYXVkaW8gb2JqZWN0IG9yIGV2ZW50IGxpc3RlbmVyLgorCitBY2NvcmRpbmcgdG8gaHR0
cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2Uv
dGhlLXZpZGVvLWVsZW1lbnQuaHRtbCwKKyI0LjguMTAuOCBQbGF5aW5nIHRoZSBtZWRpYSByZXNv
dXJjZSIsCisiTWVkaWEgZWxlbWVudHMgbXVzdCBub3Qgc3RvcCBwbGF5aW5nIGp1c3QgYmVjYXVz
ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGVtIGhhdmUgYmVlbiByZW1vdmVkOyBvbmx5IG9uY2UgYSBt
ZWRpYSBlbGVtZW50IGlzIGluIGEgc3RhdGUgd2hlcmUgbm8gZnVydGhlciBhdWRpbyBjb3VsZCBl
dmVyIGJlIHBsYXllZCBieSB0aGF0IGVsZW1lbnQgbWF5IHRoZSBlbGVtZW50IGJlIGdhcmJhZ2Ug
Y29sbGVjdGVkLiIKKworKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjY4NzggYW5kIGh0dHA6Ly9jcmJ1Zy5jb20vNjI2MDQgZm9yIG1vcmUgZGV0YWlscykuCisK
K1BBU1MKKworCkluZGV4OiBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxlY3Qu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS9hdWRpby1nYXJiYWdlLWNvbGxl
Y3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL21lZGlhL2F1ZGlvLWdhcmJhZ2Ut
Y29sbGVjdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACis8IURPQ1RZUEUgSFRN
TD4KKworPGh0bWw+Cis8Ym9keT4KKworPHA+VGVzdHMgdGhhdCB3ZSBkb24ndCBnYXJiYWdlIGNv
bGxlY3QgcGxheWluZyBhdWRpbyBvYmplY3Qgb3IgZXZlbnQgbGlzdGVuZXIuPC9wPgorPHA+QWNj
b3JkaW5nIHRvIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdv
cmsvbXVsdGlwYWdlL3RoZS12aWRlby1lbGVtZW50Lmh0bWwsPGJyIC8+CisiNC44LjEwLjggUGxh
eWluZyB0aGUgbWVkaWEgcmVzb3VyY2UiLDxiciAvPgorIk1lZGlhIGVsZW1lbnRzIG11c3Qgbm90
IHN0b3AgcGxheWluZyBqdXN0IGJlY2F1c2UgYWxsIHJlZmVyZW5jZXMgdG8gdGhlbSBoYXZlCiti
ZWVuIHJlbW92ZWQ7IG9ubHkgb25jZSBhIG1lZGlhIGVsZW1lbnQgaXMgaW4gYSBzdGF0ZSB3aGVy
ZSBubyBmdXJ0aGVyIGF1ZGlvCitjb3VsZCBldmVyIGJlIHBsYXllZCBieSB0aGF0IGVsZW1lbnQg
bWF5IHRoZSBlbGVtZW50IGJlIGdhcmJhZ2UgY29sbGVjdGVkLiI8YnIgLz48YnIgLz4KKyhzZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2ODc4IGFuZCBodHRwOi8v
Y3JidWcuY29tLzYyNjA0IGZvciBtb3JlIGRldGFpbHMpLjwvcD4KKzxwIGlkPSJyZXN1bHQiPgor
ICAgIEZBSUw6IFRlc3QgZWl0aGVyIHN0aWxsIHJ1bm5pbmcgb3Igc3RvcHBlZCBwcmVtYXR1cmVs
eS4KKzwvcD4KKworPHNjcmlwdCBzcmM9bWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPXZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CisKK3ZhciBudW1fcGxheWVycyA9IDQ7Cit2YXIgcGxheV90aW1lcyA9IDU7CisKK3ZhciBh
OwordmFyIG51bV9wbGF5ZWQ7Cit2YXIgdG90YWxfcGxheWVkID0gMDsKKworZnVuY3Rpb24gZm9y
Y2VHQygpIHsKKyAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgcmV0dXJuIEdDQ29udHJv
bGxlci5jb2xsZWN0KCk7CisKKyAgLy8gRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uCisgIGZvciAo
dmFyIG5keCA9IDA7IG5keCA8IDk5MDAwOyBuZHggKyspCisgICAgdmFyIHN0ciA9IG5ldyBTdHJp
bmcoIjEyMzQiKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgeworICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgicmVzdWx0IikuaW5uZXJUZXh0ID0gIlBBU1MiOworICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICB9Cit9CisKK2Z1bmN0aW9uIHN0YXJ0KCkgeworICBudW1fcGxheWVkID0gMDsKKyAgdmFy
IGF1ZGlvRmlsZSA9IGZpbmRNZWRpYUZpbGUoImF1ZGlvIiwgImNvbnRlbnQvY2xpY2syIik7Cisg
IGEgPSBuZXcgQXVkaW8oYXVkaW9GaWxlKTsKKyAgYS5hZGRFdmVudExpc3RlbmVyKCdlbmRlZCcs
IGZ1bmN0aW9uKCkgeworICAgIG51bV9wbGF5ZWQgKys7CisgICAgaWYgKG51bV9wbGF5ZWQgPCBw
bGF5X3RpbWVzKSB7CisgICAgICBhLmN1cnJlbnRUaW1lID0gMDsKKyAgICAgIGEucGxheSgpOwor
ICAgICAgaWYgKG51bV9wbGF5ZWQgPT0gcGxheV90aW1lcyAtIDEpIHsKKyAgICAgICAgYSA9IG51
bGw7CisgICAgICAgIGZvcmNlR0MoKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgdG90
YWxfcGxheWVkICsrOworICAgICAgaWYgKHRvdGFsX3BsYXllZCA8IG51bV9wbGF5ZXJzKQorICAg
ICAgICBzdGFydCgpOworICAgICAgZWxzZQorICAgICAgICBmaW5pc2goKTsKKyAgICB9CisgIH0p
OworICBhLmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBsYXl0aHJvdWdoJywgZnVuY3Rpb24oKSB7Cisg
ICAgYS5wbGF5KCk7CisgIH0pOworfQorCitzdGFydCgpOworCis8L3NjcmlwdD4KKworPC9ib2R5
PgorPC9odG1sPiAKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL2NvbnRlbnQvY2xpY2syLndhdgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpz
dm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBMYXlvdXRUZXN0cy9tZWRpYS9jb250ZW50L2NsaWNrMi53YXYKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKClVrbEdSblFH
QUFCWFFWWkZabTEwSUJBQUFBQUJBQUVBRVNzQUFCRXJBQUFCQUFnQVpHRjBZVThHQUFDQmdJRi9n
bjJDZjRCK2duNSsKZllKL2dJRi9nSCtCZlg2QWZYdDVmWHg3ZTN4OWZIMStmNENBZm54OWYzdDln
SUI5ZW4yRGZuNThmWUtEZ0lKOWhuaDdoSVo4Z1lSNgpmSHlDZTRHQ2lvRitnSDkzZm9XQ2dvSjVn
SHg1Z25pQWVZSjBkbmVDZ1hOMWpuMStmSTF6ZkhwOGRZaUNlM3FJaEhwbWZYcU1lWkowCkFDYi9B
QUQvL3dBQVEvOEEzcFlBTnYvcVllazVPR3AzdElDZWV4allVa1dnWU16ekFCLy9oRHlWY1gyWWk1
cHBYTE5zWFlLRVozbDcKYUhHVG4xcG5sWmx3VnB1VWdxT0tnSU9NWUlwc29YVnlkSktkYzI5Nmta
bDNoM09BY29WNmFvNkJlMjk4aXBDRmhJRnhrM3lJZVhOdQpoNGVIaVloL2MzaDFlSkNVZW5DQ2ZI
OXllWlNLY0hSN2VIOXVnWWwrZUltRmZXeHVoWDF1aUl4K2dZWm1nMzU1aEhsemdYbDFkSWVXCmRH
bWNpWHB0ZVlXTWMzR09mbnR5ZTVLaGgxK2Jlb2FGZ21KNWs0S1VlM0NYaW0yR2RKYUZZWG1lYzFH
b21HOTdiNG1aY25DSWJYNkUKYlg2TGJXZDFlNEIwZDR4NmNYdUtjb0tNZG9CNWVadDlkb2gwZTMy
QWc1Q1Nnbk9Fa0lXQmdYNkFlWXFSZW5KOWhvS0RoSVI2Z0lCdAplNDJEZUh1RmhtMThnMzV3ZTR4
OWRubUJnSHArYm5pQmZJRjJlWUIzZllWM2RYK0ZkSU9DZjNaN2ZvRjhlNG1BZkh1Q2RuK0xjM1dL
CmhYeUVobnQ3Z29GNGZvU0RoSDE3ZjR1RmZucC9pbzkwYzRPQmZIdUNnNEp5aEl4eWNIMkpnbnVE
aUhsOGhIOThkSU9EZElLQmVJWjgKZkhlQ2lYeCtmM1NJZjNWN2VZU0NkSHVDZ25oNmhJRnppb1Yz
Z1l1QWVYbDllNFY3ZTMrSmduVjZnSUo3aElpQ2UzeUlpbng5aFlHQQpoWDE3aDRPQmZJQ0ZmSWlG
ZkhoOWhuOTNnbnAyaFlSNmZvRjRkbjkvZFgxL2VYOS9kSE4rZ29CM2VvRjhmSHQ2ZjMxNmZJRjZn
SUY4CmVIMkNnbnQvZ29WNmlIeDNpSVI2ZjRDRGczdUdnM3lBaUlOOWc0Qi9nbitDZ1g1OWhuOTZm
bitGZlg1OWY0U0NnSVI3Zm9KN2ZZR0EKZm9GNmY0RjVmSHlEZlhtRmZudDVoSUI1Zm4xL2ZYMStn
SGw5Zm9OOGZZR0Nmb0NHZW42QWdvQi9nSDkvZzNwOGZZV0dmWHFEaEgxNwpnSU9DZm4rQ2VvQ0Rn
M3A2ZklHRmZYcC9nWVI5ZFlOL2dYNTdlMzU5Zm9KOWZvR0FmMzU3Z0lDQWZJSjdmbjE2aG9WNmZY
eUFnWCtCCmZuNStnbmw1Z1lTQmZIMTllNGg3ZklTRWVJQitnSCtFZDMrQ2YzcDZoWDJBZjNxQWZY
NS9mbjk4ZjRHQmdIdDNnWVovZlg5OWdIeDgKZ0g5N2hvUjNnWDUvZzNsK2czMS9nMzE1ZjROOGZY
K0FnWDZBZjM1K2dINkFnWDk3Zm9DQ2ZYOTlnbjErZ1lGN2dJUjllbitEZ0g1OQpmMzE5Z1lCOGZu
MS9mMzJCZTN1Q2dYeCtmWVIvZkgyQ2YzMStmb0tFZkh5QmczMS9mbjUvZ29KN2dJYUFmWDkvZ24r
QmduNTZnNEovCmdvRi9mb0IvZ0lCL2ZuK0JmM3VBZ245NmYzOThnSUIvZm55QWdIeDlmbjUrZjNw
K2dueDlmM3gvZjM5OGYzOTlnSDkvZm42RGYzeUIKZjM5L2dJQjlmNEYvZ1lGK2Y0Q0Nmb0YvZjRL
Q2dJQ0FmNEtBZzRCK2Y0S0NmWDU5Z29OOWZZQi9nSUI2Z0g5OWZJQ0FmWDEvZ254NwpmWUIvZ1h4
OWZuNS9mbjk5Zlg1K2ZYNStmbjUvZjM5L2dYNS9nbngrZ0lGL2ZvQ0NmbjJBZjRKK2ZvR0JnWDkv
ZjRDQ2ZJR0FnWUYvCmYzNkFnWUIrZ0lHQWdIMkFnWDk5Z0g5L2dIMkFmMytBZlh4OWdIeCtmSHlB
Zlg1K2ZIMkFnbnQ3ZjM1L2ZYOS9mMzkvZlhwK2dINSsKZ29COWYzOS9nbjU5Z1grQWYzMS9nSUIv
ZjM5L2dINkFnSUNCZm9DRWY0QitmNEtCZjRCL2dZR0RmbitBZjRCL2ZuNTlmb0YrZm9LQgpmbjkr
Zkh5QWZuNStmbitCZVgrRmczTjdoWDU4Z0grQWZuNkZkSHVJZ25oK2c0QjZlNGlHZUhxRmhYaDdn
MytBZjM2QWc0U0FlWCtFCmVuMStnNFY3ZW42RWYzK0FnWDkvZjRCK2ZIeCtmb0ovZkg2Q2hIeDlm
b0dCZzN0NWZvSi9mM3grZllGK2YzMStnSUNCZ1g1L2Y0RisKZm41L2ZYNTlmbjkrZ0lPQWYzK0Fm
NEI5Zm45K2dYOStnWCtCZm9HQmdJQi9mMzEvZ24rQ2ZJQi9mWUYrZjM2QmYzNS9mb0IvZjM5OApn
WCtBZjMxL2Y0Q0JmMzU4Z0lLQWZuOStnbjJBZjM1K2duOTlmMzZCZjMxK2YzK0FmMzk5ZjRDQmZv
Q0FmWCtCZlgrQWdINkFnSDkrCmdJWjlmWUovaUlCM2ZJdC9kSVNCZ0h4L2Y0T0ZmMzJBZ1g1M2ZJ
T0NlNEtCZm4yQmVuNTdmM3Q0ZjROOWdINkJnWUtBZ0hsL2duMS8KZjROL2YzNkRnb0NCZm9KK2VY
MTdnSDE4ZTRGL2ZZQitoWDZEZzRPQmdJQjhmSHQrZjM5K2ZYOS9mb0tCZ0lHRWYzMS9nWDZBZ29H
RApmb0NFZjMyQkFBPT0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111634</attachid>
            <date>2011-10-19 09:29:55 -0700</date>
            <delta_ts>2011-10-20 07:09:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111019092954.patch</filename>
            <type>text/plain</type>
            <size>5069</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEhUTUxBdWRpb0VsZW1lbnQgYW4gJ2FjdGl2ZScg
b25lLCBtZWFuaW5nIHRoYXQgaXQgY2Fubm90IGJlCisgICAgICAgIGdhcmJhZ2UgY29sbGVjdGVk
IGlmIGl0IGhhcyBwYW5kaW5nIGFjdGl2aXR5LiBIYWQgdG8gbWFrZQorICAgICAgICBIVE1MTWVk
aWFFbGVtZW50OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBhbmQKKyAgICAgICAgSFRNTEF1ZGlvRWxl
bWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgcHVibGljLCBvdGhlcndpc2UgYXV0b21hdGljYWxs
eQorICAgICAgICBnZW5lcmF0ZWQgY29kZSB3b3VsZCBub3QgY29tcGlsZS4gCisKKyAgICAgICAg
VGVzdDogbm8gdGVzdCwgYXMgYXV0b21hdGljIHRlc3QgaXMgYmxvY2tlZCBieQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MjEKKyAgICAgICAgWW91
IGRvbid0IHdhbnQgdG8gc2l0IGRvd24gYW5kIGxpc3RlbiBpZiBhdWRpbyBzdHJlYW0gcGxheWVk
IGNvbXBsZXRlbHksCisgICAgICAgIGFuZCBjYW5ub3QgcmVseSBvbiAnZW5kZWQnIGV2ZW50IGJl
Y2F1c2UgZXZlbnRzIGFyZSBsb3N0IHdoZW4gZXZlbnRzCisgICAgICAgIGxpc3RlbmVyIGlzIGNv
bGxlY3RlZC4gCisKKyAgICAgICAgKiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRsOgorICAgICAg
ICAqIGh0bWwvSFRNTEF1ZGlvRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlv
RWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaDoKKwogMjAxMS0xMC0xMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5j
b20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogbWFrZSBFeHRlbnNpb25zIGNvbXBvbmVudCBj
b21waWxlLgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1
ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZp
c2lvbiA5NzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxB
dWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XcmFwcGVyVHlwZUluZm8gVjhIVE1MQXVkaW9F
bGVtZW50Q29uc3RydWN0b3I6OmluZm8gPSB7IFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9y
OjpHZXRUZW1wbGF0ZSwgMCwgMCwgMCB9OworV3JhcHBlclR5cGVJbmZvIFY4SFRNTEF1ZGlvRWxl
bWVudENvbnN0cnVjdG9yOjppbmZvID0geyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6
R2V0VGVtcGxhdGUsIFY4SFRNTEF1ZGlvRWxlbWVudDo6ZGVyZWZPYmplY3QsIFY4SFRNTEF1ZGlv
RWxlbWVudDo6dG9BY3RpdmVET01PYmplY3QsIDAgfTsKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpB
cmd1bWVudHMmIGFyZ3MpCiB7CkBAIC02OCw3ICs2OCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdjhIVE1MQXVkaW8KICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5v
ZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgogICAg
IHRvVjgoZG9jdW1lbnQpOwogCi0KICAgICBTdHJpbmcgc3JjOwogICAgIGlmIChhcmdzLkxlbmd0
aCgpID4gMCkKICAgICAgICAgc3JjID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwpAQCAtNzYs
NyArNzUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvCiAKICAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRNTEF1ZGlv
RWxlbWVudENvbnN0cnVjdG9yOjppbmZvLCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8tPnJlZigp
OwotICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShhdWRpby5nZXQoKSwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CisgICAgVjhE
T01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3QoYXVkaW8uZ2V0KCksIHY4
OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwogICAgIHJldHVy
biBhcmdzLkhvbGRlcigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0Vs
ZW1lbnQuaAkocmV2aXNpb24gOTcxNTIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRp
b0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsOCBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SFRNTEF1ZGlvRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1l
bnQ+IGNyZWF0ZUZvckpTQ29uc3RydWN0b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHNyYyk7
CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgeyByZXR1cm4g
aXNQbGF5aW5nKCkgfHwgSFRNTE1lZGlhRWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7IH0K
KwogcHJpdmF0ZToKICAgICBIVE1MQXVkaW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5p
ZGwJKHJldmlzaW9uIDk3MTUyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVt
ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsOSBAQAogCiBtb2R1bGUgaHRtbCB7
CiAgICAgaW50ZXJmYWNlIFsKKyAgICAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgICAgICBDb25k
aXRpb25hbD1WSURFTwogICAgIF0gSFRNTEF1ZGlvRWxlbWVudCA6IEhUTUxNZWRpYUVsZW1lbnQg
ewotICAgIAorCiAgICAgfTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCShyZXZpc2lvbiA5NzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlh
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIGNsYXNzIFdpZGdldDsK
IC8vIEJ1dCBpdCBjYW4ndCBiZSB1bnRpbCB0aGUgQ2hyb21pdW0gV2ViTWVkaWFQbGF5ZXJDbGll
bnRJbXBsIGNsYXNzIGlzIGZpeGVkIHNvIGl0CiAvLyBubyBsb25nZXIgZGVwZW5kcyBvbiB0eXBl
Y2FzdGluZyBhIE1lZGlhUGxheWVyQ2xpZW50IHRvIGFuIEhUTUxNZWRpYUVsZW1lbnQuCiAKLWNs
YXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBNZWRpYVBs
YXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIsIHByaXZhdGUgQWN0aXZl
RE9NT2JqZWN0IHsKK2NsYXNzIEhUTUxNZWRpYUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQs
IHB1YmxpYyBNZWRpYVBsYXllckNsaWVudCwgcHJpdmF0ZSBNZWRpYUNhblN0YXJ0TGlzdGVuZXIs
IHB1YmxpYyBBY3RpdmVET01PYmplY3QgewogcHVibGljOgogICAgIE1lZGlhUGxheWVyKiBwbGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3BsYXllci5nZXQoKTsgfQogICAgIApAQCAtMjA1LDYgKzIw
NSw4IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
bGF5aW5nOyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7
CisKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9k
ZSogYXVkaW9Tb3VyY2VOb2RlKCkgeyByZXR1cm4gbV9hdWRpb1NvdXJjZU5vZGU7IH0KICAgICB2
b2lkIHNldEF1ZGlvU291cmNlTm9kZShNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUqKTsKQEAg
LTI2OCw3ICsyNzAsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5kKFJlYXNv
bkZvclN1c3BlbnNpb24pOwogICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgc3RvcCgpOwotICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25z
dDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbWVkaWFWb2x1bWVEaWRDaGFuZ2UoKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111764</attachid>
            <date>2011-10-20 07:09:10 -0700</date>
            <delta_ts>2011-10-20 11:25:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66878-20111020070909.patch</filename>
            <type>text/plain</type>
            <size>5040</size>
            <attacher name="Eugene Nalimov">enal</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk3OTI4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDktMjcgIEV1Z2VuZSBO
YWxpbW92ICA8ZW5hbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUGxheWluZyBIVE1MQXVkaW9F
bGVtZW50IGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjY4NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBNYWtlIEhUTUxBdWRpb0VsZW1lbnQgYW4gJ2FjdGl2ZScg
b25lLCBtZWFuaW5nIHRoYXQgaXQgY2Fubm90IGJlCisgICAgICAgIGdhcmJhZ2UgY29sbGVjdGVk
IGlmIGl0IGhhcyBwYW5kaW5nIGFjdGl2aXR5LiBIYWQgdG8gbWFrZQorICAgICAgICBIVE1MTWVk
aWFFbGVtZW50OjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBhbmQKKyAgICAgICAgSFRNTEF1ZGlvRWxl
bWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgcHVibGljLCBvdGhlcndpc2UgYXV0b21hdGljYWxs
eQorICAgICAgICBnZW5lcmF0ZWQgY29kZSB3b3VsZCBub3QgY29tcGlsZS4gCisKKyAgICAgICAg
VGVzdDogbm8gdGVzdCwgYXMgYXV0b21hdGljIHRlc3QgaXMgYmxvY2tlZCBieQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzA0MjEKKyAgICAgICAgWW91
IGRvbid0IHdhbnQgdG8gc2l0IGRvd24gYW5kIGxpc3RlbiBpZiBhdWRpbyBzdHJlYW0gcGxheWVk
IGNvbXBsZXRlbHksCisgICAgICAgIGFuZCBjYW5ub3QgcmVseSBvbiAnZW5kZWQnIGV2ZW50IGJl
Y2F1c2UgZXZlbnRzIGFyZSBsb3N0IHdoZW4gZXZlbnRzCisgICAgICAgIGxpc3RlbmVyIGlzIGNv
bGxlY3RlZC4gCisKKyAgICAgICAgKiBodG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRsOgorICAgICAg
ICAqIGh0bWwvSFRNTEF1ZGlvRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEF1ZGlv
RWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaDoKKwogMjAxMS0xMC0xOSAgQ2Fyb2wgU3phYm8gIDxjYXJvbEB3ZWJraXQub3JnPgog
CiAgICAgICAgIENTUyBDb3VudGVycyBoYXZlIHdyb25nIHZhbHVlcwpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
QXVkaW9FbGVtZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA5NzkyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1XcmFwcGVyVHlwZUluZm8gVjhIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3I6OmluZm8g
PSB7IFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjpHZXRUZW1wbGF0ZSwgMCwgMCwgMCB9
OworV3JhcHBlclR5cGVJbmZvIFY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZvID0g
eyBWOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvcjo6R2V0VGVtcGxhdGUsIFY4SFRNTEF1ZGlv
RWxlbWVudDo6ZGVyZWZPYmplY3QsIFY4SFRNTEF1ZGlvRWxlbWVudDo6dG9BY3RpdmVET01PYmpl
Y3QsIDAgfTsKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OEhUTUxBdWRpb0VsZW1l
bnRDb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCiB7CkBAIC02
OCw3ICs2OCw2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhIVE1MQXVkaW8KICAg
ICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdh
cmJhZ2UtY29sbGVjdGVkIHByZW1hdHVyZWx5LgogICAgIHRvVjgoZG9jdW1lbnQpOwogCi0KICAg
ICBTdHJpbmcgc3JjOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCkKICAgICAgICAgc3JjID0g
dG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwpAQCAtNzYsNyArNzUsNyBAQCBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHY4SFRNTEF1ZGlvCiAKICAgICBWOERPTVdyYXBwZXI6OnNldERPTVdy
YXBwZXIoYXJncy5Ib2xkZXIoKSwgJlY4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yOjppbmZv
LCBhdWRpby5nZXQoKSk7CiAgICAgYXVkaW8tPnJlZigpOwotICAgIFY4RE9NV3JhcHBlcjo6c2V0
SlNXcmFwcGVyRm9yRE9NTm9kZShhdWRpby5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJG
b3JBY3RpdmVET01PYmplY3QoYXVkaW8uZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+
OjpOZXcoYXJncy5Ib2xkZXIoKSkpOwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkocmV2aXNpb24gOTc5Mjgp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8SFRNTEF1
ZGlvRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxBdWRpb0VsZW1lbnQ+IGNyZWF0ZUZvckpTQ29uc3RydWN0
b3IoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIHNyYyk7CiAKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
UGVuZGluZ0FjdGl2aXR5KCkgY29uc3QgeyByZXR1cm4gaXNQbGF5aW5nKCkgfHwgSFRNTE1lZGlh
RWxlbWVudDo6aGFzUGVuZGluZ0FjdGl2aXR5KCk7IH0KKwogcHJpdmF0ZToKICAgICBIVE1MQXVk
aW9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxBdWRpb0VsZW1lbnQuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF1ZGlvRWxlbWVudC5pZGwJKHJldmlzaW9uIDk3OTI4KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXVkaW9FbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpA
QCAtMjUsOCArMjUsOSBAQAogCiBtb2R1bGUgaHRtbCB7CiAgICAgaW50ZXJmYWNlIFsKKyAgICAg
ICAgQWN0aXZlRE9NT2JqZWN0LAogICAgICAgICBDb25kaXRpb25hbD1WSURFTwogICAgIF0gSFRN
TEF1ZGlvRWxlbWVudCA6IEhUTUxNZWRpYUVsZW1lbnQgewotICAgIAorCiAgICAgfTsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCShyZXZpc2lvbiA5NzkyOCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NSw3ICs2NSw3IEBAIGNsYXNzIE11dGFibGVUZXh0VHJhY2s7CiAvLyBCdXQgaXQgY2Fu
J3QgYmUgdW50aWwgdGhlIENocm9taXVtIFdlYk1lZGlhUGxheWVyQ2xpZW50SW1wbCBjbGFzcyBp
cyBmaXhlZCBzbyBpdAogLy8gbm8gbG9uZ2VyIGRlcGVuZHMgb24gdHlwZWNhc3RpbmcgYSBNZWRp
YVBsYXllckNsaWVudCB0byBhbiBIVE1MTWVkaWFFbGVtZW50LgogCi1jbGFzcyBIVE1MTWVkaWFF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50LCBwdWJsaWMgTWVkaWFQbGF5ZXJDbGllbnQsIHBy
aXZhdGUgTWVkaWFDYW5TdGFydExpc3RlbmVyLCBwcml2YXRlIEFjdGl2ZURPTU9iamVjdAorY2xh
c3MgSFRNTE1lZGlhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIE1lZGlhUGxh
eWVyQ2xpZW50LCBwcml2YXRlIE1lZGlhQ2FuU3RhcnRMaXN0ZW5lciwgcHVibGljIEFjdGl2ZURP
TU9iamVjdAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICAsIHByaXZhdGUgVGV4dFRyYWNr
Q2xpZW50CiAjZW5kaWYKQEAgLTIyMCw2ICsyMjAsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGlz
UGxheWluZygpIGNvbnN0IHsgcmV0dXJuIG1fcGxheWluZzsgfQogCisgICAgdmlydHVhbCBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OworCiAjaWYgRU5BQkxFKFdFQl9BVURJTykKICAg
ICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUqIGF1ZGlvU291cmNlTm9kZSgpIHsgcmV0dXJu
IG1fYXVkaW9Tb3VyY2VOb2RlOyB9CiAgICAgdm9pZCBzZXRBdWRpb1NvdXJjZU5vZGUoTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlKik7CkBAIC0yODMsNyArMjg1LDYgQEAgcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIHZvaWQgc3VzcGVuZChSZWFzb25Gb3JTdXNwZW5zaW9uKTsKICAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKLSAgICB2aXJ0dWFsIGJv
b2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIG1l
ZGlhVm9sdW1lRGlkQ2hhbmdlKCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>