<?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>116853</bug_id>
          
          <creation_ts>2013-05-28 01:29:36 -0700</creation_ts>
          <short_desc>ASSERTION FAILED: low in JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset</short_desc>
          <delta_ts>2013-07-23 17:56:26 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>116980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Renata Hodovan">rhodovan.u-szeged</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>894248</commentid>
    <comment_count>0</comment_count>
      <attachid>203028</attachid>
    <who name="Renata Hodovan">rhodovan.u-szeged</who>
    <bug_when>2013-05-28 01:29:36 -0700</bug_when>
    <thetext>Created attachment 203028
Test case

JSC has an assertion failure on the attached test.
It seems jsc cannot handle the thrown StackOverflowError correctly (like it does in a simple infinite loop).

Backtrace:

#0  0x00000000007fa9ad in WTFCrash () at /home/reni/Data/REPOS/webkit_sec/Source/WTF/wtf/Assertions.cpp:339
#1  0x00000000004bdf5e in JSC::UnlinkedCodeBlock::expressionRangeForBytecodeOffset (this=0x7fffb395f870, bytecodeOffset=4, divot=@0x7fffffffc5fc: 0, 
    startOffset=@0x7fffffffc5f8: 0, endOffset=@0x7fffffffc5f4: 0) at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:279
#2  0x0000000000641a3d in JSC::StackFrame::expressionInfo (this=0x7fffb27cc010, divot=@0x7fffffffc5fc: 0, startOffset=@0x7fffffffc5f8: 0, 
    endOffset=@0x7fffffffc5f4: 0) at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/interpreter/Interpreter.cpp:631
#3  0x00000000006419cb in JSC::StackFrame::column (this=0x7fffb27cc010)
    at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/interpreter/Interpreter.cpp:625
#4  0x0000000000641b5f in JSC::StackFrame::toString (this=0x7fffb27cc010, callFrame=0x7ffff7f5fb78)
    at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/interpreter/Interpreter.cpp:649
#5  0x00000000006420d2 in JSC::Interpreter::addStackTraceIfNecessary (callFrame=0x7fffb3dc0f88, error=...)
    at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/interpreter/Interpreter.cpp:711
#6  0x000000000072eab2 in JSC::throwError (exec=0x7fffb3dc0f88, error=0x7ffff7e8ff20)
    at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/runtime/Error.cpp:165
#7  0x0000000000730093 in JSC::throwStackOverflowError (exec=0x7fffb3dc0f88)
    at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp:141
#8  0x0000000000643d49 in JSC::Interpreter::executeCall (this=0xf40f60, callFrame=0x7fffb3dc0f88, function=0x7ffff7ecfe30, callType=JSC::CallTypeHost, 
    callData=..., thisValue=..., args=...) at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/interpreter/Interpreter.cpp:1032
#9  0x0000000000721313 in JSC::call (exec=0x7fffb3dc0f88, functionObject=..., callType=JSC::CallTypeHost, callData=..., thisValue=..., args=...)
    at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/runtime/CallData.cpp:40
#10 0x0000000000774e8e in JSC::callDefaultValueFunction (exec=0x7fffb3dc0f88, object=0x7ffff7e6feb0, propertyName=...)
    at /home/reni/Data/REPOS/webkit_sec/Source/JavaScriptCore/runtime/JSObject.cpp:1344</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895607</commentid>
    <comment_count>1</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-05-30 11:44:28 -0700</bug_when>
    <thetext>Weirdness, my guess is we&apos;re not correctly handling the top of stack frame.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896639</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-03 15:17:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/14052089&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896663</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-03 17:24:35 -0700</bug_when>
    <thetext>Here&apos;s some data from the site of the assertion failure for this test case:

1. The assertion is in UnlinkedCodeBlock::expressionRangeForBytecodeOffset() which does a binary search of the m_expressionInfo Vector to find the range that the bytecodeOffset resides in.
2. The specified bytecodeOffset in this case is 4.
3. The m_expressionInfo Vector only has 1 entry:

(gdb) p expressionInfo.size()
$2 = 1
(gdb) p expressionInfo[0].instructionOffset
$4 = 19

The binary search in (1) starts with low = 0, and high = expressionInfo.size() i.e. 1.  Since the one entry in the Vector has an instructionOffset that exceeds the bytecodeOffset, it makes sense that the resultant low value is 0.

It looks like the assertion is invalid.  When the assertion is commented out, the reported line and column number in the stack trace is also correct.

I need to do a little bit more due diligence to check how expressionInfo is generated and see if there&apos;s any reason why the expressionRangeForBytecodeOffset() should not get the 0th entry in that Vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896668</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-03 17:38:40 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I need to do a little bit more due diligence to check how expressionInfo is generated and see if there&apos;s any reason why the expressionRangeForBytecodeOffset() should not get the 0th entry in that Vector.

Due diligence is done!

m_expressionInfo is only appended to by UnlinkedCodeBlock::addExpressionInfo().
UnlinkedCodeBlock::addExpressionInfo() is only called by BytecodeGenerator::emitExpressionInfo().
I don&apos;t see any calls to BytecodeGenerator::emitExpressionInfo() which serves the purpose of reserving the first entry of the Vector for some special purpose.

Hence, it is legal for UnlinkedCodeBlock::expressionRangeForBytecodeOffset()&apos;s binary search to produce a vector index of 0.  In other words, the assertion is invalid.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896671</commentid>
    <comment_count>5</comment_count>
      <attachid>203637</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-03 17:43:37 -0700</bug_when>
    <thetext>Created attachment 203637
the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896677</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-03 18:01:50 -0700</bug_when>
    <thetext>&gt; I don&apos;t see any calls to BytecodeGenerator::emitExpressionInfo() which serves the purpose of reserving the first entry of the Vector for some special purpose.

The algorithm expects to compute a value for &quot;low&quot; that is one past the index you were looking for. If it computes 0, that means the index you were looking for wasn&apos;t found. It is, in fact, an error for the index not to be found. Every expression that can throw an exception should have a valid expressionInfo entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896726</commentid>
    <comment_count>7</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-03 21:31:38 -0700</bug_when>
    <thetext>Re-analyzing based on Geoff&apos;s feedback:

1. The bytecodes of the unlinkedCodeBlock we&apos;re trying to find the range in are:

f#B44PHi:[0x104001000-&gt;0x1017ffc70, NoneFunctionCall]: 27 m_instructions; 216 bytes; 1 parameter(s); 8 callee register(s); 0 variable(s)

Source: function g() { // if (this != 10) f(); if (this != 10) f(); }

[   0] enter
[   1] convert_this	 r-7
[   4] neq		 r0, r-7, Int32: 10(@k0)
[   8] jfalse		 r0, 17(-&gt;25)
[  11] get_scoped_var	 r0, 1, 0
[  16] mov		 r1, Undefined(@k1)
[  19] call	 r0, 1, 8 status(Not Set)
[  25] ret		 Undefined(@k1)

Constants:
   k0 = Int32: 10
   k1 = Undefined

2. The bytecodeOffset we&apos;re looking up is:

(gdb) p bytecodeOffset
$8 = 4

We should not be throwing from bytecodeOffset 4.  Next step, find out where that bad bytecodeOffset is coming from.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896746</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-03 23:15:58 -0700</bug_when>
    <thetext>Here&apos;s a dump (using printfs I added) of the frame info as seen by Interpeter::getStackTrace():

  === frame[0] 0x105bfbf88
     name &apos;g&apos;
     isInlineCallFrame 0
     codeBlock 0x10480cc00
     unlinkedCodeBlock 0x10229f870
     jitType 4 &lt;DFGJIT&gt;
     callerFrame 0x105bfbf40
     isHostFlag 0
     argCount.Tag 0 0
     bytecodeOffset 4 4
     lineOffset 2
     lineNo 4
  === END frame[0] 0x105bfbf88
  === frame[1] 0x105bfbf40
     name &apos;g&apos;
     isInlineCallFrame 0
     codeBlock 0x10480cc00
     unlinkedCodeBlock 0x10229f870
     jitType 4 &lt;DFGJIT&gt;
     callerFrame 0x105bfbef8
     isHostFlag 0
     argCount.Tag 1 1
     bytecodeOffset 19 13
     lineOffset 2
     lineNo 4
  === END frame[1] 0x105bfbf40
  …

Frame 0 is the top frame.  Frame 1 is the caller frame of frame 0.  Frame 2 onward all resemble Frame 1.

The difference between Frame 0 and Frame 1 is that frame 0 has a codeOriginIndex of 0 (in the argCount tag field) and frame 1 has a codeOriginIndex of 1.  The result is that frame 0 has a bytecodeOffset of 4 instead of 19 like the other frames.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896790</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-06-04 02:09:18 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; The difference between Frame 0 and Frame 1 is that frame 0 has a codeOriginIndex of 0 (in the argCount tag field) and frame 1 has a codeOriginIndex of 1.  The result is that frame 0 has a bytecodeOffset of 4 instead of 19 like the other frames.

The bytecodeOffset of 4 is legit.  Here&apos;s the stack trace of when Interpreter::getStackTrace() is called:

(gdb) bt
#0  JSC::Interpreter::getStackTrace (vm=0x101807e00, results=@0x7fff5fbfdaa8, maxStackSize=18446744073709551615) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/interpreter/Interpreter.cpp:657
#1  0x00000001002d7209 in JSC::Interpreter::addStackTraceIfNecessary (callFrame=0x105dfbf88, error={u = {asInt64 = 4319739680, ptr = 0x10179ff20, asBits = {payload = 24772384, tag = 1}}}) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/interpreter/Interpreter.cpp:749
#2  0x00000001002a5d45 in JSC::throwError (exec=0x105dfbf88, error=0x10179ff20) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/runtime/Error.cpp:165
#3  0x00000001002a7cec in JSC::throwStackOverflowError (exec=0x105dfbf88) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/runtime/ExceptionHelpers.cpp:141
#4  0x00000001002d9874 in JSC::Interpreter::executeCall (this=0x102602a00, callFrame=0x105dfbf88, function=0x1013efe30, callType=JSC::CallTypeHost, callData=@0x7fff5fbfddd0, thisValue={u = {asInt64 = 4319805104, ptr = 0x1017afeb0, asBits = {payload = 24837808, tag = 1}}}, args=@0x7fff5fbfdd98) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/interpreter/Interpreter.cpp:1086
#5  0x00000001000fcc2a in JSC::call (exec=0x105dfbf88, functionObject={u = {asInt64 = 4315872816, ptr = 0x1013efe30, asBits = {payload = 20905520, tag = 1}}}, callType=JSC::CallTypeHost, callData=@0x7fff5fbfddd0, thisValue={u = {asInt64 = 4319805104, ptr = 0x1017afeb0, asBits = {payload = 24837808, tag = 1}}}, args=@0x7fff5fbfdd98) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/runtime/CallData.cpp:40
#6  0x0000000100380983 in callDefaultValueFunction (exec=0x105dfbf88, object=0x1017afeb0, propertyName={m_impl = 0x102301770, static NotAnIndex = 4294967295}) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/runtime/JSObject.cpp:1344
#7  0x000000010037b6dd in JSC::JSObject::defaultValue (object=0x1017afeb0, exec=0x105dfbf88, hint=JSC::NoPreference) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/runtime/JSObject.cpp:1372
#8  0x0000000100348394 in JSC::JSObject::toPrimitive (this=0x1017afeb0, exec=0x105dfbf88, preferredType=JSC::NoPreference) at JSObject.h:1402
#9  0x0000000100347e4f in JSC::JSCell::toPrimitive (this=0x1017afeb0, exec=0x105dfbf88, preferredType=JSC::NoPreference) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/runtime/JSCell.cpp:145
#10 0x00000001001689f8 in JSC::JSValue::toPrimitive (this=0x7fff5fbfe038, exec=0x105dfbf88, preferredType=JSC::NoPreference) at JSCJSValueInlines.h:554
#11 0x0000000100207386 in JSC::JSValue::equalSlowCaseInline (exec=0x105dfbf88, v1={u = {asInt64 = 4319805104, ptr = 0x1017afeb0, asBits = {payload = 24837808, tag = 1}}}, v2={u = {asInt64 = -281474976710646, ptr = 0xffff00000000000a, asBits = {payload = 10, tag = -65536}}}) at JSCJSValueInlines.h:734
#12 0x0000000100202f58 in operationCompareEq (exec=0x105dfbf88, encodedOp1=4319805104, encodedOp2=-281474976710646) at /Volumes/Data/ws7/OpenSource/Source/JavaScriptCore/dfg/DFGOperations.cpp:996
#13 0x000039e7c1c01804 in ?? ()
…

The test case looks like this:
=== BEGIN ============
function test() {
    var f = function g() {
        if (this != 10) f();
    };
    var a = f();
}

test();
=== END ============

The &quot;(this != 10)&quot; triggers a recursion into the interpreter to presumably convert &quot;this&quot; into a number for the comparison.  That recursion entry into the interpreter triggered a StackOverflowError, but our BytecodeGenerator is not expecting an exception thrown from op_neq.  Hence, we did not generate a expression range for that bytecode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896935</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-06-04 09:53:48 -0700</bug_when>
    <thetext>&gt; The &quot;(this != 10)&quot; triggers a recursion into the interpreter to presumably convert &quot;this&quot; into a number for the comparison.

Basically any expression can trigger recursion in this way, due to type coercion. I wonder if we should just emitExpressionInfo() unconditionally at the head of every node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907498</commentid>
    <comment_count>11</comment_count>
      <attachid>206419</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-10 17:57:35 -0700</bug_when>
    <thetext>Created attachment 206419
patch 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907499</commentid>
    <comment_count>12</comment_count>
      <attachid>206419</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-07-10 18:00:31 -0700</bug_when>
    <thetext>Comment on attachment 206419
patch 2

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

r=me, but i want to know why you have made the change to BinaryOpNode::emitBytecode -- i can&apos;t see why it would be necessary and it would have  a significant memory impact

&gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:1099
&gt; +    generator.emitExpressionInfo(startOffset(), 0, 0, lineNo(), lineStartOffset());

Why is this necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907524</commentid>
    <comment_count>13</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-10 22:40:33 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:1099
&gt; &gt; +    generator.emitExpressionInfo(startOffset(), 0, 0, lineNo(), lineStartOffset());
&gt; 
&gt; Why is this necessary?

It was added to provide expression info for the test case that originated this bug.  However, per our offline conversation this is not the right thing to do.

Adding some quick instrumentation, I&apos;m seeing that adding expression range info for every BinaryOp node will result in a worst case increment of 295128 bytes (for 24594 entries).  This is based our benchmarking payloads (not sure which one as my instrumentation did not record the name of the benchmark).

For comparison, the worst case expression info memory use due to UnaryOp nodes is 12396 bytes (for 1033 entries) (also from the same benchmark).
 
Based on these results, I rethink the BinaryOp part of the patch and see what alternative I can come up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>907703</commentid>
    <comment_count>14</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-07-11 10:30:34 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; &gt; Source/JavaScriptCore/bytecompiler/NodesCodegen.cpp:1099
&gt; &gt; &gt; +    generator.emitExpressionInfo(startOffset(), 0, 0, lineNo(), lineStartOffset());
&gt; &gt; 
&gt; &gt; Why is this necessary?
&gt; 
&gt; It was added to provide expression info for the test case that originated this bug.  However, per our offline conversation this is not the right thing to do.
&gt; 
&gt; Adding some quick instrumentation, I&apos;m seeing that adding expression range info for every BinaryOp node will result in a worst case increment of 295128 bytes (for 24594 entries).  This is based our benchmarking payloads (not sure which one as my instrumentation did not record the name of the benchmark).
&gt; 
&gt; For comparison, the worst case expression info memory use due to UnaryOp nodes is 12396 bytes (for 1033 entries) (also from the same benchmark).
&gt; 
&gt; Based on these results, I rethink the BinaryOp part of the patch and see what alternative I can come up with.

A significant voice in my head is saying that we should just try using zlib to do an in memory compress of this data and then decompress it if we actually use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>910884</commentid>
    <comment_count>15</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-22 17:37:05 -0700</bug_when>
    <thetext>The patch consists of 2 parts:
1. Adding ExpressionRangeInfo for BinaryOpNodes.  We know this adds some significant memory usage.
2. Adding ExpressionRangeInfo before calls to emitResolveBaseForPut() when in strict mode.

Will split the emitResolveBaseForPut() case into a separate bug: https://bugs.webkit.org/show_bug.cgi?id=118997.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911186</commentid>
    <comment_count>16</comment_count>
      <attachid>207364</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-23 17:31:03 -0700</bug_when>
    <thetext>Created attachment 207364
patch 3

Patch 3 adds expression info for 2 cases in BinaryOpNode::emit:
1. the strcat case
2. the general case

It does not add expression info for the &quot;compare with null&quot; case because that case cannot throw due to type coercion.  Hence, it does not needed the expression info.

Note: this bug original complains of an assertion failure.  That assertion was removed in http://trac.webkit.org/changeset/152494.  However, this patch does add 2 test cases to the fast/js/line-column-number.html layout test.  The fix in this patch is needed to provide more accurate line and column info for these 2 test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911191</commentid>
    <comment_count>17</comment_count>
      <attachid>207364</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-07-23 17:46:58 -0700</bug_when>
    <thetext>Comment on attachment 207364
patch 3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>911194</commentid>
    <comment_count>18</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2013-07-23 17:56:26 -0700</bug_when>
    <thetext>Thanks for the review.  This patch has passed the layout tests with no new failures.  Landed in r153073: &lt;http://trac.webkit.org/changeset/153073&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>203028</attachid>
            <date>2013-05-28 01:29:36 -0700</date>
            <delta_ts>2013-05-28 01:29:36 -0700</delta_ts>
            <desc>Test case</desc>
            <filename>assert_js.js</filename>
            <type>application/javascript</type>
            <size>109</size>
            <attacher name="Renata Hodovan">rhodovan.u-szeged</attacher>
            
              <data encoding="base64">ZnVuY3Rpb24gdGVzdCgpIHsKICAgIHZhciBmID0gZnVuY3Rpb24gZygpIHsKICAgICAgICBpZiAo
dGhpcyAhPSAxMCkgZigpOwogICAgfTsKICAgIHZhciBhID0gZigpOwp9Cgp0ZXN0KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203637</attachid>
            <date>2013-06-03 17:43:37 -0700</date>
            <delta_ts>2013-07-10 17:57:35 -0700</delta_ts>
            <desc>the patch.</desc>
            <filename>bug-116853.patch</filename>
            <type>text/plain</type>
            <size>1127</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMTQ0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDEzLTA2LTAzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZW1vdmVkIGludmFsaWQgYXNzZXJ0aW9uIGluIFVubGlua2VkQ29kZUJsb2NrOjpleHByZXNzaW9u
UmFuZ2VGb3JCeXRlY29kZU9mZnNldCgpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTE2ODUzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6ZXhwcmVzc2lvblJhbmdlRm9yQnl0ZWNvZGVP
ZmZzZXQpOgorCiAyMDEzLTA2LTAzICBSb2dlciBGb25nICA8cm9nZXJfZm9uZ0BhcHBsZS5jb20+
CiAKICAgICAgICAgTnVrZSBWUzIwMDUgZmlsZXMgZnJvbSB0aGUgdHJlZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkocmV2aXNpb24gMTUxMTQ0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Vu
bGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDcgKzI3Niw2IEBAIHZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUYKICAgICAgICAgICAgIGhpZ2gg
PSBtaWQ7CiAgICAgfQogCi0gICAgQVNTRVJUKGxvdyk7CiAgICAgaWYgKCFsb3cpIHsKICAgICAg
ICAgc3RhcnRPZmZzZXQgPSAwOwogICAgICAgICBlbmRPZmZzZXQgPSAwOwo=
</data>
<flag name="review"
          id="225097"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>206419</attachid>
            <date>2013-07-10 17:57:35 -0700</date>
            <delta_ts>2013-07-23 17:31:03 -0700</delta_ts>
            <desc>patch 2</desc>
            <filename>bug-116853.patch</filename>
            <type>text/plain</type>
            <size>3592</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUyNTU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBA
CisyMDEzLTA3LTEwICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRlZCBzb21lIG1vZGUgRXhwcmVzc2lvblJhbmdlSW5mbyBjb3ZlcmFnZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNjg1My4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAxLiBFbWl0IGV4cHJlc3Npb24g
aW5mbyBmb3IgQmluYXJ5T3BOb2Rlcy4gVGhpcyBhZGRyZXNzZXMgdGhlIGNhc2UKKyAgICAgICAg
ICAgcmVwb3J0ZWQgaW4gdGhpcyBidWcuCisgICAgICAgIDIuIEVtaXQgZXhwcmVzc2lvbiBpbmZv
IGJlZm9yZSBjYWxscyB0byBlbWl0UmVzb2x2ZUJhc2VGb3JQdXQoKS4gVGhpcworICAgICAgICAg
ICBhZGRyZXNzZXMgZXhjZXB0aW9ucyB0aHJvd24gZHVlIHRvIGF0dGVtcHRlZCB3cml0ZXMgdG8g
YW4gdW5kZWNsYXJlZAorICAgICAgICAgICB2YXJpYWJsZSBpbiBzdHJpY3QgbW9kZS4gVGhpcyB3
YXMgZGVtb25zdHJhdGVkIGJ5IHRoZSBmb2xsb3dpbmcgdGVzdHM6CisgICAgICAgICAgICAgICBm
YXN0L2pzL2Jhc2ljLXN0cmljdC1tb2RlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvanMvbW96
aWxsYS9zdHJpY3QvOC43LjIuaHRtbAorICAgICAgICAzLiBSZS1pbnN0YXRlIHRoZSBhc3NlcnRp
b24gaW4gVW5saW5rZWRDb2RlQmxvY2s6OmV4cHJlc3Npb25SYW5nZUZvckJ5dGVjb2RlT2Zmc2V0
KCkKKyAgICAgICAgICAgdG8gZW5zdXJlIHdlIGFyZSBhbHdheXMgYWJsZSB0byBmaW5kIGFuIGFw
cHJvcHJpYXRlIEV4cHJlc3Npb25SYW5nZUluZm8uCisKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OlVubGlua2VkQ29kZUJsb2NrOjpleHBy
ZXNzaW9uUmFuZ2VGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkJpbmFyeU9wTm9kZTo6ZW1pdEJ5dGVjb2Rl
KToKKyAgICAgICAgKEpTQzo6QXNzaWduUmVzb2x2ZU5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAg
ICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKwogMjAxMy0wNy0wOSAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgR2FyZGVuaW5nIHRvIHVuYnJlYWsg
YnVpbGRzIG9uIHRoZSBXaW5kb3dzIGJvdC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTUyNDk1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjc3LDYgKzI3Nyw3IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxv
Y2s6OmV4cHJlc3Npb25SYW5nZUYKICAgICAgICAgICAgIGhpZ2ggPSBtaWQ7CiAgICAgfQogCisg
ICAgQVNTRVJUKGxvdyk7CiAgICAgaWYgKCFsb3cpCiAgICAgICAgIGxvdyA9IDE7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHJldmlzaW9uIDE1MjQ5NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5Niw2ICsxMDk2LDcg
QEAgUmVnaXN0ZXJJRCogQmluYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUoQgogewogICAgIE9wY29k
ZUlEIG9wY29kZUlEID0gdGhpcy0+b3Bjb2RlSUQoKTsKIAorICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oc3RhcnRPZmZzZXQoKSwgMCwgMCwgbGluZU5vKCksIGxpbmVTdGFydE9mZnNl
dCgpKTsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkICYmIG1fZXhwcjEtPmlzQWRkKCkgJiYg
bV9leHByMS0+cmVzdWx0RGVzY3JpcHRvcigpLmRlZmluaXRlbHlJc1N0cmluZygpKQogICAgICAg
ICByZXR1cm4gZW1pdFN0cmNhdChnZW5lcmF0b3IsIGRzdCk7CiAKQEAgLTEzNTksNiArMTM2MCw4
IEBAIFJlZ2lzdGVySUQqIEFzc2lnblJlc29sdmVOb2RlOjplbWl0Qnl0ZWMKICAgICB9CiAKICAg
ICBOb25sb2NhbFJlc29sdmVJbmZvIHJlc29sdmVWZXJpZmllcjsKKyAgICBpZiAoZ2VuZXJhdG9y
LmlzU3RyaWN0TW9kZSgpKQorICAgICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRp
dm90KCksIGRpdm90U3RhcnRPZmZzZXQoKSwgZGl2b3RFbmRPZmZzZXQoKSwgZGl2b3RMaW5lKCks
IGRpdm90TGluZVN0YXJ0KCkpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLmVtaXRSZXNvbHZlQmFzZUZvclB1dChnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHJlc29s
dmVSZXN1bHQsIG1faWRlbnQsIHJlc29sdmVWZXJpZmllcik7CiAgICAgaWYgKGRzdCA9PSBnZW5l
cmF0b3IuaWdub3JlZFJlc3VsdCgpKQogICAgICAgICBkc3QgPSAwOwpAQCAtMTczNyw2ICsxNzQw
LDggQEAgdm9pZCBGb3JJbk5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbgogICAgICAgICAg
ICAgcHJvcGVydHlOYW1lID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHByb3RlY3QgPSBwcm9wZXJ0eU5hbWU7CiAgICAgICAgICAgICBO
b25sb2NhbFJlc29sdmVJbmZvIHJlc29sdmVWZXJpZmllcjsKKyAgICAgICAgICAgIGlmIChnZW5l
cmF0b3IuaXNTdHJpY3RNb2RlKCkpCisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRFeHBy
ZXNzaW9uSW5mbyhkaXZvdCgpLCBkaXZvdFN0YXJ0T2Zmc2V0KCksIGRpdm90RW5kT2Zmc2V0KCks
IGRpdm90TGluZSgpLCBkaXZvdExpbmVTdGFydCgpKTsKICAgICAgICAgICAgIFJlZ2lzdGVySUQq
IGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNlRm9yUHV0KGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgcmVzb2x2ZVJlc3VsdCwgaWRlbnQsIHJlc29sdmVWZXJpZmllcik7CiAKICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgZGl2b3RTdGFydE9m
ZnNldCgpLCBkaXZvdEVuZE9mZnNldCgpLCBkaXZvdExpbmUoKSwgZGl2b3RMaW5lU3RhcnQoKSk7
Cg==
</data>
<flag name="review"
          id="228094"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207364</attachid>
            <date>2013-07-23 17:31:03 -0700</date>
            <delta_ts>2013-07-23 17:46:58 -0700</delta_ts>
            <desc>patch 3</desc>
            <filename>bug-116853b.patch</filename>
            <type>text/plain</type>
            <size>10648</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUzMDY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBA
CisyMDEzLTA3LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGRlZCBFeHByZXNzaW9uUmFuZ2VJbmZvIGZvciBCaW5hcnlPcE5vZGVzIHRoYXQgY2FuIHRocm93
IGV4Y2VwdGlvbnMKKyAgICAgICAgZHVlIHRvIHR5cGUgY29lcnNpb24uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY4NTMuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvTm9kZXND
b2RlZ2VuLmNwcDoKKyAgICAgICAgKEpTQzo6QmluYXJ5T3BOb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAtIEFkZGVkIGV4cHJlc3Npb24gaW5mbyBmb3IgdGhlIHN0cmNhdCBhbmQgdGhlIGdl
bmVyaWMgYmluYXJ5IG9wIGNhc2VzLgorICAgICAgICAgIEkgZGlkIG5vdCBhZGQgZXhwcmVzc2lv
biBpbmZvIGZvciB0aGUgImNvbXBhcmUgd2l0aCBudWxsIiBjYXNlIGJlY2F1c2UKKyAgICAgICAg
ICB0aGF0IGNvbXBhcmlzb24gY2Fubm90IHRyaWdnZXIgdHlwZSBjb2Vyc2lvbiwgYW5kIGhlbmNl
IGl0IHdvbid0IHRocm93CisgICAgICAgICAgYW55IGV4Y2VwdGlvbnMgYW5kIGRvZXNuJ3QgbmVl
ZCB0aGUgZXhwcmVzc2lvbiBpbmZvLgorCiAyMDEzLTA3LTIyICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGRlZCBhc3NlbWJseSBmaWxlcyB0
byBXaW5kb3dzIDY0LWJpdCBidWlsZHMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNTI5OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOTYsOCArMTA5NiwxMCBAQCBSZWdpc3RlcklEKiBCaW5hcnlPcE5v
ZGU6OmVtaXRCeXRlY29kZShCCiB7CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSB0aGlzLT5vcGNv
ZGVJRCgpOwogCi0gICAgaWYgKG9wY29kZUlEID09IG9wX2FkZCAmJiBtX2V4cHIxLT5pc0FkZCgp
ICYmIG1fZXhwcjEtPnJlc3VsdERlc2NyaXB0b3IoKS5kZWZpbml0ZWx5SXNTdHJpbmcoKSkKKyAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfYWRkICYmIG1fZXhwcjEtPmlzQWRkKCkgJiYgbV9leHByMS0+
cmVzdWx0RGVzY3JpcHRvcigpLmRlZmluaXRlbHlJc1N0cmluZygpKSB7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oc3RhcnRPZmZzZXQoKSwgMCwgMCwgbGluZU5vKCksIGxp
bmVTdGFydE9mZnNldCgpKTsKICAgICAgICAgcmV0dXJuIGVtaXRTdHJjYXQoZ2VuZXJhdG9yLCBk
c3QpOworICAgIH0KIAogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9uZXEpIHsKICAgICAgICAgaWYg
KG1fZXhwcjEtPmlzTnVsbCgpIHx8IG1fZXhwcjItPmlzTnVsbCgpKSB7CkBAIC0xMTE3LDYgKzEx
MTksNyBAQCBSZWdpc3RlcklEKiBCaW5hcnlPcE5vZGU6OmVtaXRCeXRlY29kZShCCiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUo
bGVmdCwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCByaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwog
ICAgIGJvb2wgd2FzVHlwZW9mID0gZ2VuZXJhdG9yLm1fbGFzdE9wY29kZUlEID09IG9wX3R5cGVv
ZjsKICAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKHJpZ2h0KTsKKyAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKHN0YXJ0T2Zmc2V0KCksIDAsIDAsIGxpbmVO
bygpLCBsaW5lU3RhcnRPZmZzZXQoKSk7CiAgICAgaWYgKHdhc1R5cGVvZiAmJiAob3Bjb2RlSUQg
PT0gb3BfbmVxIHx8IG9wY29kZUlEID09IG9wX25zdHJpY3RlcSkpIHsKICAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IHRtcCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICAg
ICAgaWYgKG9wY29kZUlEID09IG9wX25lcSkKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MzA2OCkKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisy
MDEzLTA3LTIzICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGRl
ZCBFeHByZXNzaW9uUmFuZ2VJbmZvIGZvciBCaW5hcnlPcE5vZGVzIHRoYXQgY2FuIHRocm93IGV4
Y2VwdGlvbnMKKyAgICAgICAgZHVlIHRvIHR5cGUgY29lcnNpb24uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY4NTMuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIHRlc3QgY2FzZSBmcm9t
IGJ1Z3ppbGxhIHdoaWNoIGV4ZXJjaXNlcyB0aGUgZ2VuZXJpYyBiaW5hcnkgb3AKKyAgICAgICAg
dHlwZSBjb2Vyc2lvbiBjYXNlLCBwbHVzIGFub3RoZXIgZm9yIGV4ZXJjaXNpbmcgdGhlIHN0cmNh
dCBjYXNlLgorCisgICAgICAgICogZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVk
LnR4dDoKKyAgICAgICAgKiBmYXN0L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoKKyAgICAg
ICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzOgorCiAyMDEz
LTA3LTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFRoZSBj
b21wdXRlZCB2YWx1ZXMgb2YgZml4IGxlbmd0aCBwYWRkaW5nIHNob3VsZCBiZSBzdWJwaXhlbCBw
cmVjaXNpb24gbGlrZSBtYXJnaW4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1
bW4tbnVtYmVycy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTUyOTk4KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9saW5lLWNvbHVtbi1udW1iZXJzLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNTAgQEAgT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQQogICAgIDIgICBldmFsIGF0IFtuYXRpdmUgY29kZV0KICAgICAzICAgZ2xv
YmFsIGNvZGUgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE1NTo1CiAKKy0tPiBDYXNlIDE5
IFN0YWNrIFRyYWNlOgorICAgIDAgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0
bWw6MTcwOjI2CisgICAgMSAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDox
NzA6MjYKKyAgICAyICAgdG9TdHJpbmcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE3MDoy
NgorICAgIDMgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcwOjI2Cisg
ICAgNCAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxNzA6MjYKKyAgICA1
ICAgdG9TdHJpbmcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE3MDoyNgorICAgIDYgICB0
b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcwOjI2CisgICAgNyAgIHRvU3Ry
aW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxNzA6MjYKKyAgICA4ICAgdG9TdHJpbmcg
YXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE3MDoyNgorICAgIDkgICB0b1N0cmluZyBhdCBs
aW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcwOjI2CisgICAgMTAgICB0b1N0cmluZyBhdCBsaW5l
LWNvbHVtbi1udW1iZXJzLmh0bWw6MTcwOjI2CisgICAgMTEgICB0b1N0cmluZyBhdCBsaW5lLWNv
bHVtbi1udW1iZXJzLmh0bWw6MTcwOjI2CisgICAgMTIgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmh0bWw6MTcwOjI2CisgICAgMTMgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1u
dW1iZXJzLmh0bWw6MTcwOjI2CisgICAgMTQgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1i
ZXJzLmh0bWw6MTcwOjI2CisgICAgMTUgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJz
Lmh0bWw6MTcwOjI2CisgICAgMTYgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0
bWw6MTcwOjI2CisgICAgMTcgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6
MTcwOjI2CisgICAgMTggICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcw
OjI2CisgICAgMTkgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTcwOjI2
CisKKy0tPiBDYXNlIDIwIFN0YWNrIFRyYWNlOgorICAgIDAgICBnIGF0IGxpbmUtY29sdW1uLW51
bWJlcnMuaHRtbDoxOTA6MTcKKyAgICAxICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6
MTkwOjMwCisgICAgMiAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE5MDozMAorICAg
IDMgICBnIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxOTA6MzAKKyAgICA0ICAgZyBhdCBs
aW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTkwOjMwCisgICAgNSAgIGcgYXQgbGluZS1jb2x1bW4t
bnVtYmVycy5odG1sOjE5MDozMAorICAgIDYgICBnIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRt
bDoxOTA6MzAKKyAgICA3ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTkwOjMwCisg
ICAgOCAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE5MDozMAorICAgIDkgICBnIGF0
IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxOTA6MzAKKyAgICAxMCAgIGcgYXQgbGluZS1jb2x1
bW4tbnVtYmVycy5odG1sOjE5MDozMAorICAgIDExICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJz
Lmh0bWw6MTkwOjMwCisgICAgMTIgICBnIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxOTA6
MzAKKyAgICAxMyAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE5MDozMAorICAgIDE0
ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0bWw6MTkwOjMwCisgICAgMTUgICBnIGF0IGxp
bmUtY29sdW1uLW51bWJlcnMuaHRtbDoxOTA6MzAKKyAgICAxNiAgIGcgYXQgbGluZS1jb2x1bW4t
bnVtYmVycy5odG1sOjE5MDozMAorICAgIDE3ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmh0
bWw6MTkwOjMwCisgICAgMTggICBnIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuaHRtbDoxOTA6MzAK
KyAgICAxOSAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5odG1sOjE5MDozMAorCiAtLT4gQ2Fz
ZSAxIFN0YWNrIFRyYWNlOgogICAgIDAgICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1i
ZXJzLmpzOjM6MjgKIApAQCAtMTgzLDYgKzIyNyw1MCBAQCBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBCiAgICAgMiAgIGV2YWwgYXQgW25hdGl2ZSBjb2RlXQogICAgIDMg
ICBnbG9iYWwgY29kZSBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjk2OjUKIAorLS0+IENhc2Ug
MTkgU3RhY2sgVHJhY2U6CisgICAgMCAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMu
anM6MTA5OjI2CisgICAgMSAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5
OjI2CisgICAgMiAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5OjI2Cisg
ICAgMyAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5OjI2CisgICAgNCAg
IHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5OjI2CisgICAgNSAgIHRvU3Ry
aW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5OjI2CisgICAgNiAgIHRvU3RyaW5nIGF0
IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5OjI2CisgICAgNyAgIHRvU3RyaW5nIGF0IGxpbmUt
Y29sdW1uLW51bWJlcnMuanM6MTA5OjI2CisgICAgOCAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1u
LW51bWJlcnMuanM6MTA5OjI2CisgICAgOSAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJl
cnMuanM6MTA5OjI2CisgICAgMTAgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpz
OjEwOToyNgorICAgIDExICAgdG9TdHJpbmcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMDk6
MjYKKyAgICAxMiAgIHRvU3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5OjI2Cisg
ICAgMTMgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEwOToyNgorICAgIDE0
ICAgdG9TdHJpbmcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMDk6MjYKKyAgICAxNSAgIHRv
U3RyaW5nIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTA5OjI2CisgICAgMTYgICB0b1N0cmlu
ZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEwOToyNgorICAgIDE3ICAgdG9TdHJpbmcgYXQg
bGluZS1jb2x1bW4tbnVtYmVycy5qczoxMDk6MjYKKyAgICAxOCAgIHRvU3RyaW5nIGF0IGxpbmUt
Y29sdW1uLW51bWJlcnMuanM6MTA5OjI2CisgICAgMTkgICB0b1N0cmluZyBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmpzOjEwOToyNgorCistLT4gQ2FzZSAyMCBTdGFjayBUcmFjZToKKyAgICAwICAg
ZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzoxNworICAgIDEgICBnIGF0IGxpbmUtY29s
dW1uLW51bWJlcnMuanM6MTI3OjMwCisgICAgMiAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5q
czoxMjc6MzAKKyAgICAzICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorICAg
IDQgICBnIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTI3OjMwCisgICAgNSAgIGcgYXQgbGlu
ZS1jb2x1bW4tbnVtYmVycy5qczoxMjc6MzAKKyAgICA2ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1i
ZXJzLmpzOjEyNzozMAorICAgIDcgICBnIGF0IGxpbmUtY29sdW1uLW51bWJlcnMuanM6MTI3OjMw
CisgICAgOCAgIGcgYXQgbGluZS1jb2x1bW4tbnVtYmVycy5qczoxMjc6MzAKKyAgICA5ICAgZyBh
dCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorICAgIDEwICAgZyBhdCBsaW5lLWNvbHVt
bi1udW1iZXJzLmpzOjEyNzozMAorICAgIDExICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpz
OjEyNzozMAorICAgIDEyICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorICAg
IDEzICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorICAgIDE0ICAgZyBhdCBs
aW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorICAgIDE1ICAgZyBhdCBsaW5lLWNvbHVtbi1u
dW1iZXJzLmpzOjEyNzozMAorICAgIDE2ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEy
NzozMAorICAgIDE3ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorICAgIDE4
ICAgZyBhdCBsaW5lLWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorICAgIDE5ICAgZyBhdCBsaW5l
LWNvbHVtbi1udW1iZXJzLmpzOjEyNzozMAorCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0
cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1jb2x1
bW4tbnVtYmVycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvbGluZS1j
b2x1bW4tbnVtYmVycy5odG1sCShyZXZpc2lvbiAxNTI5OTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2pzL2xpbmUtY29sdW1uLW51bWJlcnMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
NyBAQCB0ZXN0SWQgPSAwOwogZnVuY3Rpb24gcHJpbnRTdGFjayhzdGFja1RyYWNlKSB7CiAgICAg
ZGVidWcoIi0tPiBDYXNlICIgKyB0ZXN0SWQgKyAiIFN0YWNrIFRyYWNlOiIpCiAgICAgc3RhY2tU
cmFjZSA9IHN0YWNrVHJhY2Uuc3BsaXQoIlxuIik7Ci0gICAgdmFyIGxlbmd0aCA9IE1hdGgubWlu
KHN0YWNrVHJhY2UubGVuZ3RoLCAxMDApOworICAgIHZhciBsZW5ndGggPSBNYXRoLm1pbihzdGFj
a1RyYWNlLmxlbmd0aCwgMjApOwogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKysp
IHsKICAgICAgICAgdmFyIGluZGV4T2ZBdCA9IHN0YWNrVHJhY2VbaV0uaW5kZXhPZignQCcpCiAg
ICAgICAgIHZhciBpbmRleE9mTGFzdFNsYXNoID0gc3RhY2tUcmFjZVtpXS5sYXN0SW5kZXhPZign
LycpOwpAQCAtMTYxLDYgKzE2MSw0MyBAQCBldmFsKCJcbiIgKwogIiIpOwogPC9zY3JpcHQ+CiAK
KzwhLS0gQ2FzZSAxOTogQmluYXJ5IG9wIHdpdGggdHlwZSBjb2Vyc2lvbiBvbiBzdHJjYXQuIC0t
PgorPHNjcmlwdD50ZXN0SWQrKzs8L3NjcmlwdD4KKzxzY3JpcHQ+Cit0cnkgeworICAgIHRlc3RP
YmoxOSA9IHsKKyAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkgIHsKKyAgICAgICAgICAgIHZh
ciByZXN1bHQgPSAoIkhlbGxvICIgKyAiV29ybGQiKSArIHRoaXM7CisgICAgICAgICAgICBiID0g
NTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIHJ1bjog
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICByZXR1cm4gdGVzdE9iajE5LnRvU3RyaW5nKCk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIHRlc3RPYmoxOS5ydW4oKTsKK30gY2F0Y2goZSkgeworICAg
IHByaW50U3RhY2soZS5zdGFjayk7Cit9Cis8L3NjcmlwdD4KKworPCEtLSBDYXNlIDIwOiBCaW5h
cnlPcCB3aXRoIHR5cGUgY29lcnNpb24gb24gY29tcGFyaXNvbi4gLS0+Cis8c2NyaXB0PnRlc3RJ
ZCsrOzwvc2NyaXB0PgorPHNjcmlwdD4KK3RyeSB7CisgICAgZnVuY3Rpb24gdGVzdDIwKCkgewor
ICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uIGcoKSB7CisgICAgICAgICAgICBpZiAodGhpcyAhPSAx
MCkgZigpOworICAgICAgICB9OworICAgICAgICB2YXIgYSA9IGYoKTsKKyAgICB9CisKKyAgICB0
ZXN0MjAoKTsKK30gY2F0Y2goZSkgeworICAgIHByaW50U3RhY2soZS5zdGFjayk7Cit9Cis8L3Nj
cmlwdD4KKwogPCEtLSBOb3cgZG8gaXQgYWxsIG92ZXIgd2l0aCBhIGxvYWRlZCBzY3JpcHQgZmls
ZS4gLS0+CiA8c2NyaXB0PnRlc3RJZCA9IDA7PC9zY3JpcHQ+CiAJPHNjcmlwdCBzcmM9InNjcmlw
dC10ZXN0cy9saW5lLWNvbHVtbi1udW1iZXJzLmpzIj48L3NjcmlwdD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL2xpbmUtY29sdW1uLW51bWJlcnMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvbGluZS1jb2x1bW4tbnVtYmVy
cy5qcwkocmV2aXNpb24gMTUyOTk4KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVz
dHMvbGluZS1jb2x1bW4tbnVtYmVycy5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAxLDQgKzEwMSwz
NyBAQCBldmFsKCJcbiIgKwogIn1cbiIgKwogIiIpOwogCisvLyBDYXNlIDE5OiBCaW5hcnkgb3Ag
d2l0aCB0eXBlIGNvZXJzaW9uIG9uIHN0cmNhdC4KK3Rlc3RJZCsrOwordHJ5IHsKKyAgICB0ZXN0
T2JqMTliID0geworICAgICAgICB0b1N0cmluZzogZnVuY3Rpb24oKSAgeworICAgICAgICAgICAg
dmFyIHJlc3VsdCA9ICgiSGVsbG8gIiArICJXb3JsZCIpICsgdGhpczsKKyAgICAgICAgICAgIGIx
OSA9IDU7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9LAorICAgICAgICBy
dW46IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcmV0dXJuIHRlc3RPYmoxOWIudG9TdHJpbmco
KTsKKyAgICAgICAgfQorICAgIH07CisgICAgdGVzdE9iajE5Yi5ydW4oKTsKK30gY2F0Y2goZSkg
eworICAgIHByaW50U3RhY2soZS5zdGFjayk7Cit9CisKKy8vIENhc2UgMjA6IEJpbmFyeU9wIHdp
dGggdHlwZSBjb2Vyc2lvbiBvbiBjb21wYXJpc29uLgordGVzdElkKys7Cit0cnkgeworICAgIGZ1
bmN0aW9uIHRlc3QyMGIoKSB7CisgICAgICAgIHZhciBmID0gZnVuY3Rpb24gZygpIHsKKyAgICAg
ICAgICAgIGlmICh0aGlzICE9IDEwKSBmKCk7CisgICAgICAgIH07CisgICAgICAgIHZhciBhID0g
ZigpOworICAgIH0KKworICAgIHRlc3QyMGIoKTsKK30gY2F0Y2goZSkgeworICAgIHByaW50U3Rh
Y2soZS5zdGFjayk7Cit9CisKIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>
<flag name="review"
          id="229150"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>