<?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>26590</bug_id>
          
          <creation_ts>2009-06-21 15:51:06 -0700</creation_ts>
          <short_desc>Support for String.trim(), String.trimLeft() and String.trimRight() methods</short_desc>
          <delta_ts>2013-08-13 03:13:15 -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>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ioseb Dzmanashvili">ioseb.dzmanashvili</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mathias</cc>
    
    <cc>oliver</cc>
    
    <cc>vanuatoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>127251</commentid>
    <comment_count>0</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-21 15:51:06 -0700</bug_when>
    <thetext>Just created patch for supporting trim(), trimLeft() and trimRight() methods.

For more details see: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim

String.trim() is part of the ECMAScript 5 standard, while String.trimLeft() and String.trimRight() are not...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127253</commentid>
    <comment_count>1</comment_count>
      <attachid>31624</attachid>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-21 15:55:22 -0700</bug_when>
    <thetext>Created attachment 31624
Implementation of all three methods(trim, leftTrim, rightTrim) and corresponding test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127256</commentid>
    <comment_count>2</comment_count>
      <attachid>31624</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-21 16:06:45 -0700</bug_when>
    <thetext>Comment on attachment 31624
Implementation of all three methods(trim, leftTrim, rightTrim) and corresponding test case.

&gt; +static inline int isWhiteSpace(int c) 
&gt; +{
&gt; +	return (c &gt;= 0x09 &amp;&amp; c &lt;= 0x0d) || c == 0x20;
&gt; +}
There is already an isWhitespace style function  
&gt; +static inline JSValue trimString(ExecState* exec, JSValue thisValue, bool left, bool right) 
&gt; +{		
&gt; +	JSString* sVal = thisValue.toThisJSString(exec);
toThisJSString may throw, so there should be an exception check here.

&gt; +	const UString&amp; s = sVal-&gt;value();
&gt; +		
&gt; +	int sSize = s.size();
&gt; +	if (!sSize)
&gt; +		return sVal;
&gt; +		
&gt; +	const UChar* sData = s.data();
&gt; +		
&gt; +	int start = 0;
&gt; +	int end = sSize - 1;
...		
&gt; +	return jsSubstring(exec, s, static_cast&lt;unsigned&gt;(start), static_cast&lt;unsigned&gt;((end - start) + 1));
&gt; +}
Rather than casting here just define start and end as unsigned in the first place
&gt; Index: LayoutTests/fast/js/resources/string-trim.js
&gt; ===================================================================
&gt; --- LayoutTests/fast/js/resources/string-trim.js	(revision 0)
&gt; +++ LayoutTests/fast/js/resources/string-trim.js	(revision 0)
&gt; @@ -0,0 +1,12 @@
&gt; +description(
&gt; +&quot;This test checks trim(), leftTrim() and rightTrim() functions.&quot;
&gt; +);
&gt; +
&gt; +shouldBe(&quot;&apos;					   &apos;.trim()&quot;,          &quot;&apos;&apos;&quot;);
&gt; +shouldBe(&quot;&apos;					   &apos;.trimLeft()&quot;,      &quot;&apos;&apos;&quot;);
&gt; +shouldBe(&quot;&apos;					   &apos;.trimRight()&quot;,     &quot;&apos;&apos;&quot;);
&gt; +shouldBe(&quot;&apos;		foo bar			   &apos;.trim()&quot;,      &quot;&apos;foo bar&apos;&quot;);
&gt; +shouldBe(&quot;&apos;		foo bar			   &apos;.trimLeft()&quot;,  &quot;&apos;foo bar			   &apos;&quot;);
&gt; +shouldBe(&quot;&apos;		foo bar			   &apos;.trimRight()&quot;, &quot;&apos;		foo bar&apos;&quot;);

You should test non-space whitespace as well, \n, \t, \r, etc, also you should test trim.apply({}), etc</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127267</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-21 18:08:01 -0700</bug_when>
    <thetext>Looks really good. Thanks for taking this on!

The test case needs to cover a lot more cases, including the various characters that are and are not whitespace.

Also, we frown on the use of mysterious booleans. I think an enum TrimLeft, TrimRight, TrimBothLeftAndRight would work better than two booleans anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127480</commentid>
    <comment_count>4</comment_count>
      <attachid>31687</attachid>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-22 15:52:02 -0700</bug_when>
    <thetext>Created attachment 31687
String.trim(), String.trimLeft(), String.trimRight() patch update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127481</commentid>
    <comment_count>5</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-22 15:55:06 -0700</bug_when>
    <thetext>(In reply to comment #2)

Thank you Oliver!

I&apos;ve added tests for all whitespace characters that are recommended by Ecma 3.1 spec. Tests for *.call() and *.apply() methods are added as well.

&gt; (From update of attachment 31624 [review])
&gt; &gt; +static inline int isWhiteSpace(int c) 
&gt; &gt; +{
&gt; &gt; +	return (c &gt;= 0x09 &amp;&amp; c &lt;= 0x0d) || c == 0x20;
&gt; &gt; +}
&gt; There is already an isWhitespace style function  
&gt; &gt; +static inline JSValue trimString(ExecState* exec, JSValue thisValue, bool left, bool right) 
&gt; &gt; +{		
&gt; &gt; +	JSString* sVal = thisValue.toThisJSString(exec);
&gt; toThisJSString may throw, so there should be an exception check here.
&gt; 
&gt; &gt; +	const UString&amp; s = sVal-&gt;value();
&gt; &gt; +		
&gt; &gt; +	int sSize = s.size();
&gt; &gt; +	if (!sSize)
&gt; &gt; +		return sVal;
&gt; &gt; +		
&gt; &gt; +	const UChar* sData = s.data();
&gt; &gt; +		
&gt; &gt; +	int start = 0;
&gt; &gt; +	int end = sSize - 1;
&gt; ...             
&gt; &gt; +	return jsSubstring(exec, s, static_cast&lt;unsigned&gt;(start), static_cast&lt;unsigned&gt;((end - start) + 1));
&gt; &gt; +}
&gt; Rather than casting here just define start and end as unsigned in the first
&gt; place
&gt; &gt; Index: LayoutTests/fast/js/resources/string-trim.js
&gt; &gt; ===================================================================
&gt; &gt; --- LayoutTests/fast/js/resources/string-trim.js	(revision 0)
&gt; &gt; +++ LayoutTests/fast/js/resources/string-trim.js	(revision 0)
&gt; &gt; @@ -0,0 +1,12 @@
&gt; &gt; +description(
&gt; &gt; +&quot;This test checks trim(), leftTrim() and rightTrim() functions.&quot;
&gt; &gt; +);
&gt; &gt; +
&gt; &gt; +shouldBe(&quot;&apos;					   &apos;.trim()&quot;,          &quot;&apos;&apos;&quot;);
&gt; &gt; +shouldBe(&quot;&apos;					   &apos;.trimLeft()&quot;,      &quot;&apos;&apos;&quot;);
&gt; &gt; +shouldBe(&quot;&apos;					   &apos;.trimRight()&quot;,     &quot;&apos;&apos;&quot;);
&gt; &gt; +shouldBe(&quot;&apos;		foo bar			   &apos;.trim()&quot;,      &quot;&apos;foo bar&apos;&quot;);
&gt; &gt; +shouldBe(&quot;&apos;		foo bar			   &apos;.trimLeft()&quot;,  &quot;&apos;foo bar			   &apos;&quot;);
&gt; &gt; +shouldBe(&quot;&apos;		foo bar			   &apos;.trimRight()&quot;, &quot;&apos;		foo bar&apos;&quot;);
&gt; 
&gt; You should test non-space whitespace as well, \n, \t, \r, etc, also you should
&gt; test trim.apply({}), etc
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127487</commentid>
    <comment_count>6</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-22 16:01:32 -0700</bug_when>
    <thetext>(In reply to comment #4)

Thank you for positive response Darin!

I&apos;ve added more tests for all mentioned characters. 

&quot;Also, we frown on the use of mysterious booleans. I think an enum TrimLeft,
TrimRight, TrimBothLeftAndRight would work better than two booleans anyway.&quot;

Actually this is my first attempt to contribute code to the WebKit engine and I don&apos;t know if my code violates coding conventions.. if this is case I&apos;ll change code of course... these &quot;mysterious booleans&quot; are used in &quot;trimString()&quot; method that is used only internally by: trim(), trimLeft() and trimRight() methods and actually is not accessible from JavaScript.




&gt; Created an attachment (id=31687) [review]
&gt; String.trim(), String.trimLeft(), String.trimRight() patch update
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127498</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-22 16:46:25 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &quot;Also, we frown on the use of mysterious booleans. I think an enum TrimLeft,
&gt; TrimRight, TrimBothLeftAndRight would work better than two booleans anyway.&quot;
&gt; 
&gt; Actually this is my first attempt to contribute code to the WebKit engine and I
&gt; don&apos;t know if my code violates coding conventions. if this is case I&apos;ll change
&gt; code of course. these &quot;mysterious booleans&quot; are used in &quot;trimString()&quot; method
&gt; that is used only internally by: trim(), trimLeft() and trimRight() methods and
&gt; actually is not accessible from JavaScript.

Even inside the code, those booleans are unnecessarily vague, and an enum would work better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127506</commentid>
    <comment_count>8</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-22 17:06:55 -0700</bug_when>
    <thetext>(In reply to comment #7)

Thank you for quick and helpful response, I agree with you I&apos;ll update patch ASAP.

&gt; 
&gt; Even inside the code, those booleans are unnecessarily vague, and an enum would
&gt; work better.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127652</commentid>
    <comment_count>9</comment_count>
      <attachid>31724</attachid>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-23 12:25:43 -0700</bug_when>
    <thetext>Created attachment 31724
String.trim(), String.trimLeft(), String.trimRight() patch update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127656</commentid>
    <comment_count>10</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-23 12:33:14 -0700</bug_when>
    <thetext>(In reply to comment #7)

Darin,

I&apos;ve updated patch and removed those booleans from the code... I changed them with enum as you suggested.

&gt; 
&gt; Even inside the code, those booleans are unnecessarily vague, and an enum would
&gt; work better.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127667</commentid>
    <comment_count>11</comment_count>
      <attachid>31724</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-23 13:03:56 -0700</bug_when>
    <thetext>Comment on attachment 31724
String.trim(), String.trimLeft(), String.trimRight() patch update

Thanks very much for addressing my comments from the early version. I now read this even more closely and have some new comments.

I have doubts about is the isWhiteSpace function.

There is already an isWhiteSpace function in Lexer, an isStrWhiteSpace function in JSGlobalObjectFunctions, and WTF::Unicode::isSeparatorSpace.

I suspect that this new isWhiteSpace function is identical to WTF::Unicode::isSeparatorSpace -- could you check on that?

Also, I&apos;m not sure it&apos;s appropriate for the large isWhiteSpace function to be marked inline, and I suspect that the const int array ends up being re-created and initialized every time the function is called. None of this matters if we can just use isSeparatorSpace.

&gt; +        (JSC::):

Please don&apos;t leave a line like this in the ChangeLog, even if the prepare-ChangeLog script puts it there.

&gt; +static inline JSValue trimString(ExecState* exec, JSValue thisValue, TrimMode trimMode) 
&gt; +{		
&gt; +    JSString* sVal = thisValue.toThisJSString(exec);
&gt; +    const UString&amp; s = sVal-&gt;value();
&gt; +		
&gt; +    int sSize = s.size();
&gt; +    if (!sSize)
&gt; +        return sVal;
&gt; +		
&gt; +    const UChar* sData = s.data();
&gt; +		
&gt; +    int start = 0;
&gt; +    int end = sSize - 1;
&gt; +		
&gt; +    if (trimMode == TrimLeft || trimMode == TrimBothLeftAndRight) {
&gt; +        while (start &lt; sSize &amp;&amp; isWhiteSpace(sData[start])) {
&gt; +            start++;
&gt; +        }
&gt; +    }
&gt; +		
&gt; +    if(trimMode == TrimRight || trimMode == TrimBothLeftAndRight) {
&gt; +        while (end &gt;= start &amp;&amp; isWhiteSpace(sData[end])) {
&gt; +            end--;
&gt; +        }
&gt; +    }
&gt; +	
&gt; +    return jsSubstring(exec, s, static_cast&lt;unsigned&gt;(start), static_cast&lt;unsigned&gt;((end - start) + 1));
&gt; +}

I think the logic would be slightly clearer if end pointed past the last character instead of at the last character. You would have to say &quot;end - 1&quot; in the place you call isWhiteSpace, but otherwise it would be easier to read the function.

I suggest using unsigned instead of int for end, start, and sSize. You only need a signed int because of end being a pointer before the last character, I think. You could get rid of the type casts, then.

I think sSize could just be named size.

No braces around single line bodies of while. Need a space after if and before the open parenthesis.

This needs a special case to return sVal when start is 0 and end is sSize. I think it&apos;s common to call trim and not trim anything, and in that case we don&apos;t want to allocate a new JSString cell.

There is no need for the special case for a size of zero. The rest of the function already does the right thing for that case already, including the jsSubstring function which won&apos;t allocate anything for a zero-length string, and I don&apos;t think an empty string needs extra performance optimization.

&gt; +var successfullyParsed = true;
&gt; \ No newline at end of file

Please add the newline here.

I&apos;d like to see more test cases of strings that don&apos;t need to be trimmed, including characters that might seem to be spaces but don&apos;t qualify, such as control characters. If we can make the test run fast enough it might even be good to find a way to test many other characters to see they are not trimmed. I can&apos;t think of an efficient way to do it on all 2^21 characters, though, so you might have to be creative.

review- for now since I&apos;d like you to do at least some of the things I suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127699</commentid>
    <comment_count>12</comment_count>
      <attachid>31741</attachid>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-23 15:07:45 -0700</bug_when>
    <thetext>Created attachment 31741
String.trim(), String.trimLeft(), String.trimRight() patch update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127709</commentid>
    <comment_count>13</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-23 15:33:23 -0700</bug_when>
    <thetext>(In reply to comment #11)

Darin,

Thank you for detailed explanations and suggestions! I&apos;ve changed the code.

&gt; I have doubts about is the isWhiteSpace function.
&gt; 
&gt; There is already an isWhiteSpace function in Lexer, an isStrWhiteSpace function
&gt; in JSGlobalObjectFunctions, and WTF::Unicode::isSeparatorSpace.
&gt; 
&gt; I suspect that this new isWhiteSpace function is identical to
&gt; WTF::Unicode::isSeparatorSpace -- could you check on that?

I examined functions you mentioned before I wrote my own version. WTF::Unicode::isSeparatorSpace only checks if character is &quot;space&quot; and nothing more, I already tried the function before.

isStrWhiteSpace from JSGlobalObjectFunctions and isWhiteSpace from Lexer functions are not enough as far as they check very limited amount of possible whitespaces. Whitespace list I used in my own version is recommended by Ecma 3.1 spec.

&gt; Also, I&apos;m not sure it&apos;s appropriate for the large isWhiteSpace function to be
&gt; marked inline, and I suspect that the const int array ends up being re-created
&gt; and initialized every time the function is called. None of this matters if we
&gt; can just use isSeparatorSpace.

I changed function to be inline no more. I analyzed code more carefully and found that there were two ranges of characters - one from 0x09 to 0x0d and second 0x2000 to 0x200b, without these ranges there left very few whitespace characters so I changed implementation and made it similar to the function from JSGlobalObjectFunctions.. so array re-creation and re-initialization is not the case anymore I think.
 
&gt; &gt; +        (JSC::):
&gt; 
&gt; Please don&apos;t leave a line like this in the ChangeLog, even if the
&gt; prepare-ChangeLog script puts it there.

Done

&gt; I think the logic would be slightly clearer if end pointed past the last
&gt; character instead of at the last character. You would have to say &quot;end - 1&quot; in
&gt; the place you call isWhiteSpace, but otherwise it would be easier to read the
&gt; function.

Done
 
&gt; I suggest using unsigned instead of int for end, start, and sSize. You only
&gt; need a signed int because of end being a pointer before the last character, I
&gt; think. You could get rid of the type casts, then.

Done
 
&gt; I think sSize could just be named size.

Done
 
&gt; No braces around single line bodies of while. Need a space after if and before
&gt; the open parenthesis.

Done
 
&gt; This needs a special case to return sVal when start is 0 and end is sSize. I
&gt; think it&apos;s common to call trim and not trim anything, and in that case we don&apos;t
&gt; want to allocate a new JSString cell.

Done
 
&gt; There is no need for the special case for a size of zero. The rest of the
&gt; function already does the right thing for that case already, including the
&gt; jsSubstring function which won&apos;t allocate anything for a zero-length string,
&gt; and I don&apos;t think an empty string needs extra performance optimization.

Done
 
&gt; &gt; +var successfullyParsed = true;
&gt; &gt; \ No newline at end of file
&gt; 
&gt; Please add the newline here.

Done
 
&gt; I&apos;d like to see more test cases of strings that don&apos;t need to be trimmed,
&gt; including characters that might seem to be spaces but don&apos;t qualify, such as
&gt; control characters. If we can make the test run fast enough it might even be
&gt; good to find a way to test many other characters to see they are not trimmed. I
&gt; can&apos;t think of an efficient way to do it on all 2^21 characters, though, so you
&gt; might have to be creative.

Maybe I&apos;m wrong, but in test cases I&apos;m using whitespace character list recommended by Ecma 3.1 spec... other whitespace alike characters couldn&apos;t be treated as whitespace chars because characters are matched against predefined list.

Thank you for being responsive and helpful!

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127742</commentid>
    <comment_count>14</comment_count>
      <attachid>31741</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-23 17:02:36 -0700</bug_when>
    <thetext>Comment on attachment 31741
String.trim(), String.trimLeft(), String.trimRight() patch update

Looks better. Thanks again for working on it.

&gt; Index: JavaScriptCore/ChangeLog
&gt; ===================================================================
&gt; --- JavaScriptCore/ChangeLog	(revision 45008)
&gt; +++ JavaScriptCore/ChangeLog	(working copy)
&gt; @@ -1,3 +1,14 @@
&gt; +2009-06-23  Ioseb Dzmanashvili  &lt;ioseb.dzmanashvili@gmail.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        * runtime/StringPrototype.cpp:
&gt; +        (JSC::isWhiteSpace):
&gt; +        (JSC::trimString):
&gt; +        (JSC::stringProtoFuncTrim):
&gt; +        (JSC::stringProtoFuncTrimLeft):
&gt; +        (JSC::stringProtoFuncTrimRight):

You need to have a change log entry here, with comments explaining what you did, and quoting the URL and title of the bug. Look at other ChangeLog entries to see examples of how to do it. Ideallyou you have a separate comment for each function.

&gt; +bool isWhiteSpace(int c) 
&gt; +{	
&gt; +    switch (c) {
&gt; +        case 0x20:
&gt; +        case 0xa0:
&gt; +        case 0x1680:
&gt; +        case 0x180e:
&gt; +        case 0x2028:
&gt; +        case 0x2029:
&gt; +        case 0x202f:
&gt; +        case 0x205f:
&gt; +        case 0x3000:
&gt; +            return true;
&gt; +        default:
&gt; +            return c &gt;= 0x09 &amp;&amp; c &lt;= 0x0d || c &gt;= 0x2000 &amp;&amp; c &lt;= 0x200b || isSeparatorSpace(c);
&gt; +	}
&gt; +}

If this is used only within the file it should be marked &quot;static&quot; to give it internal linkage.

I don&apos;t understand what&apos;s going on with this function. It has the name &quot;isWhiteSpace&quot; which doesn&apos;t seem specific enough. Is there any difference between this and the isStrWhiteSpace function in JSGlobalObjectFunctions.h? Can you just use that function instead of adding your own?

&gt; +    if(trimMode == TrimRight || trimMode == TrimBothLeftAndRight) {

Need a space here as I mentioned before.

&gt; +    return jsSubstring(exec, s, static_cast&lt;unsigned&gt;(start), static_cast&lt;unsigned&gt;(end - start));

Please remove these unneeded static_cast.

review- because of the isWhiteSpace issue and lack of ChangeLog contents</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127868</commentid>
    <comment_count>15</comment_count>
      <attachid>31774</attachid>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-24 01:28:38 -0700</bug_when>
    <thetext>Created attachment 31774
String.trim(), String.trimLeft(), String.trimRight() patch update</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127870</commentid>
    <comment_count>16</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-24 01:37:23 -0700</bug_when>
    <thetext>(In reply to comment #14)

&gt; You need to have a change log entry here, with comments explaining what you
&gt; did, and quoting the URL and title of the bug. Look at other ChangeLog entries
&gt; to see examples of how to do it. Ideallyou you have a separate comment for each
&gt; function.

Done

&gt; If this is used only within the file it should be marked &quot;static&quot; to give it
&gt; internal linkage.

Done

&gt; I don&apos;t understand what&apos;s going on with this function. It has the name
&gt; &quot;isWhiteSpace&quot; which doesn&apos;t seem specific enough. Is there any difference
&gt; between this and the isStrWhiteSpace function in JSGlobalObjectFunctions.h? Can
&gt; you just use that function instead of adding your own?

As I mentioned in my previous comment &quot;isStrWhiteSpace&quot; function in JSGlobalObjectFunction checks passed character against very limited list of whitespace chars... that was the reason to implementing my own function. I&apos;ve nothing against existing functions but what they do is not really enough. 

&gt; &gt; +    if(trimMode == TrimRight || trimMode == TrimBothLeftAndRight) {
&gt; 
&gt; Need a space here as I mentioned before.

Done

&gt; &gt; +    return jsSubstring(exec, s, static_cast&lt;unsigned&gt;(start), static_cast&lt;unsigned&gt;(end - start));
&gt; 
&gt; Please remove these unneeded static_cast.
&gt; 
&gt; review- because of the isWhiteSpace issue and lack of ChangeLog contents
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127927</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2009-06-24 09:47:35 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; As I mentioned in my previous comment &quot;isStrWhiteSpace&quot; function in
&gt; JSGlobalObjectFunction checks passed character against very limited list of
&gt; whitespace chars.

Please cite an example of a particular character that your function return true for and isStrWhiteSpace returns false for. And if these functions are different, please change the name of your to make it clear why it&apos;s different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128016</commentid>
    <comment_count>18</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-24 15:24:53 -0700</bug_when>
    <thetext>(In reply to comment #17)

&gt; Please cite an example of a particular character that your function return true
&gt; for and isStrWhiteSpace returns false for. And if these functions are
&gt; different, please change the name of your to make it clear why it&apos;s different.

Darin,

I&apos;m very sorry, I wasn&apos;t careful enough.. problem was really in code I used to test capabilities of &quot;isStrWhiteSpace&quot;. Real problem is in one character &quot;\u200B&quot; - ZERO WIDTH SPACE (category Cf) for other white space characters &quot;isStrWhiteSpace&quot; works perfectly. Obviously I need to remove my own function(at least rewrite) and what would be your suggestion? one solution is to check this particular character in the &quot;while&quot; condition, second I think would be creating inline function that wraps &quot;isStrWhiteSpace()&quot; function and  &quot;\u200B&quot; character check, something like this:

&gt;static inline bool isCharWhiteSpace(int c) {
&gt; return isStrWhiteSpace(c) || c == 0x200b;
&gt;}

third one would ignoring this particular char.. but I thinks this solution is not suitable..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129017</commentid>
    <comment_count>19</comment_count>
      <attachid>31774</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-06-30 03:17:44 -0700</bug_when>
    <thetext>Comment on attachment 31774
String.trim(), String.trimLeft(), String.trimRight() patch update

r- per the above (unresolved) isWhiteSpace discussion.

My question would be why should isStrWhiteSpace not respect 0x200b?  If it should then we should just change isStrWhiteSpace.  If it shouldn&apos;t, then you should add your own function:

static inline bool isTrimableWhiteSpaceChar(int c)
{
    return isStrWhiteSpace(c) || c == 0x200b; // zero width space
}

or similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129074</commentid>
    <comment_count>20</comment_count>
    <who name="Ioseb Dzmanashvili">ioseb.dzmanashvili</who>
    <bug_when>2009-06-30 07:59:08 -0700</bug_when>
    <thetext>(In reply to comment #19)

Hi Eric,

Thank you for response.

&gt; My question would be why should isStrWhiteSpace not respect 0x200b?  If it
&gt; should then we should just change isStrWhiteSpace.

I&apos;m not sure about this... I don&apos;t know if &quot;0x200b&quot; should be included in isStrWhiteSpace function&apos;s implementation. I took these characters from Ecma 3.1 proposal for String.trim();

Here is the link to the PDF document: http://wiki.ecmascript.org/lib/exe/fetch.php?id=es3.1%3Atargeted_additions_to_array_string_object_date&amp;cache=cache&amp;media=es3.1:es31_stringobject.pdf

Source: http://wiki.ecmascript.org/doku.php?id=es3.1:targeted_additions_to_array_string_object_date

&gt; If it shouldn&apos;t, then you
&gt; should add your own function:
&gt; 
&gt; static inline bool isTrimableWhiteSpaceChar(int c)
&gt; {
&gt;     return isStrWhiteSpace(c) || c == 0x200b; // zero width space
&gt; }

Decision is up to you, I just need to know what to do next. I&apos;m waiting for response and I&apos;ll upload patch immediately.

Thank you again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153899</commentid>
    <comment_count>21</comment_count>
      <attachid>40996</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-10-10 19:48:12 -0700</bug_when>
    <thetext>Created attachment 40996
Support for String.trim(), String.trimLeft() and String.trimRight() methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153904</commentid>
    <comment_count>22</comment_count>
      <attachid>40996</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-10-10 20:44:08 -0700</bug_when>
    <thetext>Comment on attachment 40996
Support for String.trim(), String.trimLeft() and String.trimRight() methods

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153905</commentid>
    <comment_count>23</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-10-10 20:47:28 -0700</bug_when>
    <thetext>Committed r49423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>154314</commentid>
    <comment_count>24</comment_count>
    <who name="Vano Beridze">vanuatoo</who>
    <bug_when>2009-10-13 04:38:12 -0700</bug_when>
    <thetext>IMHO Ioseb Dzmanashvili should be mentioned in the patch as the original author of this enhacement.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31624</attachid>
            <date>2009-06-21 15:55:22 -0700</date>
            <delta_ts>2009-06-22 15:52:02 -0700</delta_ts>
            <desc>Implementation of all three methods(trim, leftTrim, rightTrim) and corresponding test case.</desc>
            <filename>StringTrimPatch.txt</filename>
            <type>text/plain</type>
            <size>5736</size>
            <attacher name="Ioseb Dzmanashvili">ioseb.dzmanashvili</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0OTIwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDYtMjEgIElvc2ViIER6
bWFuYXNodmlsaSAgPGlvc2ViLmR6bWFuYXNodmlsaUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmlzV2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OnRy
aW1TdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUcmltKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNUcmltUmlnaHQpOgorCiAyMDA5LTA2LTIxICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA0NDkxNikK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTUsNiArNTUsMTAgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90bwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1Vw
cGVyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsK
IHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29tcGFy
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAorc3Rh
dGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYpOworCQogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNCaWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7CiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxsKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKQEAgLTk3LDYgKzEwMSwxMSBAQCBjb25z
dCBDbGFzc0luZm8gU3RyaW5nUHJvdG90eXBlOjppbmZvID0gCiAgICAgdG9VcHBlckNhc2UgICAg
ICAgICAgIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlICAgICAgIERvbnRFbnVtfEZ1bmN0aW9u
ICAgICAgIDAKICAgICBsb2NhbGVDb21wYXJlICAgICAgICAgc3RyaW5nUHJvdG9GdW5jTG9jYWxl
Q29tcGFyZSAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMQogCisgICAgIyBtb3JlIGRldGFp
bHMgYXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vQ29yZV9KYXZhU2NyaXB0XzEu
NV9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL1RyaW0KKyAgICB0cmltICAgICAgICAg
ICAgICAgICAgc3RyaW5nUHJvdG9GdW5jVHJpbSAgICAgICAgICAgICAgRG9udEVudW18RnVuY3Rp
b24gICAgICAgMAorICAgIHRyaW1MZWZ0ICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNUcmlt
TGVmdCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgICAgdHJpbVJpZ2h0ICAg
ICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodCAgICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKKyAKICAgICAjIHRvTG9jYWxlTG93ZXJDYXNlIGFuZCB0b0xvY2FsZVVwcGVy
Q2FzZSBhcmUgY3VycmVudGx5IGlkZW50aWNhbCB0byB0b0xvd2VyQ2FzZSBhbmQgdG9VcHBlckNh
c2UKICAgICB0b0xvY2FsZUxvd2VyQ2FzZSAgICAgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNhc2Ug
ICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAogICAgIHRvTG9jYWxlVXBwZXJDYXNlICAg
ICBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCkBAIC0yMDQsNyArMjEzLDQxIEBAIHN0YXRpYyBpbmxpbmUgaW50IGxvY2FsZUNvbXBhcmUo
Y29uc3QgVVMKIHsKICAgICByZXR1cm4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCktPmNvbGxhdGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYS5kYXRhKCkpLCBhLnNpemUoKSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYi5kYXRhKCkpLCBiLnNpemUoKSk7CiB9CisJ
CitzdGF0aWMgaW5saW5lIGludCBpc1doaXRlU3BhY2UoaW50IGMpIAoreworCXJldHVybiAoYyA+
PSAweDA5ICYmIGMgPD0gMHgwZCkgfHwgYyA9PSAweDIwOworfQogCitzdGF0aWMgaW5saW5lIEpT
VmFsdWUgdHJpbVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBib29s
IGxlZnQsIGJvb2wgcmlnaHQpIAorewkJCisJSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9U
aGlzSlNTdHJpbmcoZXhlYyk7CisJY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKCk7CisJ
CQorCWludCBzU2l6ZSA9IHMuc2l6ZSgpOworCWlmICghc1NpemUpCisJCXJldHVybiBzVmFsOwor
CQkKKwljb25zdCBVQ2hhciogc0RhdGEgPSBzLmRhdGEoKTsKKwkJCisJaW50IHN0YXJ0ID0gMDsK
KwlpbnQgZW5kID0gc1NpemUgLSAxOworCQkKKwlpZiAobGVmdCkgeworCQl3aGlsZSAoc3RhcnQg
PCBzU2l6ZSAmJiBpc1doaXRlU3BhY2Uoc0RhdGFbc3RhcnRdKSkgeworCQkJc3RhcnQrKzsKKwkJ
fQorCX0KKwkJCisJaWYocmlnaHQpIHsKKwkJd2hpbGUgKGVuZCA+PSBzdGFydCAmJiBpc1doaXRl
U3BhY2Uoc0RhdGFbZW5kXSkpIHsKKwkJCWVuZC0tOworCQl9CisJfQorCQkKKwlyZXR1cm4ganNT
dWJzdHJpbmcoZXhlYywgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KChlbmQgLSBzdGFydCkgKyAxKSk7Cit9CisJCiBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNTdHJpbmcq
IHNvdXJjZVZhbCA9IHRoaXNWYWx1ZS50b1RoaXNKU1N0cmluZyhleGVjKTsKQEAgLTcwNSw3ICs3
NDgsMjIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvTAogICAgICAg
ICByZXR1cm4gc1ZhbDsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmluZyhidWZmZXIu
cmVsZWFzZUJ1ZmZlcigpLCBsZW5ndGgsIGZhbHNlKSk7CiB9Ci0KKwkKK0pTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCit7CisJcmV0dXJuIHRyaW1TdHJpbmco
ZXhlYywgdGhpc1ZhbHVlLCB0cnVlLCB0cnVlKTsKK30KKwkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQoreworCXJldHVybiB0cmltU3RyaW5nKGV4
ZWMsIHRoaXNWYWx1ZSwgdHJ1ZSwgZmFsc2UpOworfQorCQorSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQoreworCXJldHVybiB0cmltU3RyaW5nKGV4
ZWMsIHRoaXNWYWx1ZSwgZmFsc2UsIHRydWUpOworfQorCQogSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNTdHJpbmcqIHNWYWwg
PSB0aGlzVmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NDky
MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkg
QEAKKzIwMDktMDYtMjEgIElvc2ViIER6bWFuYXNodmlsaSAgPGlvc2ViLmR6bWFuYXNodmlsaUBn
bWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L2pzL3Jlc291cmNlcy9zdHJpbmctdHJpbS5qczogQWRkZWQuCisKIDIwMDktMDYt
MjEgIERyZXcgV2lsc29uICA8YXR3aWxzb25AZ29vZ2xlLmNvbT4KICAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9z
dHJpbmctdHJpbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNl
cy9zdHJpbmctdHJpbS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVz
b3VyY2VzL3N0cmluZy10cmltLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACitkZXNj
cmlwdGlvbigKKyJUaGlzIHRlc3QgY2hlY2tzIHRyaW0oKSwgbGVmdFRyaW0oKSBhbmQgcmlnaHRU
cmltKCkgZnVuY3Rpb25zLiIKKyk7CisKK3Nob3VsZEJlKCInCQkJCQkgICAnLnRyaW0oKSIsICAg
ICAgICAgICInJyIpOworc2hvdWxkQmUoIicJCQkJCSAgICcudHJpbUxlZnQoKSIsICAgICAgIicn
Iik7CitzaG91bGRCZSgiJwkJCQkJICAgJy50cmltUmlnaHQoKSIsICAgICAiJyciKTsKK3Nob3Vs
ZEJlKCInCQlmb28gYmFyCQkJICAgJy50cmltKCkiLCAgICAgICInZm9vIGJhciciKTsKK3Nob3Vs
ZEJlKCInCQlmb28gYmFyCQkJICAgJy50cmltTGVmdCgpIiwgICInZm9vIGJhcgkJCSAgICciKTsK
K3Nob3VsZEJlKCInCQlmb28gYmFyCQkJICAgJy50cmltUmlnaHQoKSIsICInCQlmb28gYmFyJyIp
OworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>
<flag name="review"
          id="16241"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31687</attachid>
            <date>2009-06-22 15:52:02 -0700</date>
            <delta_ts>2009-06-23 12:26:21 -0700</delta_ts>
            <desc>String.trim(), String.trimLeft(), String.trimRight() patch update</desc>
            <filename>StringTrimPatch.txt</filename>
            <type>text/plain</type>
            <size>11819</size>
            <attacher name="Ioseb Dzmanashvili">ioseb.dzmanashvili</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0OTYxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDYtMjIgIElvc2ViIER6
bWFuYXNodmlsaSAgPElvc2ViIER6bWFuYXNodmlsaT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6aXNXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpTQzo6dHJpbVN0cmluZyk6
CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RyaW0pOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNUcmltTGVmdCk6CisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RyaW1S
aWdodCk6CisKIDIwMDktMDYtMjEgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHJldmlzaW9uIDQ0OTYwKQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2
ICs1NSwxMCBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvCiBzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogCitzdGF0aWMgSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0oRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBK
U1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1
bmNUcmltUmlnaHQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0
Jik7CisJCiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JpZyhF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jU21hbGwoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIHN0cmluZ1Byb3RvRnVuY0JsaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwpAQCAtOTcsNiArMTAxLDExIEBAIGNvbnN0IENsYXNzSW5mbyBT
dHJpbmdQcm90b3R5cGU6OmluZm8gPSAKICAgICB0b1VwcGVyQ2FzZSAgICAgICAgICAgc3RyaW5n
UHJvdG9GdW5jVG9VcHBlckNhc2UgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAogICAg
IGxvY2FsZUNvbXBhcmUgICAgICAgICBzdHJpbmdQcm90b0Z1bmNMb2NhbGVDb21wYXJlICAgICBE
b250RW51bXxGdW5jdGlvbiAgICAgICAxCiAKKyAgICAjIG1vcmUgZGV0YWlscyBhdCBodHRwczov
L2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Db3JlX0phdmFTY3JpcHRfMS41X1JlZmVyZW5jZS9H
bG9iYWxfT2JqZWN0cy9TdHJpbmcvVHJpbQorICAgIHRyaW0gICAgICAgICAgICAgICAgICBzdHJp
bmdQcm90b0Z1bmNUcmltICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisg
ICAgdHJpbUxlZnQgICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0ICAgICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgICB0cmltUmlnaHQgICAgICAgICAgICAgc3Ry
aW5nUHJvdG9GdW5jVHJpbVJpZ2h0ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAor
IAogICAgICMgdG9Mb2NhbGVMb3dlckNhc2UgYW5kIHRvTG9jYWxlVXBwZXJDYXNlIGFyZSBjdXJy
ZW50bHkgaWRlbnRpY2FsIHRvIHRvTG93ZXJDYXNlIGFuZCB0b1VwcGVyQ2FzZQogICAgIHRvTG9j
YWxlTG93ZXJDYXNlICAgICBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZSAgICAgICBEb250RW51
bXxGdW5jdGlvbiAgICAgICAwCiAgICAgdG9Mb2NhbGVVcHBlckNhc2UgICAgIHN0cmluZ1Byb3Rv
RnVuY1RvVXBwZXJDYXNlICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKQEAgLTIwNCw3
ICsyMTMsODYgQEAgc3RhdGljIGlubGluZSBpbnQgbG9jYWxlQ29tcGFyZShjb25zdCBVUwogewog
ICAgIHJldHVybiBDb2xsYXRvcjo6dXNlckRlZmF1bHQoKS0+Y29sbGF0ZShyZWludGVycHJldF9j
YXN0PGNvbnN0IDo6VUNoYXIqPihhLmRhdGEoKSksIGEuc2l6ZSgpLCByZWludGVycHJldF9jYXN0
PGNvbnN0IDo6VUNoYXIqPihiLmRhdGEoKSksIGIuc2l6ZSgpKTsKIH0KKwkKK3N0YXRpYyBpbmxp
bmUgaW50IGlzV2hpdGVTcGFjZShpbnQgYykgCit7CQorICAgIGNvbnN0IGludCBjaGFyc1tdID0g
eworCSAgICAweDA5LCAgIC8vSE9SSVpPTlRBTCBUQUIKKwkgICAgMHgwYSwgICAvL0xJTkUgRkVF
RCBPUiBORVcgTElORQorCSAgICAweDBiLCAgIC8vVkVSVElDQUwgVEFCCisJICAgIDB4MGMsICAg
Ly9GT1JNRkVFRAorCSAgICAweDBkLCAgIC8vQ0FSUklBR0UgUkVUVVJOCisJICAgIDB4MjAsICAg
Ly9TUEFDRQorCSAgICAweGEwLCAgIC8vTk8tQlJFQUsgU1BBQ0UKKwkgICAgMHgxNjgwLCAvL09H
SEFNIFNQQUNFIE1BUksKKwkgICAgMHgxODBlLCAvL01PTkdPTElBTiBWT1dFTCBTRVBBUkFUT1IK
KwkgICAgMHgyMDAwLCAvL0VOIFFVQUQKKwkgICAgMHgyMDAxLCAvL0VNIFFVQUQKKwkgICAgMHgy
MDAyLCAvL0VOIFNQQUNFCisJICAgIDB4MjAwMywgLy9FTSBTUEFDRQorCSAgICAweDIwMDQsIC8v
VEhSRUUtUEVSLUVNIFNQQUNFCisJICAgIDB4MjAwNSwgLy9GT1VSLVBFUi1FTSBTUEFDRQorCSAg
ICAweDIwMDYsIC8vU0lYLVBFUi1FTSBTUEFDRQorCSAgICAweDIwMDcsIC8vRklHVVJFIFNQQUNF
CisJICAgIDB4MjAwOCwgLy9QVU5DVFVBVElPTiBTUEFDRQorCSAgICAweDIwMDksIC8vVEhJTiBT
UEFDRQorCSAgICAweDIwMGEsIC8vSEFJUiBTUEFDRQorCSAgICAweDIwMGIsIC8vWkVSTyBXSURU
SCBTUEFDRSAoY2F0ZWdvcnkgQ2YpCisJICAgIDB4MjAyOCwgLy9MSU5FIFNFUEFSQVRPUgorCSAg
ICAweDIwMjksIC8vUEFSQUdSQVBIIFNFUEFSQVRPUgorCSAgICAweDIwMmYsIC8vTkFSUk9XIE5P
LUJSRUFLIFNQQUNFCisJICAgIDB4MjA1ZiwgLy9NRURJVU0gTUFUSEVNQVRJQ0FMIFNQQUNFCisJ
ICAgIDB4MzAwMCAvL0lERU9HUkFQSElDIFNQQUNFCisgICAgfTsKKwkKKyAgICBpbnQgbGVuZ3Ro
ID0gc2l6ZW9mKGNoYXJzKSAvIHNpemVvZihpbnQpOworICAgIGludCBsZWZ0ID0gMDsKKyAgICBp
bnQgcmlnaHQgPSBsZW5ndGggLSAxOworICAgIGludCBtaWRkbGU7CisKKyAgICB3aGlsZSAobGVm
dCA8PSByaWdodCkgeworICAgICAgICBtaWRkbGUgPSAobGVmdCArIHJpZ2h0KSA+PiAxOworICAg
ICAgICBpZiAoYyA9PSBjaGFyc1ttaWRkbGVdKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgfSBlbHNlIGlmIChjID4gY2hhcnNbbWlkZGxlXSkgeworICAgICAgICAgICAgbGVmdCA9
IG1pZGRsZSArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByaWdodCA9IG1pZGRs
ZSAtIDE7CisgICAgICAgIH0KKyAgICB9CisJCisgICAgcmV0dXJuIDA7Cit9CiAKK3N0YXRpYyBp
bmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFs
dWUsIGJvb2wgbGVmdCwgYm9vbCByaWdodCkgCit7CQkKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRo
aXNWYWx1ZS50b1RoaXNKU1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBzID0gc1Zh
bC0+dmFsdWUoKTsKKwkJCisgICAgaW50IHNTaXplID0gcy5zaXplKCk7CisgICAgaWYgKCFzU2l6
ZSkKKyAgICAgICAgcmV0dXJuIHNWYWw7CisJCQorICAgIGNvbnN0IFVDaGFyKiBzRGF0YSA9IHMu
ZGF0YSgpOworCQkKKyAgICBpbnQgc3RhcnQgPSAwOworICAgIGludCBlbmQgPSBzU2l6ZSAtIDE7
CisJCQorICAgIGlmIChsZWZ0KSB7CisgICAgICAgIHdoaWxlIChzdGFydCA8IHNTaXplICYmIGlz
V2hpdGVTcGFjZShzRGF0YVtzdGFydF0pKSB7CisgICAgICAgICAgICBzdGFydCsrOworICAgICAg
ICB9CisgICAgfQorCQkKKyAgICBpZihyaWdodCkgeworICAgICAgICB3aGlsZSAoZW5kID49IHN0
YXJ0ICYmIGlzV2hpdGVTcGFjZShzRGF0YVtlbmRdKSkgeworICAgICAgICAgICAgZW5kLS07Cisg
ICAgICAgIH0KKyAgICB9CisJCisgICAgcmV0dXJuIGpzU3Vic3RyaW5nKGV4ZWMsIHMsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdGFydCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigoZW5kIC0gc3Rh
cnQpICsgMSkpOworfQorCQogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Jl
cGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTU3RyaW5nKiBzb3VyY2VWYWwgPSB0aGlzVmFsdWUu
dG9UaGlzSlNTdHJpbmcoZXhlYyk7CkBAIC03MDUsNyArNzkzLDIyIEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0wKICAgICAgICAgcmV0dXJuIHNWYWw7CiAgICAgcmV0
dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLnJlbGVhc2VCdWZmZXIoKSwgbGVuZ3Ro
LCBmYWxzZSkpOwogfQotCisJCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
VHJpbShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQoreworCXJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgdHJ1ZSwg
dHJ1ZSk7Cit9CisJCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxl
ZnQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKK3sKKwlyZXR1cm4gdHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIHRydWUsIGZh
bHNlKTsKK30KKwkKK0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmln
aHQoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKK3sKKwlyZXR1cm4gdHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIGZhbHNlLCB0
cnVlKTsKK30KKwkKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVy
Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKQogewogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvVGhpc0pTU3Ry
aW5nKGV4ZWMpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDQ5NjEpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMCBAQAorMjAwOS0wNi0yMiAgSW9zZWIg
RHptYW5hc2h2aWxpICA8SW9zZWIgRHptYW5hc2h2aWxpPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9qcy9yZXNvdXJjZXMvc3RyaW5nLXRy
aW0uanM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvc3RyaW5nLXRyaW0uaHRtbDogQWRkZWQu
CisKIDIwMDktMDYtMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvc3RyaW5nLXRyaW0uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3N0
cmluZy10cmltLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3N0cmlu
Zy10cmltLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3RyaW5nLXRyaW0uanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvc3RyaW5nLXRyaW0uanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvc3RyaW5nLXRyaW0u
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9zdHJpbmct
dHJpbS5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTAgQEAKK2Rlc2NyaXB0aW9uKCJUaGlz
IHRlc3QgY2hlY2tzIFN0cmluZy50cmltKCksIFN0cmluZy50cmltTGVmdCgpIGFuZCBTdHJpbmcu
dHJpbVJpZ2h0KCkgbWV0aG9kcy4iKTsKKworLy9yZWZlcmVuY2VzIHRvIHRyaW0oKSwgdHJpbUxl
ZnQoKSBhbmQgdHJpbVJpZ2h0KCkgZnVuY3Rpb25zIGZvciB0ZXN0aW5nIEZ1bmN0aW9uJ3MgKi5j
YWxsKCkgYW5kICouYXBwbHkoKSBtZXRob2RzCit2YXIgdHJpbSAgICAgICAgICAgID0gU3RyaW5n
LnByb3RvdHlwZS50cmltOwordmFyIHRyaW1MZWZ0ICAgICAgICA9IFN0cmluZy5wcm90b3R5cGUu
dHJpbUxlZnQ7Cit2YXIgdHJpbVJpZ2h0ICAgICAgID0gU3RyaW5nLnByb3RvdHlwZS50cmltUmln
aHQ7CisKK3ZhciB0ZXN0U3RyaW5nICAgICAgPSAnZm9vIGJhcic7Cit2YXIgdHJpbVN0cmluZyAg
ICAgID0gJyc7Cit2YXIgbGVmdFRyaW1TdHJpbmcgID0gJyc7Cit2YXIgcmlnaHRUcmltU3RyaW5n
ID0gJyc7Cit2YXIgd3NTdHJpbmcgICAgICAgID0gJyc7CisKKy8vd2hpdGVzcGFjZSBsaXN0IGZy
b20gTW96aWxsYSdzIHRlc3QgY2FzZQordmFyIHdoaXRlc3BhY2UgICAgICA9IFsKKyAgICB7cyA6
ICdcdTAwMDknLCB0IDogJ0hPUklaT05UQUwgVEFCJ30sCisgICAge3MgOiAnXHUwMDBBJywgdCA6
ICdMSU5FIEZFRUQgT1IgTkVXIExJTkUnfSwKKyAgICB7cyA6ICdcdTAwMEInLCB0IDogJ1ZFUlRJ
Q0FMIFRBQid9LAorICAgIHtzIDogJ1x1MDAwQycsIHQgOiAnRk9STUZFRUQnfSwKKyAgICB7cyA6
ICdcdTAwMEQnLCB0IDogJ0NBUlJJQUdFIFJFVFVSTid9LAorICAgIHtzIDogJ1x1MDAyMCcsIHQg
OiAnU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTAwQTAnLCB0IDogJ05PLUJSRUFLIFNQQUNFJ30sCisg
ICAge3MgOiAnXHUxNjgwJywgdCA6ICdPR0hBTSBTUEFDRSBNQVJLJ30sCisgICAge3MgOiAnXHUx
ODBFJywgdCA6ICdNT05HT0xJQU4gVk9XRUwgU0VQQVJBVE9SJ30sCisgICAge3MgOiAnXHUyMDAw
JywgdCA6ICdFTiBRVUFEJ30sCisgICAge3MgOiAnXHUyMDAxJywgdCA6ICdFTSBRVUFEJ30sCisg
ICAge3MgOiAnXHUyMDAyJywgdCA6ICdFTiBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwMycsIHQg
OiAnRU0gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDQnLCB0IDogJ1RIUkVFLVBFUi1FTSBTUEFD
RSd9LAorICAgIHtzIDogJ1x1MjAwNScsIHQgOiAnRk9VUi1QRVItRU0gU1BBQ0UnfSwKKyAgICB7
cyA6ICdcdTIwMDYnLCB0IDogJ1NJWC1QRVItRU0gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDcn
LCB0IDogJ0ZJR1VSRSBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwOCcsIHQgOiAnUFVOQ1RVQVRJ
T04gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDknLCB0IDogJ1RISU4gU1BBQ0UnfSwKKyAgICB7
cyA6ICdcdTIwMEEnLCB0IDogJ0hBSVIgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMkYnLCB0IDog
J05BUlJPVyBOTy1CUkVBSyBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjA1RicsIHQgOiAnTUVESVVN
IE1BVEhFTUFUSUNBTCBTUEFDRSd9LAorICAgIHtzIDogJ1x1MzAwMCcsIHQgOiAnSURFT0dSQVBI
SUMgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMjgnLCB0IDogJ0xJTkUgU0VQQVJBVE9SJ30sCisg
ICAge3MgOiAnXHUyMDI5JywgdCA6ICdQQVJBR1JBUEggU0VQQVJBVE9SJ30sCisgICAge3MgOiAn
XHUyMDBCJywgdCA6ICdaRVJPIFdJRFRIIFNQQUNFIChjYXRlZ29yeSBDZiknfQorXTsKKyAgICAK
K2ZvciAodmFyIGkgPSAwLCBvOyAobyA9IHdoaXRlc3BhY2VbaSsrXSk7KSB7CisgICAgd3NTdHJp
bmcgKz0gby5zOworfQorCit0cmltU3RyaW5nICAgICAgPSB3c1N0cmluZyAgICsgdGVzdFN0cmlu
ZyArIHdzU3RyaW5nOworbGVmdFRyaW1TdHJpbmcgID0gdGVzdFN0cmluZyArIHdzU3RyaW5nOyAg
IC8vdHJpbW1lZCBmcm9tIHRoZSBsZWZ0CityaWdodFRyaW1TdHJpbmcgPSB3c1N0cmluZyAgICsg
dGVzdFN0cmluZzsgLy90cmltbWVkIGZyb20gdGhlIHJpZ2h0CisgICAgCitzaG91bGRCZSgid3NT
dHJpbmcudHJpbSgpIiwgICAgICAiJyciKTsKK3Nob3VsZEJlKCJ3c1N0cmluZy50cmltTGVmdCgp
IiwgICInJyIpOworc2hvdWxkQmUoIndzU3RyaW5nLnRyaW1SaWdodCgpIiwgIicnIik7CisKK3No
b3VsZEJlKCJ0cmltU3RyaW5nLnRyaW0oKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7
CisKK3Nob3VsZEJlKCJ0cmltLmFwcGx5KHdzU3RyaW5nKSIsICAgICAgIicnIik7CitzaG91bGRC
ZSgidHJpbUxlZnQuYXBwbHkod3NTdHJpbmcpIiwgICInJyIpOworc2hvdWxkQmUoInRyaW1SaWdo
dC5hcHBseSh3c1N0cmluZykiLCAiJyciKTsKKworc2hvdWxkQmUoInRyaW0uY2FsbCh3c1N0cmlu
ZykiLCAgICAgICInJyIpOworc2hvdWxkQmUoInRyaW1MZWZ0LmNhbGwod3NTdHJpbmcpIiwgICIn
JyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5jYWxsKHdzU3RyaW5nKSIsICInJyIpOworCitzaG91
bGRCZSgidHJpbVN0cmluZy50cmltKCkiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOwor
c2hvdWxkQmUoInRyaW1TdHJpbmcudHJpbUxlZnQoKSIsICAibGVmdFRyaW1TdHJpbmciKTsKK3No
b3VsZEJlKCJ0cmltU3RyaW5nLnRyaW1SaWdodCgpIiwgInJpZ2h0VHJpbVN0cmluZyIpOworCitz
aG91bGRCZSgibGVmdFRyaW1TdHJpbmcudHJpbSgpIiwgICAgICAiJyIgKyB0ZXN0U3RyaW5nICsg
IiciKTsKK3Nob3VsZEJlKCJsZWZ0VHJpbVN0cmluZy50cmltTGVmdCgpIiwgICJsZWZ0VHJpbVN0
cmluZyIpOworc2hvdWxkQmUoImxlZnRUcmltU3RyaW5nLnRyaW1SaWdodCgpIiwgIiciICsgdGVz
dFN0cmluZyArICInIik7CisgICAgCitzaG91bGRCZSgicmlnaHRUcmltU3RyaW5nLnRyaW0oKSIs
ICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgicmlnaHRUcmltU3RyaW5n
LnRyaW1MZWZ0KCkiLCAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgicmlnaHRU
cmltU3RyaW5nLnRyaW1SaWdodCgpIiwgInJpZ2h0VHJpbVN0cmluZyIpOworICAgIAorc2hvdWxk
QmUoInRyaW0uY2FsbCh3c1N0cmluZykiLCAgICAgICInJyIpOworc2hvdWxkQmUoInRyaW1MZWZ0
LmNhbGwod3NTdHJpbmcpIiwgICInJyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5jYWxsKHdzU3Ry
aW5nKSIsICInJyIpOworICAgIAorc2hvdWxkQmUoInRyaW0uY2FsbCh0cmltU3RyaW5nKSIsICAg
ICAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgidHJpbUxlZnQuY2FsbCh0cmlt
U3RyaW5nKSIsICAibGVmdFRyaW1TdHJpbmciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuY2FsbCh0
cmltU3RyaW5nKSIsICJyaWdodFRyaW1TdHJpbmciKTsKKyAgICAKK3Nob3VsZEJlKCJ0cmltLmNh
bGwobGVmdFRyaW1TdHJpbmcpIiwgICAgICAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3Vs
ZEJlKCJ0cmltTGVmdC5jYWxsKGxlZnRUcmltU3RyaW5nKSIsICAibGVmdFRyaW1TdHJpbmciKTsK
K3Nob3VsZEJlKCJ0cmltUmlnaHQuY2FsbChsZWZ0VHJpbVN0cmluZykiLCAiJyIgKyB0ZXN0U3Ry
aW5nICsgIiciKTsKKyAgICAKK3Nob3VsZEJlKCJ0cmltLmNhbGwocmlnaHRUcmltU3RyaW5nKSIs
ICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgidHJpbUxlZnQuY2FsbChy
aWdodFRyaW1TdHJpbmcpIiwgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInRy
aW1SaWdodC5jYWxsKHJpZ2h0VHJpbVN0cmluZykiLCAicmlnaHRUcmltU3RyaW5nIik7CisgICAg
CitzaG91bGRCZSgidHJpbS5hcHBseSh3c1N0cmluZykiLCAgICAgICInJyIpOworc2hvdWxkQmUo
InRyaW1MZWZ0LmFwcGx5KHdzU3RyaW5nKSIsICAiJyciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQu
YXBwbHkod3NTdHJpbmcpIiwgIicnIik7CisgICAgCitzaG91bGRCZSgidHJpbS5hcHBseSh0cmlt
U3RyaW5nKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgidHJpbUxl
ZnQuYXBwbHkodHJpbVN0cmluZykiLCAgImxlZnRUcmltU3RyaW5nIik7CitzaG91bGRCZSgidHJp
bVJpZ2h0LmFwcGx5KHRyaW1TdHJpbmcpIiwgInJpZ2h0VHJpbVN0cmluZyIpOworICAgIAorc2hv
dWxkQmUoInRyaW0uYXBwbHkobGVmdFRyaW1TdHJpbmcpIiwgICAgICAiJyIgKyB0ZXN0U3RyaW5n
ICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5hcHBseShsZWZ0VHJpbVN0cmluZykiLCAgImxl
ZnRUcmltU3RyaW5nIik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmFwcGx5KGxlZnRUcmltU3RyaW5n
KSIsICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworICAgIAorc2hvdWxkQmUoInRyaW0uYXBwbHko
cmlnaHRUcmltU3RyaW5nKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRC
ZSgidHJpbUxlZnQuYXBwbHkocmlnaHRUcmltU3RyaW5nKSIsICAiJyIgKyB0ZXN0U3RyaW5nICsg
IiciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuYXBwbHkocmlnaHRUcmltU3RyaW5nKSIsICJyaWdo
dFRyaW1TdHJpbmciKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31724</attachid>
            <date>2009-06-23 12:25:43 -0700</date>
            <delta_ts>2009-06-23 15:07:45 -0700</delta_ts>
            <desc>String.trim(), String.trimLeft(), String.trimRight() patch update</desc>
            <filename>StringTrimPatch.txt</filename>
            <type>text/plain</type>
            <size>12165</size>
            <attacher name="Ioseb Dzmanashvili">ioseb.dzmanashvili</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ0OTk3KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMDktMDYtMjMgIElvc2ViIER6
bWFuYXNodmlsaSAgPGlvc2ViLmR6bWFuYXNodmlsaUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmxvY2FsZUNvbXBhcmUpOgorICAgICAgICAoSlNDOjpp
c1doaXRlU3BhY2UpOgorICAgICAgICAoSlNDOjopOgorICAgICAgICAoSlNDOjp0cmltU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgIChKU0M6OnN0
cmluZ1Byb3RvRnVuY1RyaW1MZWZ0KToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJp
bVJpZ2h0KToKKwogMjAwOS0wNi0yMyAgSm9lIE1hc29uICA8am9lLm1hc29uQHRvcmNobW9iaWxl
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFRyZWF0LgpJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNDQ5NjApCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDEwIEBAIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG8KIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNh
c2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0
aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBhcmUoRXhl
Y1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CiAKK3N0YXRpYyBK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqLCBKU09i
amVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1Zh
bHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmlu
Z1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0
IEFyZ0xpc3QmKTsKKwkKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9G
dW5jQmlnKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwog
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTbWFsbChFeGVjU3Rh
dGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jQmxpbmsoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CkBAIC05Nyw2ICsxMDEsMTEgQEAgY29uc3QgQ2xh
c3NJbmZvIFN0cmluZ1Byb3RvdHlwZTo6aW5mbyA9IAogICAgIHRvVXBwZXJDYXNlICAgICAgICAg
ICBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAg
ICAwCiAgICAgbG9jYWxlQ29tcGFyZSAgICAgICAgIHN0cmluZ1Byb3RvRnVuY0xvY2FsZUNvbXBh
cmUgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDEKIAorICAgICMgbW9yZSBkZXRhaWxzIGF0
IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL0VuL0NvcmVfSmF2YVNjcmlwdF8xLjVfUmVm
ZXJlbmNlL0dsb2JhbF9PYmplY3RzL1N0cmluZy9UcmltCisgICAgdHJpbSAgICAgICAgICAgICAg
ICAgIHN0cmluZ1Byb3RvRnVuY1RyaW0gICAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAg
ICAgIDAKKyAgICB0cmltTGVmdCAgICAgICAgICAgICAgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQg
ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAorICAgIHRyaW1SaWdodCAgICAgICAg
ICAgICBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCisgCiAgICAgIyB0b0xvY2FsZUxvd2VyQ2FzZSBhbmQgdG9Mb2NhbGVVcHBlckNhc2Ug
YXJlIGN1cnJlbnRseSBpZGVudGljYWwgdG8gdG9Mb3dlckNhc2UgYW5kIHRvVXBwZXJDYXNlCiAg
ICAgdG9Mb2NhbGVMb3dlckNhc2UgICAgIHN0cmluZ1Byb3RvRnVuY1RvTG93ZXJDYXNlICAgICAg
IERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKICAgICB0b0xvY2FsZVVwcGVyQ2FzZSAgICAgc3Ry
aW5nUHJvdG9GdW5jVG9VcHBlckNhc2UgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMApA
QCAtMjAzLDggKzIxMiw5MyBAQCBzdGF0aWMgaW5saW5lIFVTdHJpbmcgc3Vic3RpdHV0ZUJhY2ty
ZWZlCiBzdGF0aWMgaW5saW5lIGludCBsb2NhbGVDb21wYXJlKGNvbnN0IFVTdHJpbmcmIGEsIGNv
bnN0IFVTdHJpbmcmIGIpCiB7CiAgICAgcmV0dXJuIENvbGxhdG9yOjp1c2VyRGVmYXVsdCgpLT5j
b2xsYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgOjpVQ2hhcio+KGEuZGF0YSgpKSwgYS5zaXpl
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgOjpVQ2hhcio+KGIuZGF0YSgpKSwgYi5zaXplKCkp
OworfQkKKwkKK3N0YXRpYyBpbmxpbmUgaW50IGlzV2hpdGVTcGFjZShpbnQgYykgCit7CQorICAg
IGNvbnN0IGludCBjaGFyc1tdID0geworCSAgICAweDA5LCAgIC8vSE9SSVpPTlRBTCBUQUIKKwkg
ICAgMHgwYSwgICAvL0xJTkUgRkVFRCBPUiBORVcgTElORQorCSAgICAweDBiLCAgIC8vVkVSVElD
QUwgVEFCCisJICAgIDB4MGMsICAgLy9GT1JNRkVFRAorCSAgICAweDBkLCAgIC8vQ0FSUklBR0Ug
UkVUVVJOCisJICAgIDB4MjAsICAgLy9TUEFDRQorCSAgICAweGEwLCAgIC8vTk8tQlJFQUsgU1BB
Q0UKKwkgICAgMHgxNjgwLCAvL09HSEFNIFNQQUNFIE1BUksKKwkgICAgMHgxODBlLCAvL01PTkdP
TElBTiBWT1dFTCBTRVBBUkFUT1IKKwkgICAgMHgyMDAwLCAvL0VOIFFVQUQKKwkgICAgMHgyMDAx
LCAvL0VNIFFVQUQKKwkgICAgMHgyMDAyLCAvL0VOIFNQQUNFCisJICAgIDB4MjAwMywgLy9FTSBT
UEFDRQorCSAgICAweDIwMDQsIC8vVEhSRUUtUEVSLUVNIFNQQUNFCisJICAgIDB4MjAwNSwgLy9G
T1VSLVBFUi1FTSBTUEFDRQorCSAgICAweDIwMDYsIC8vU0lYLVBFUi1FTSBTUEFDRQorCSAgICAw
eDIwMDcsIC8vRklHVVJFIFNQQUNFCisJICAgIDB4MjAwOCwgLy9QVU5DVFVBVElPTiBTUEFDRQor
CSAgICAweDIwMDksIC8vVEhJTiBTUEFDRQorCSAgICAweDIwMGEsIC8vSEFJUiBTUEFDRQorCSAg
ICAweDIwMGIsIC8vWkVSTyBXSURUSCBTUEFDRSAoY2F0ZWdvcnkgQ2YpCisJICAgIDB4MjAyOCwg
Ly9MSU5FIFNFUEFSQVRPUgorCSAgICAweDIwMjksIC8vUEFSQUdSQVBIIFNFUEFSQVRPUgorCSAg
ICAweDIwMmYsIC8vTkFSUk9XIE5PLUJSRUFLIFNQQUNFCisJICAgIDB4MjA1ZiwgLy9NRURJVU0g
TUFUSEVNQVRJQ0FMIFNQQUNFCisJICAgIDB4MzAwMCAgLy9JREVPR1JBUEhJQyBTUEFDRQorICAg
IH07CisJCisgICAgaW50IGxlbmd0aCA9IHNpemVvZihjaGFycykgLyBzaXplb2YoaW50KTsKKyAg
ICBpbnQgbGVmdCA9IDA7CisgICAgaW50IHJpZ2h0ID0gbGVuZ3RoIC0gMTsKKyAgICBpbnQgbWlk
ZGxlOworCisgICAgd2hpbGUgKGxlZnQgPD0gcmlnaHQpIHsKKyAgICAgICAgbWlkZGxlID0gKGxl
ZnQgKyByaWdodCkgPj4gMTsKKyAgICAgICAgaWYgKGMgPT0gY2hhcnNbbWlkZGxlXSkgeworICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSBpZiAoYyA+IGNoYXJzW21pZGRsZV0p
IHsKKyAgICAgICAgICAgIGxlZnQgPSBtaWRkbGUgKyAxOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcmlnaHQgPSBtaWRkbGUgLSAxOworICAgICAgICB9CisgICAgfQorCQorICAgIHJl
dHVybiAwOwogfQogCitlbnVtIFRyaW1Nb2RlIHsKKyAgICBUcmltTGVmdCwKKyAgICBUcmltUmln
aHQsCisgICAgVHJpbUJvdGhMZWZ0QW5kUmlnaHQKK307CisJCitzdGF0aWMgaW5saW5lIEpTVmFs
dWUgdHJpbVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBUcmltTW9k
ZSB0cmltTW9kZSkgCit7CQkKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1RoaXNK
U1N0cmluZyhleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoKTsKKwkJ
CisgICAgaW50IHNTaXplID0gcy5zaXplKCk7CisgICAgaWYgKCFzU2l6ZSkKKyAgICAgICAgcmV0
dXJuIHNWYWw7CisJCQorICAgIGNvbnN0IFVDaGFyKiBzRGF0YSA9IHMuZGF0YSgpOworCQkKKyAg
ICBpbnQgc3RhcnQgPSAwOworICAgIGludCBlbmQgPSBzU2l6ZSAtIDE7CisJCQorICAgIGlmICh0
cmltTW9kZSA9PSBUcmltTGVmdCB8fCB0cmltTW9kZSA9PSBUcmltQm90aExlZnRBbmRSaWdodCkg
eworICAgICAgICB3aGlsZSAoc3RhcnQgPCBzU2l6ZSAmJiBpc1doaXRlU3BhY2Uoc0RhdGFbc3Rh
cnRdKSkgeworICAgICAgICAgICAgc3RhcnQrKzsKKyAgICAgICAgfQorICAgIH0KKwkJCisgICAg
aWYodHJpbU1vZGUgPT0gVHJpbVJpZ2h0IHx8IHRyaW1Nb2RlID09IFRyaW1Cb3RoTGVmdEFuZFJp
Z2h0KSB7CisgICAgICAgIHdoaWxlIChlbmQgPj0gc3RhcnQgJiYgaXNXaGl0ZVNwYWNlKHNEYXRh
W2VuZF0pKSB7CisgICAgICAgICAgICBlbmQtLTsKKyAgICAgICAgfQorICAgIH0KKwkKKyAgICBy
ZXR1cm4ganNTdWJzdHJpbmcoZXhlYywgcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KChlbmQgLSBzdGFydCkgKyAxKSk7Cit9CisJCiBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAg
SlNTdHJpbmcqIHNvdXJjZVZhbCA9IHRoaXNWYWx1ZS50b1RoaXNKU1N0cmluZyhleGVjKTsKQEAg
LTcwNSw3ICs3OTksMjIgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Rv
TAogICAgICAgICByZXR1cm4gc1ZhbDsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgVVN0cmlu
ZyhidWZmZXIucmVsZWFzZUJ1ZmZlcigpLCBsZW5ndGgsIGZhbHNlKSk7CiB9Ci0KKwkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0ZSogZXhlYywgSlNP
YmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCit7CisJcmV0dXJuIHRy
aW1TdHJpbmcoZXhlYywgdGhpc1ZhbHVlLCBUcmltQm90aExlZnRBbmRSaWdodCk7Cit9CisJCitK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhlY1N0YXRlKiBl
eGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK3sKKwly
ZXR1cm4gdHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1MZWZ0KTsKK30KKwkKK0pTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK3sKKwlyZXR1
cm4gdHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1SaWdodCk7Cit9CisJCiBKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9VcHBlckNhc2UoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKIHsKICAgICBK
U1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1RoaXNKU1N0cmluZyhleGVjKTsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDQ0OTk3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTAgQEAKKzIwMDktMDYtMjMgIElvc2ViIER6bWFuYXNodmlsaSAgPGlvc2Vi
LmR6bWFuYXNodmlsaUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9zdHJpbmctdHJpbS5qczogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9zdHJpbmctdHJpbS5odG1sOiBBZGRlZC4KKwogMjAwOS0w
Ni0yMyAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFksIGxheW91dCB0ZXN0cyBmaXguCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL3N0cmluZy10cmltLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9zdHJpbmctdHJpbS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9z
dHJpbmctdHJpbS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3N0cmluZy10cmltLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL3N0cmluZy10cmlt
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL3N0cmluZy10
cmltLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvc3Ry
aW5nLXRyaW0uanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACitkZXNjcmlwdGlvbigi
VGhpcyB0ZXN0IGNoZWNrcyBTdHJpbmcudHJpbSgpLCBTdHJpbmcudHJpbUxlZnQoKSBhbmQgU3Ry
aW5nLnRyaW1SaWdodCgpIG1ldGhvZHMuIik7CisKKy8vcmVmZXJlbmNlcyB0byB0cmltKCksIHRy
aW1MZWZ0KCkgYW5kIHRyaW1SaWdodCgpIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBGdW5jdGlvbidz
ICouY2FsbCgpIGFuZCAqLmFwcGx5KCkgbWV0aG9kcwordmFyIHRyaW0gICAgICAgICAgICA9IFN0
cmluZy5wcm90b3R5cGUudHJpbTsKK3ZhciB0cmltTGVmdCAgICAgICAgPSBTdHJpbmcucHJvdG90
eXBlLnRyaW1MZWZ0OwordmFyIHRyaW1SaWdodCAgICAgICA9IFN0cmluZy5wcm90b3R5cGUudHJp
bVJpZ2h0OworCit2YXIgdGVzdFN0cmluZyAgICAgID0gJ2ZvbyBiYXInOwordmFyIHRyaW1TdHJp
bmcgICAgICA9ICcnOwordmFyIGxlZnRUcmltU3RyaW5nICA9ICcnOwordmFyIHJpZ2h0VHJpbVN0
cmluZyA9ICcnOwordmFyIHdzU3RyaW5nICAgICAgICA9ICcnOworCisvL3doaXRlc3BhY2UgbGlz
dCBmcm9tIE1vemlsbGEncyB0ZXN0IGNhc2UKK3ZhciB3aGl0ZXNwYWNlICAgICAgPSBbCisgICAg
e3MgOiAnXHUwMDA5JywgdCA6ICdIT1JJWk9OVEFMIFRBQid9LAorICAgIHtzIDogJ1x1MDAwQScs
IHQgOiAnTElORSBGRUVEIE9SIE5FVyBMSU5FJ30sCisgICAge3MgOiAnXHUwMDBCJywgdCA6ICdW
RVJUSUNBTCBUQUInfSwKKyAgICB7cyA6ICdcdTAwMEMnLCB0IDogJ0ZPUk1GRUVEJ30sCisgICAg
e3MgOiAnXHUwMDBEJywgdCA6ICdDQVJSSUFHRSBSRVRVUk4nfSwKKyAgICB7cyA6ICdcdTAwMjAn
LCB0IDogJ1NQQUNFJ30sCisgICAge3MgOiAnXHUwMEEwJywgdCA6ICdOTy1CUkVBSyBTUEFDRSd9
LAorICAgIHtzIDogJ1x1MTY4MCcsIHQgOiAnT0dIQU0gU1BBQ0UgTUFSSyd9LAorICAgIHtzIDog
J1x1MTgwRScsIHQgOiAnTU9OR09MSUFOIFZPV0VMIFNFUEFSQVRPUid9LAorICAgIHtzIDogJ1x1
MjAwMCcsIHQgOiAnRU4gUVVBRCd9LAorICAgIHtzIDogJ1x1MjAwMScsIHQgOiAnRU0gUVVBRCd9
LAorICAgIHtzIDogJ1x1MjAwMicsIHQgOiAnRU4gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDMn
LCB0IDogJ0VNIFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDA0JywgdCA6ICdUSFJFRS1QRVItRU0g
U1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDUnLCB0IDogJ0ZPVVItUEVSLUVNIFNQQUNFJ30sCisg
ICAge3MgOiAnXHUyMDA2JywgdCA6ICdTSVgtUEVSLUVNIFNQQUNFJ30sCisgICAge3MgOiAnXHUy
MDA3JywgdCA6ICdGSUdVUkUgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDgnLCB0IDogJ1BVTkNU
VUFUSU9OIFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDA5JywgdCA6ICdUSElOIFNQQUNFJ30sCisg
ICAge3MgOiAnXHUyMDBBJywgdCA6ICdIQUlSIFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDJGJywg
dCA6ICdOQVJST1cgTk8tQlJFQUsgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwNUYnLCB0IDogJ01F
RElVTSBNQVRIRU1BVElDQUwgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTMwMDAnLCB0IDogJ0lERU9H
UkFQSElDIFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDI4JywgdCA6ICdMSU5FIFNFUEFSQVRPUid9
LAorICAgIHtzIDogJ1x1MjAyOScsIHQgOiAnUEFSQUdSQVBIIFNFUEFSQVRPUid9LAorICAgIHtz
IDogJ1x1MjAwQicsIHQgOiAnWkVSTyBXSURUSCBTUEFDRSAoY2F0ZWdvcnkgQ2YpJ30KK107Cisg
ICAgCitmb3IgKHZhciBpID0gMCwgbzsgKG8gPSB3aGl0ZXNwYWNlW2krK10pOykgeworICAgIHdz
U3RyaW5nICs9IG8uczsKK30KKwordHJpbVN0cmluZyAgICAgID0gd3NTdHJpbmcgICArIHRlc3RT
dHJpbmcgKyB3c1N0cmluZzsKK2xlZnRUcmltU3RyaW5nICA9IHRlc3RTdHJpbmcgKyB3c1N0cmlu
ZzsgICAvL3RyaW1tZWQgZnJvbSB0aGUgbGVmdAorcmlnaHRUcmltU3RyaW5nID0gd3NTdHJpbmcg
ICArIHRlc3RTdHJpbmc7IC8vdHJpbW1lZCBmcm9tIHRoZSByaWdodAorICAgIAorc2hvdWxkQmUo
IndzU3RyaW5nLnRyaW0oKSIsICAgICAgIicnIik7CitzaG91bGRCZSgid3NTdHJpbmcudHJpbUxl
ZnQoKSIsICAiJyciKTsKK3Nob3VsZEJlKCJ3c1N0cmluZy50cmltUmlnaHQoKSIsICInJyIpOwor
CitzaG91bGRCZSgidHJpbVN0cmluZy50cmltKCkiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAi
JyIpOworCitzaG91bGRCZSgidHJpbS5hcHBseSh3c1N0cmluZykiLCAgICAgICInJyIpOworc2hv
dWxkQmUoInRyaW1MZWZ0LmFwcGx5KHdzU3RyaW5nKSIsICAiJyciKTsKK3Nob3VsZEJlKCJ0cmlt
UmlnaHQuYXBwbHkod3NTdHJpbmcpIiwgIicnIik7CisKK3Nob3VsZEJlKCJ0cmltLmNhbGwod3NT
dHJpbmcpIiwgICAgICAiJyciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5jYWxsKHdzU3RyaW5nKSIs
ICAiJyciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuY2FsbCh3c1N0cmluZykiLCAiJyciKTsKKwor
c2hvdWxkQmUoInRyaW1TdHJpbmcudHJpbSgpIiwgICAgICAiJyIgKyB0ZXN0U3RyaW5nICsgIici
KTsKK3Nob3VsZEJlKCJ0cmltU3RyaW5nLnRyaW1MZWZ0KCkiLCAgImxlZnRUcmltU3RyaW5nIik7
CitzaG91bGRCZSgidHJpbVN0cmluZy50cmltUmlnaHQoKSIsICJyaWdodFRyaW1TdHJpbmciKTsK
Kworc2hvdWxkQmUoImxlZnRUcmltU3RyaW5nLnRyaW0oKSIsICAgICAgIiciICsgdGVzdFN0cmlu
ZyArICInIik7CitzaG91bGRCZSgibGVmdFRyaW1TdHJpbmcudHJpbUxlZnQoKSIsICAibGVmdFRy
aW1TdHJpbmciKTsKK3Nob3VsZEJlKCJsZWZ0VHJpbVN0cmluZy50cmltUmlnaHQoKSIsICInIiAr
IHRlc3RTdHJpbmcgKyAiJyIpOworICAgIAorc2hvdWxkQmUoInJpZ2h0VHJpbVN0cmluZy50cmlt
KCkiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInJpZ2h0VHJpbVN0
cmluZy50cmltTGVmdCgpIiwgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInJp
Z2h0VHJpbVN0cmluZy50cmltUmlnaHQoKSIsICJyaWdodFRyaW1TdHJpbmciKTsKKyAgICAKK3No
b3VsZEJlKCJ0cmltLmNhbGwod3NTdHJpbmcpIiwgICAgICAiJyciKTsKK3Nob3VsZEJlKCJ0cmlt
TGVmdC5jYWxsKHdzU3RyaW5nKSIsICAiJyciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuY2FsbCh3
c1N0cmluZykiLCAiJyciKTsKKyAgICAKK3Nob3VsZEJlKCJ0cmltLmNhbGwodHJpbVN0cmluZyki
LCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInRyaW1MZWZ0LmNhbGwo
dHJpbVN0cmluZykiLCAgImxlZnRUcmltU3RyaW5nIik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmNh
bGwodHJpbVN0cmluZykiLCAicmlnaHRUcmltU3RyaW5nIik7CisgICAgCitzaG91bGRCZSgidHJp
bS5jYWxsKGxlZnRUcmltU3RyaW5nKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7Citz
aG91bGRCZSgidHJpbUxlZnQuY2FsbChsZWZ0VHJpbVN0cmluZykiLCAgImxlZnRUcmltU3RyaW5n
Iik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmNhbGwobGVmdFRyaW1TdHJpbmcpIiwgIiciICsgdGVz
dFN0cmluZyArICInIik7CisgICAgCitzaG91bGRCZSgidHJpbS5jYWxsKHJpZ2h0VHJpbVN0cmlu
ZykiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInRyaW1MZWZ0LmNh
bGwocmlnaHRUcmltU3RyaW5nKSIsICAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJl
KCJ0cmltUmlnaHQuY2FsbChyaWdodFRyaW1TdHJpbmcpIiwgInJpZ2h0VHJpbVN0cmluZyIpOwor
ICAgIAorc2hvdWxkQmUoInRyaW0uYXBwbHkod3NTdHJpbmcpIiwgICAgICAiJyciKTsKK3Nob3Vs
ZEJlKCJ0cmltTGVmdC5hcHBseSh3c1N0cmluZykiLCAgIicnIik7CitzaG91bGRCZSgidHJpbVJp
Z2h0LmFwcGx5KHdzU3RyaW5nKSIsICInJyIpOworICAgIAorc2hvdWxkQmUoInRyaW0uYXBwbHko
dHJpbVN0cmluZykiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInRy
aW1MZWZ0LmFwcGx5KHRyaW1TdHJpbmcpIiwgICJsZWZ0VHJpbVN0cmluZyIpOworc2hvdWxkQmUo
InRyaW1SaWdodC5hcHBseSh0cmltU3RyaW5nKSIsICJyaWdodFRyaW1TdHJpbmciKTsKKyAgICAK
K3Nob3VsZEJlKCJ0cmltLmFwcGx5KGxlZnRUcmltU3RyaW5nKSIsICAgICAgIiciICsgdGVzdFN0
cmluZyArICInIik7CitzaG91bGRCZSgidHJpbUxlZnQuYXBwbHkobGVmdFRyaW1TdHJpbmcpIiwg
ICJsZWZ0VHJpbVN0cmluZyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5hcHBseShsZWZ0VHJpbVN0
cmluZykiLCAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKKyAgICAKK3Nob3VsZEJlKCJ0cmltLmFw
cGx5KHJpZ2h0VHJpbVN0cmluZykiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hv
dWxkQmUoInRyaW1MZWZ0LmFwcGx5KHJpZ2h0VHJpbVN0cmluZykiLCAgIiciICsgdGVzdFN0cmlu
ZyArICInIik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmFwcGx5KHJpZ2h0VHJpbVN0cmluZykiLCAi
cmlnaHRUcmltU3RyaW5nIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="review"
          id="16320"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31741</attachid>
            <date>2009-06-23 15:07:45 -0700</date>
            <delta_ts>2009-06-24 01:28:38 -0700</delta_ts>
            <desc>String.trim(), String.trimLeft(), String.trimRight() patch update</desc>
            <filename>StringTrimPatch.txt</filename>
            <type>text/plain</type>
            <size>11082</size>
            <attacher name="Ioseb Dzmanashvili">ioseb.dzmanashvili</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MDA4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDYtMjMgIElvc2ViIER6
bWFuYXNodmlsaSAgPGlvc2ViLmR6bWFuYXNodmlsaUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OmlzV2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OnRy
aW1TdHJpbmcpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUcmltKToKKyAgICAgICAg
KEpTQzo6c3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90
b0Z1bmNUcmltUmlnaHQpOgorCiAyMDA5LTA2LTIzICBKb2UgTWFzb24gIDxqb2UubWFzb25AdG9y
Y2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gVHJlYXQuCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA0NDk2
MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsMTAgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNU
b1VwcGVyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29t
cGFyZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOworCQogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxs
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKQEAgLTk3LDYgKzEwMSwxMSBAQCBj
b25zdCBDbGFzc0luZm8gU3RyaW5nUHJvdG90eXBlOjppbmZvID0gCiAgICAgdG9VcHBlckNhc2Ug
ICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKICAgICBsb2NhbGVDb21wYXJlICAgICAgICAgc3RyaW5nUHJvdG9GdW5jTG9j
YWxlQ29tcGFyZSAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMQogCisgICAgIyBtb3JlIGRl
dGFpbHMgYXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vQ29yZV9KYXZhU2NyaXB0
XzEuNV9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL1RyaW0KKyAgICB0cmltICAgICAg
ICAgICAgICAgICAgc3RyaW5nUHJvdG9GdW5jVHJpbSAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICAgIHRyaW1MZWZ0ICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNU
cmltTGVmdCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgICAgdHJpbVJpZ2h0
ICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodCAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uICAgICAgIDAKKyAKICAgICAjIHRvTG9jYWxlTG93ZXJDYXNlIGFuZCB0b0xvY2FsZVVw
cGVyQ2FzZSBhcmUgY3VycmVudGx5IGlkZW50aWNhbCB0byB0b0xvd2VyQ2FzZSBhbmQgdG9VcHBl
ckNhc2UKICAgICB0b0xvY2FsZUxvd2VyQ2FzZSAgICAgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNh
c2UgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAogICAgIHRvTG9jYWxlVXBwZXJDYXNl
ICAgICBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCkBAIC0yMDQsNyArMjEzLDU2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxvY2FsZUNvbXBh
cmUoY29uc3QgVVMKIHsKICAgICByZXR1cm4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCktPmNvbGxh
dGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYS5kYXRhKCkpLCBhLnNpemUoKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYi5kYXRhKCkpLCBiLnNpemUoKSk7CiB9
Ci0KKwkKK2Jvb2wgaXNXaGl0ZVNwYWNlKGludCBjKSAKK3sJCisgICAgc3dpdGNoIChjKSB7Cisg
ICAgICAgIGNhc2UgMHgyMDoKKyAgICAgICAgY2FzZSAweGEwOgorICAgICAgICBjYXNlIDB4MTY4
MDoKKyAgICAgICAgY2FzZSAweDE4MGU6CisgICAgICAgIGNhc2UgMHgyMDI4OgorICAgICAgICBj
YXNlIDB4MjAyOToKKyAgICAgICAgY2FzZSAweDIwMmY6CisgICAgICAgIGNhc2UgMHgyMDVmOgor
ICAgICAgICBjYXNlIDB4MzAwMDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGMgPj0gMHgwOSAmJiBjIDw9IDB4MGQgfHwgYyA+
PSAweDIwMDAgJiYgYyA8PSAweDIwMGIgfHwgaXNTZXBhcmF0b3JTcGFjZShjKTsKKwl9Cit9CisK
K2VudW0gVHJpbU1vZGUgeworICAgIFRyaW1MZWZ0LAorICAgIFRyaW1SaWdodCwKKyAgICBUcmlt
Qm90aExlZnRBbmRSaWdodAorfTsKKwkKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB0aGlzVmFsdWUsIFRyaW1Nb2RlIHRyaW1Nb2RlKSAK
K3sJCQorICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvVGhpc0pTU3RyaW5nKGV4ZWMp
OworICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZSgpOworICAgIGNvbnN0IFVDaGFy
KiBzRGF0YSA9IHMuZGF0YSgpOworICAgIHVuc2lnbmVkIGludCBzaXplID0gcy5zaXplKCk7CQor
ICAgIHVuc2lnbmVkIGludCBzdGFydCA9IDA7CisgICAgdW5zaWduZWQgaW50IGVuZCA9IHNpemU7
CisJCisgICAgaWYgKHRyaW1Nb2RlID09IFRyaW1MZWZ0IHx8IHRyaW1Nb2RlID09IFRyaW1Cb3Ro
TGVmdEFuZFJpZ2h0KSB7CisgICAgICAgIHdoaWxlIChzdGFydCA8IHNpemUgJiYgaXNXaGl0ZVNw
YWNlKHNEYXRhW3N0YXJ0XSkpCisgICAgICAgICAgICBzdGFydCsrOworICAgIH0KKwkKKyAgICBp
Zih0cmltTW9kZSA9PSBUcmltUmlnaHQgfHwgdHJpbU1vZGUgPT0gVHJpbUJvdGhMZWZ0QW5kUmln
aHQpIHsKKyAgICAgICAgd2hpbGUgKGVuZCA+IHN0YXJ0ICYmIGlzV2hpdGVTcGFjZShzRGF0YVtl
bmQgLSAxXSkpCisgICAgICAgICAgICBlbmQtLTsKKyAgICB9CisJCisgICAgaWYgKCFzdGFydCAm
JiBlbmQgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuIHNWYWw7CisJCisgICAgcmV0dXJuIGpzU3Vi
c3RyaW5nKGV4ZWMsIHMsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihlbmQgLSBzdGFydCkpOworfQorCQogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1JlcGxhY2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUg
dGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIEpTU3RyaW5nKiBzb3VyY2VW
YWwgPSB0aGlzVmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7CkBAIC03MDUsNyArNzYzLDIyIEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0wKICAgICAgICAgcmV0dXJu
IHNWYWw7CiAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmcoYnVmZmVyLnJlbGVhc2VC
dWZmZXIoKSwgbGVuZ3RoLCBmYWxzZSkpOwogfQotCisJCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQoreworCXJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRo
aXNWYWx1ZSwgVHJpbUJvdGhMZWZ0QW5kUmlnaHQpOworfQorCQorSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBK
U1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCit7CisJcmV0dXJuIHRyaW1TdHJpbmco
ZXhlYywgdGhpc1ZhbHVlLCBUcmltTGVmdCk7Cit9CisJCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCit7CisJcmV0dXJuIHRyaW1TdHJpbmcoZXhl
YywgdGhpc1ZhbHVlLCBUcmltUmlnaHQpOworfQorCQogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0
cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1Zh
bHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpCiB7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0
aGlzVmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA0NTAwOCkK
KysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwIEBA
CisyMDA5LTA2LTIzICBJb3NlYiBEem1hbmFzaHZpbGkgIDxpb3NlYi5kem1hbmFzaHZpbGlAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogZmFzdC9qcy9yZXNvdXJjZXMvc3RyaW5nLXRyaW0uanM6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvanMvc3RyaW5nLXRyaW0uaHRtbDogQWRkZWQuCisKIDIwMDktMDYtMjMgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBI
eWF0dC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLXRyaW0uaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3N0cmluZy10cmltLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3N0cmluZy10cmltLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3Ry
aW5nLXRyaW0uanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZXNvdXJjZXMvc3RyaW5nLXRyaW0uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9yZXNvdXJjZXMvc3RyaW5nLXRyaW0uanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9zdHJpbmctdHJpbS5qcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMTEgQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgY2hlY2tzIFN0cmluZy50cmltKCks
IFN0cmluZy50cmltTGVmdCgpIGFuZCBTdHJpbmcudHJpbVJpZ2h0KCkgbWV0aG9kcy4iKTsKKwor
Ly9yZWZlcmVuY2VzIHRvIHRyaW0oKSwgdHJpbUxlZnQoKSBhbmQgdHJpbVJpZ2h0KCkgZnVuY3Rp
b25zIGZvciB0ZXN0aW5nIEZ1bmN0aW9uJ3MgKi5jYWxsKCkgYW5kICouYXBwbHkoKSBtZXRob2Rz
Cit2YXIgdHJpbSAgICAgICAgICAgID0gU3RyaW5nLnByb3RvdHlwZS50cmltOwordmFyIHRyaW1M
ZWZ0ICAgICAgICA9IFN0cmluZy5wcm90b3R5cGUudHJpbUxlZnQ7Cit2YXIgdHJpbVJpZ2h0ICAg
ICAgID0gU3RyaW5nLnByb3RvdHlwZS50cmltUmlnaHQ7CisKK3ZhciB0ZXN0U3RyaW5nICAgICAg
PSAnZm9vIGJhcic7Cit2YXIgdHJpbVN0cmluZyAgICAgID0gJyc7Cit2YXIgbGVmdFRyaW1TdHJp
bmcgID0gJyc7Cit2YXIgcmlnaHRUcmltU3RyaW5nID0gJyc7Cit2YXIgd3NTdHJpbmcgICAgICAg
ID0gJyc7CisKKy8vd2hpdGVzcGFjZSBsaXN0IGZyb20gTW96aWxsYSdzIHRlc3QgY2FzZQordmFy
IHdoaXRlc3BhY2UgICAgICA9IFsKKyAgICB7cyA6ICdcdTAwMDknLCB0IDogJ0hPUklaT05UQUwg
VEFCJ30sCisgICAge3MgOiAnXHUwMDBBJywgdCA6ICdMSU5FIEZFRUQgT1IgTkVXIExJTkUnfSwK
KyAgICB7cyA6ICdcdTAwMEInLCB0IDogJ1ZFUlRJQ0FMIFRBQid9LAorICAgIHtzIDogJ1x1MDAw
QycsIHQgOiAnRk9STUZFRUQnfSwKKyAgICB7cyA6ICdcdTAwMEQnLCB0IDogJ0NBUlJJQUdFIFJF
VFVSTid9LAorICAgIHtzIDogJ1x1MDAyMCcsIHQgOiAnU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTAw
QTAnLCB0IDogJ05PLUJSRUFLIFNQQUNFJ30sCisgICAge3MgOiAnXHUxNjgwJywgdCA6ICdPR0hB
TSBTUEFDRSBNQVJLJ30sCisgICAge3MgOiAnXHUxODBFJywgdCA6ICdNT05HT0xJQU4gVk9XRUwg
U0VQQVJBVE9SJ30sCisgICAge3MgOiAnXHUyMDAwJywgdCA6ICdFTiBRVUFEJ30sCisgICAge3Mg
OiAnXHUyMDAxJywgdCA6ICdFTSBRVUFEJ30sCisgICAge3MgOiAnXHUyMDAyJywgdCA6ICdFTiBT
UEFDRSd9LAorICAgIHtzIDogJ1x1MjAwMycsIHQgOiAnRU0gU1BBQ0UnfSwKKyAgICB7cyA6ICdc
dTIwMDQnLCB0IDogJ1RIUkVFLVBFUi1FTSBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwNScsIHQg
OiAnRk9VUi1QRVItRU0gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDYnLCB0IDogJ1NJWC1QRVIt
RU0gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMDcnLCB0IDogJ0ZJR1VSRSBTUEFDRSd9LAorICAg
IHtzIDogJ1x1MjAwOCcsIHQgOiAnUFVOQ1RVQVRJT04gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIw
MDknLCB0IDogJ1RISU4gU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMEEnLCB0IDogJ0hBSVIgU1BB
Q0UnfSwKKyAgICB7cyA6ICdcdTIwMkYnLCB0IDogJ05BUlJPVyBOTy1CUkVBSyBTUEFDRSd9LAor
ICAgIHtzIDogJ1x1MjA1RicsIHQgOiAnTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRSd9LAorICAg
IHtzIDogJ1x1MzAwMCcsIHQgOiAnSURFT0dSQVBISUMgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIw
MjgnLCB0IDogJ0xJTkUgU0VQQVJBVE9SJ30sCisgICAge3MgOiAnXHUyMDI5JywgdCA6ICdQQVJB
R1JBUEggU0VQQVJBVE9SJ30sCisgICAge3MgOiAnXHUyMDBCJywgdCA6ICdaRVJPIFdJRFRIIFNQ
QUNFIChjYXRlZ29yeSBDZiknfQorXTsKKyAgICAKK2ZvciAodmFyIGkgPSAwLCBvOyAobyA9IHdo
aXRlc3BhY2VbaSsrXSk7KSB7CisgICAgd3NTdHJpbmcgKz0gby5zOworfQorCit0cmltU3RyaW5n
ICAgICAgPSB3c1N0cmluZyAgICsgdGVzdFN0cmluZyArIHdzU3RyaW5nOworbGVmdFRyaW1TdHJp
bmcgID0gdGVzdFN0cmluZyArIHdzU3RyaW5nOyAgIC8vdHJpbW1lZCBmcm9tIHRoZSBsZWZ0City
aWdodFRyaW1TdHJpbmcgPSB3c1N0cmluZyAgICsgdGVzdFN0cmluZzsgLy90cmltbWVkIGZyb20g
dGhlIHJpZ2h0CisgICAgCitzaG91bGRCZSgid3NTdHJpbmcudHJpbSgpIiwgICAgICAiJyciKTsK
K3Nob3VsZEJlKCJ3c1N0cmluZy50cmltTGVmdCgpIiwgICInJyIpOworc2hvdWxkQmUoIndzU3Ry
aW5nLnRyaW1SaWdodCgpIiwgIicnIik7CisKK3Nob3VsZEJlKCJ0cmltU3RyaW5nLnRyaW0oKSIs
ICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7CisKK3Nob3VsZEJlKCJ0cmltLmFwcGx5KHdz
U3RyaW5nKSIsICAgICAgIicnIik7CitzaG91bGRCZSgidHJpbUxlZnQuYXBwbHkod3NTdHJpbmcp
IiwgICInJyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5hcHBseSh3c1N0cmluZykiLCAiJyciKTsK
Kworc2hvdWxkQmUoInRyaW0uY2FsbCh3c1N0cmluZykiLCAgICAgICInJyIpOworc2hvdWxkQmUo
InRyaW1MZWZ0LmNhbGwod3NTdHJpbmcpIiwgICInJyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5j
YWxsKHdzU3RyaW5nKSIsICInJyIpOworCitzaG91bGRCZSgidHJpbVN0cmluZy50cmltKCkiLCAg
ICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInRyaW1TdHJpbmcudHJpbUxl
ZnQoKSIsICAibGVmdFRyaW1TdHJpbmciKTsKK3Nob3VsZEJlKCJ0cmltU3RyaW5nLnRyaW1SaWdo
dCgpIiwgInJpZ2h0VHJpbVN0cmluZyIpOworCitzaG91bGRCZSgibGVmdFRyaW1TdHJpbmcudHJp
bSgpIiwgICAgICAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJsZWZ0VHJpbVN0
cmluZy50cmltTGVmdCgpIiwgICJsZWZ0VHJpbVN0cmluZyIpOworc2hvdWxkQmUoImxlZnRUcmlt
U3RyaW5nLnRyaW1SaWdodCgpIiwgIiciICsgdGVzdFN0cmluZyArICInIik7CisgICAgCitzaG91
bGRCZSgicmlnaHRUcmltU3RyaW5nLnRyaW0oKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICIn
Iik7CitzaG91bGRCZSgicmlnaHRUcmltU3RyaW5nLnRyaW1MZWZ0KCkiLCAgIiciICsgdGVzdFN0
cmluZyArICInIik7CitzaG91bGRCZSgicmlnaHRUcmltU3RyaW5nLnRyaW1SaWdodCgpIiwgInJp
Z2h0VHJpbVN0cmluZyIpOworICAgIAorc2hvdWxkQmUoInRyaW0uY2FsbCh3c1N0cmluZykiLCAg
ICAgICInJyIpOworc2hvdWxkQmUoInRyaW1MZWZ0LmNhbGwod3NTdHJpbmcpIiwgICInJyIpOwor
c2hvdWxkQmUoInRyaW1SaWdodC5jYWxsKHdzU3RyaW5nKSIsICInJyIpOworICAgIAorc2hvdWxk
QmUoInRyaW0uY2FsbCh0cmltU3RyaW5nKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7
CitzaG91bGRCZSgidHJpbUxlZnQuY2FsbCh0cmltU3RyaW5nKSIsICAibGVmdFRyaW1TdHJpbmci
KTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuY2FsbCh0cmltU3RyaW5nKSIsICJyaWdodFRyaW1TdHJp
bmciKTsKKyAgICAKK3Nob3VsZEJlKCJ0cmltLmNhbGwobGVmdFRyaW1TdHJpbmcpIiwgICAgICAi
JyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5jYWxsKGxlZnRUcmlt
U3RyaW5nKSIsICAibGVmdFRyaW1TdHJpbmciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuY2FsbChs
ZWZ0VHJpbVN0cmluZykiLCAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKKyAgICAKK3Nob3VsZEJl
KCJ0cmltLmNhbGwocmlnaHRUcmltU3RyaW5nKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICIn
Iik7CitzaG91bGRCZSgidHJpbUxlZnQuY2FsbChyaWdodFRyaW1TdHJpbmcpIiwgICInIiArIHRl
c3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5jYWxsKHJpZ2h0VHJpbVN0cmlu
ZykiLCAicmlnaHRUcmltU3RyaW5nIik7CisgICAgCitzaG91bGRCZSgidHJpbS5hcHBseSh3c1N0
cmluZykiLCAgICAgICInJyIpOworc2hvdWxkQmUoInRyaW1MZWZ0LmFwcGx5KHdzU3RyaW5nKSIs
ICAiJyciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuYXBwbHkod3NTdHJpbmcpIiwgIicnIik7Cisg
ICAgCitzaG91bGRCZSgidHJpbS5hcHBseSh0cmltU3RyaW5nKSIsICAgICAgIiciICsgdGVzdFN0
cmluZyArICInIik7CitzaG91bGRCZSgidHJpbUxlZnQuYXBwbHkodHJpbVN0cmluZykiLCAgImxl
ZnRUcmltU3RyaW5nIik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmFwcGx5KHRyaW1TdHJpbmcpIiwg
InJpZ2h0VHJpbVN0cmluZyIpOworICAgIAorc2hvdWxkQmUoInRyaW0uYXBwbHkobGVmdFRyaW1T
dHJpbmcpIiwgICAgICAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltTGVm
dC5hcHBseShsZWZ0VHJpbVN0cmluZykiLCAgImxlZnRUcmltU3RyaW5nIik7CitzaG91bGRCZSgi
dHJpbVJpZ2h0LmFwcGx5KGxlZnRUcmltU3RyaW5nKSIsICInIiArIHRlc3RTdHJpbmcgKyAiJyIp
OworICAgIAorc2hvdWxkQmUoInRyaW0uYXBwbHkocmlnaHRUcmltU3RyaW5nKSIsICAgICAgIici
ICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgidHJpbUxlZnQuYXBwbHkocmlnaHRUcmlt
U3RyaW5nKSIsICAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQu
YXBwbHkocmlnaHRUcmltU3RyaW5nKSIsICJyaWdodFRyaW1TdHJpbmciKTsKKwordmFyIHN1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7CisK
</data>
<flag name="review"
          id="16334"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31774</attachid>
            <date>2009-06-24 01:28:38 -0700</date>
            <delta_ts>2009-10-10 19:48:08 -0700</delta_ts>
            <desc>String.trim(), String.trimLeft(), String.trimRight() patch update</desc>
            <filename>StringTrimPatch.txt</filename>
            <type>text/plain</type>
            <size>11891</size>
            <attacher name="Ioseb Dzmanashvili">ioseb.dzmanashvili</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQ1MDc2KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDktMDYtMjQgIElvc2ViIER6
bWFuYXNodmlsaSAgPGlvc2ViLmR6bWFuYXNodmlsaUBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgPGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yNjU5MD4KKworCQlBZGRlZCBzdXBwb3J0IGZvciBTdHJpbmcu
dHJpbSgpLCBTdHJpbmcudHJpbUxlZnQoKSBhbmQgU3RyaW5nLnRyaW1SaWdodCgpIG1ldGhvZHMK
KworICAgICAgICAqIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcDoKKyAgICAgICAgICAgIENo
ZWNrcyBpZiBjaGFyYWN0ZXIgaXMgd2hpdGVzcGFjZS4gTWF0Y2ggaXMgcGVyZm9ybWVkIGFnYWlu
c3Qgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHJlY29tbWVuZGVkIGJ5IEVjbWEgMy4xCisgICAgICAg
IChKU0M6OmlzV2hpdGVTcGFjZSk6CisgICAgICAgICAgICBSZW1vdmVzIHdoaXRlc3BhY2UgZnJv
bSBsZWZ0IGFuZCByaWdodCBlbmRzIG9mIHRoZSBzdHJpbmcuCisgICAgICAgICAgICBGdW5jdGlv
biBpcyB1c2VkIGludGVybmFsbHkgYnkgSlNDOjpzdHJpbmdQcm90b0Z1bmNUcmltLCBKU0M6OnN0
cmluZ1Byb3RvRnVuY1RyaW1MZWZ0CWFuZCBKU0M6OnN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodCBm
dW5jdGlvbnMJCisgICAgICAgIChKU0M6OnRyaW1TdHJpbmcpOgorICAgICAgICAgICAgUmVtb3Zl
cyB3aGl0ZXNwYWNlIGZyb20gYm90aCBlbmRzIG9mIHRoZSBzdHJpbmcKKyAgICAgICAgKEpTQzo6
c3RyaW5nUHJvdG9GdW5jVHJpbSk6CisgICAgICAgICAgICBSZW1vdmVzIHdoaXRlc3BhY2UgZnJv
bSB0aGUgbGVmdCBlbmQgb2YgdGhlIHN0cmluZworICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1
bmNUcmltTGVmdCk6CisgICAgICAgICAgICBSZW1vdmVzIHdoaXRlc3BhY2UgZnJvbSB0aGUgcmln
aHQgZW5kIG9mIHRoZSBzdHJpbmcuCisgICAgICAgIChKU0M6OnN0cmluZ1Byb3RvRnVuY1RyaW1S
aWdodCk6CisKIDIwMDktMDYtMjQgIFpvbHRhbiBIb3J2YXRoICA8aHpvbHRhbkBpbmYudS1zemVn
ZWQuaHU+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA0NDk2
MCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsMTAgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBz
dHJpbmdQcm90bwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNU
b1VwcGVyQ2FzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3Qm
KTsKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jTG9jYWxlQ29t
cGFyZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKIAor
c3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltKEV4ZWNTdGF0
ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3RhdGUqLCBKU09iamVj
dCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgc3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOworCQogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJp
bmdQcm90b0Z1bmNCaWcoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdM
aXN0Jik7CiBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1NtYWxs
KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGlj
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNCbGluayhFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKQEAgLTk3LDYgKzEwMSwxMSBAQCBj
b25zdCBDbGFzc0luZm8gU3RyaW5nUHJvdG90eXBlOjppbmZvID0gCiAgICAgdG9VcHBlckNhc2Ug
ICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlICAgICAgIERvbnRFbnVtfEZ1bmN0
aW9uICAgICAgIDAKICAgICBsb2NhbGVDb21wYXJlICAgICAgICAgc3RyaW5nUHJvdG9GdW5jTG9j
YWxlQ29tcGFyZSAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMQogCisgICAgIyBtb3JlIGRl
dGFpbHMgYXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvRW4vQ29yZV9KYXZhU2NyaXB0
XzEuNV9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL1RyaW0KKyAgICB0cmltICAgICAg
ICAgICAgICAgICAgc3RyaW5nUHJvdG9GdW5jVHJpbSAgICAgICAgICAgICAgRG9udEVudW18RnVu
Y3Rpb24gICAgICAgMAorICAgIHRyaW1MZWZ0ICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNU
cmltTGVmdCAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAwCisgICAgdHJpbVJpZ2h0
ICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodCAgICAgICAgIERvbnRFbnVtfEZ1
bmN0aW9uICAgICAgIDAKKyAKICAgICAjIHRvTG9jYWxlTG93ZXJDYXNlIGFuZCB0b0xvY2FsZVVw
cGVyQ2FzZSBhcmUgY3VycmVudGx5IGlkZW50aWNhbCB0byB0b0xvd2VyQ2FzZSBhbmQgdG9VcHBl
ckNhc2UKICAgICB0b0xvY2FsZUxvd2VyQ2FzZSAgICAgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNh
c2UgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMAogICAgIHRvTG9jYWxlVXBwZXJDYXNl
ICAgICBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSAgICAgICBEb250RW51bXxGdW5jdGlvbiAg
ICAgICAwCkBAIC0yMDQsNyArMjEzLDU2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxvY2FsZUNvbXBh
cmUoY29uc3QgVVMKIHsKICAgICByZXR1cm4gQ29sbGF0b3I6OnVzZXJEZWZhdWx0KCktPmNvbGxh
dGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYS5kYXRhKCkpLCBhLnNpemUoKSwg
cmVpbnRlcnByZXRfY2FzdDxjb25zdCA6OlVDaGFyKj4oYi5kYXRhKCkpLCBiLnNpemUoKSk7CiB9
Ci0KKwkKK3N0YXRpYyBib29sIGlzV2hpdGVTcGFjZShpbnQgYykgCit7CQorICAgIHN3aXRjaCAo
YykgeworICAgICAgICBjYXNlIDB4MjA6CisgICAgICAgIGNhc2UgMHhhMDoKKyAgICAgICAgY2Fz
ZSAweDE2ODA6CisgICAgICAgIGNhc2UgMHgxODBlOgorICAgICAgICBjYXNlIDB4MjAyODoKKyAg
ICAgICAgY2FzZSAweDIwMjk6CisgICAgICAgIGNhc2UgMHgyMDJmOgorICAgICAgICBjYXNlIDB4
MjA1ZjoKKyAgICAgICAgY2FzZSAweDMwMDA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBjID49IDB4MDkgJiYgYyA8PSAweDBk
IHx8IGMgPj0gMHgyMDAwICYmIGMgPD0gMHgyMDBiIHx8IGlzU2VwYXJhdG9yU3BhY2UoYyk7CisJ
fQorfQorCitlbnVtIFRyaW1Nb2RlIHsKKyAgICBUcmltTGVmdCwKKyAgICBUcmltUmlnaHQsCisg
ICAgVHJpbUJvdGhMZWZ0QW5kUmlnaHQKK307CisJCitzdGF0aWMgaW5saW5lIEpTVmFsdWUgdHJp
bVN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdGhpc1ZhbHVlLCBUcmltTW9kZSB0cmlt
TW9kZSkgCit7CQkKKyAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1RoaXNKU1N0cmlu
ZyhleGVjKTsKKyAgICBjb25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoKTsKKyAgICBjb25z
dCBVQ2hhciogc0RhdGEgPSBzLmRhdGEoKTsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IHMuc2l6
ZSgpOwkKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSAwOworICAgIHVuc2lnbmVkIGludCBlbmQg
PSBzaXplOworCQorICAgIGlmICh0cmltTW9kZSA9PSBUcmltTGVmdCB8fCB0cmltTW9kZSA9PSBU
cmltQm90aExlZnRBbmRSaWdodCkgeworICAgICAgICB3aGlsZSAoc3RhcnQgPCBzaXplICYmIGlz
V2hpdGVTcGFjZShzRGF0YVtzdGFydF0pKQorICAgICAgICAgICAgc3RhcnQrKzsKKyAgICB9CisJ
CisgICAgaWYgKHRyaW1Nb2RlID09IFRyaW1SaWdodCB8fCB0cmltTW9kZSA9PSBUcmltQm90aExl
ZnRBbmRSaWdodCkgeworICAgICAgICB3aGlsZSAoZW5kID4gc3RhcnQgJiYgaXNXaGl0ZVNwYWNl
KHNEYXRhW2VuZCAtIDFdKSkKKyAgICAgICAgICAgIGVuZC0tOworICAgIH0KKwkKKyAgICBpZiAo
IXN0YXJ0ICYmIGVuZCA9PSBzaXplKQorICAgICAgICByZXR1cm4gc1ZhbDsKKwkKKyAgICByZXR1
cm4ganNTdWJzdHJpbmcoZXhlYywgcywgc3RhcnQsIGVuZCAtIHN0YXJ0KTsKK30KKwkKIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAg
ICBKU1N0cmluZyogc291cmNlVmFsID0gdGhpc1ZhbHVlLnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwpA
QCAtNzA1LDcgKzc2MywyMiBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5j
VG9MCiAgICAgICAgIHJldHVybiBzVmFsOwogICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3Ry
aW5nKGJ1ZmZlci5yZWxlYXNlQnVmZmVyKCksIGxlbmd0aCwgZmFsc2UpKTsKIH0KLQorCQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0oRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK3sKKwlyZXR1cm4g
dHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1Cb3RoTGVmdEFuZFJpZ2h0KTsKK30KKwkK
K0pTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltTGVmdChFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQorewor
CXJldHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQpOworfQorCQorSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQoreworCXJl
dHVybiB0cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0KTsKK30KKwkKIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAg
IEpTU3RyaW5nKiBzVmFsID0gdGhpc1ZhbHVlLnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwpJbmRleDog
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxv
ZwkocmV2aXNpb24gNDUwNzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNi0yNCAgSW9zZWIgRHptYW5hc2h2aWxpICA8aW9z
ZWIuZHptYW5hc2h2aWxpQGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworCQk8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2
NTkwPgorCisJCUFkZGVkIHRlc3RzIGZvciBKYXZhU2NyaXB0J3MgU3RyaW5nLnRyaW0oKSwgU3Ry
aW5nLnRyaW1MZWZ0KCkgYW5kIFN0cmluZy50cmltUmlnaHQoKSBtZXRob2RzCisJCQorICAgICAg
ICAqIGZhc3QvanMvcmVzb3VyY2VzL3N0cmluZy10cmltLmpzOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL3N0cmluZy10cmltLmh0bWw6IEFkZGVkLgorCiAyMDA5LTA2LTI0ICBPbGl2ZXIgSHVu
dCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChhdHRl
bXB0ZWQgdGVzdCBmaXgpLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zdHJpbmctdHJpbS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLXRyaW0uaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLXRyaW0uaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0icmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9zdHJpbmctdHJpbS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2Vz
L2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9zdHJpbmctdHJpbS5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNlcy9zdHJpbmctdHJpbS5qcwkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL3N0cmluZy10cmltLmpzCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExMSBAQAorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBjaGVja3MgU3Ry
aW5nLnRyaW0oKSwgU3RyaW5nLnRyaW1MZWZ0KCkgYW5kIFN0cmluZy50cmltUmlnaHQoKSBtZXRo
b2RzLiIpOworCisvL3JlZmVyZW5jZXMgdG8gdHJpbSgpLCB0cmltTGVmdCgpIGFuZCB0cmltUmln
aHQoKSBmdW5jdGlvbnMgZm9yIHRlc3RpbmcgRnVuY3Rpb24ncyAqLmNhbGwoKSBhbmQgKi5hcHBs
eSgpIG1ldGhvZHMKK3ZhciB0cmltICAgICAgICAgICAgPSBTdHJpbmcucHJvdG90eXBlLnRyaW07
Cit2YXIgdHJpbUxlZnQgICAgICAgID0gU3RyaW5nLnByb3RvdHlwZS50cmltTGVmdDsKK3ZhciB0
cmltUmlnaHQgICAgICAgPSBTdHJpbmcucHJvdG90eXBlLnRyaW1SaWdodDsKKwordmFyIHRlc3RT
dHJpbmcgICAgICA9ICdmb28gYmFyJzsKK3ZhciB0cmltU3RyaW5nICAgICAgPSAnJzsKK3ZhciBs
ZWZ0VHJpbVN0cmluZyAgPSAnJzsKK3ZhciByaWdodFRyaW1TdHJpbmcgPSAnJzsKK3ZhciB3c1N0
cmluZyAgICAgICAgPSAnJzsKKworLy93aGl0ZXNwYWNlIGxpc3QgZnJvbSBNb3ppbGxhJ3MgdGVz
dCBjYXNlCit2YXIgd2hpdGVzcGFjZSAgICAgID0gWworICAgIHtzIDogJ1x1MDAwOScsIHQgOiAn
SE9SSVpPTlRBTCBUQUInfSwKKyAgICB7cyA6ICdcdTAwMEEnLCB0IDogJ0xJTkUgRkVFRCBPUiBO
RVcgTElORSd9LAorICAgIHtzIDogJ1x1MDAwQicsIHQgOiAnVkVSVElDQUwgVEFCJ30sCisgICAg
e3MgOiAnXHUwMDBDJywgdCA6ICdGT1JNRkVFRCd9LAorICAgIHtzIDogJ1x1MDAwRCcsIHQgOiAn
Q0FSUklBR0UgUkVUVVJOJ30sCisgICAge3MgOiAnXHUwMDIwJywgdCA6ICdTUEFDRSd9LAorICAg
IHtzIDogJ1x1MDBBMCcsIHQgOiAnTk8tQlJFQUsgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTE2ODAn
LCB0IDogJ09HSEFNIFNQQUNFIE1BUksnfSwKKyAgICB7cyA6ICdcdTE4MEUnLCB0IDogJ01PTkdP
TElBTiBWT1dFTCBTRVBBUkFUT1InfSwKKyAgICB7cyA6ICdcdTIwMDAnLCB0IDogJ0VOIFFVQUQn
fSwKKyAgICB7cyA6ICdcdTIwMDEnLCB0IDogJ0VNIFFVQUQnfSwKKyAgICB7cyA6ICdcdTIwMDIn
LCB0IDogJ0VOIFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDAzJywgdCA6ICdFTSBTUEFDRSd9LAor
ICAgIHtzIDogJ1x1MjAwNCcsIHQgOiAnVEhSRUUtUEVSLUVNIFNQQUNFJ30sCisgICAge3MgOiAn
XHUyMDA1JywgdCA6ICdGT1VSLVBFUi1FTSBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwNicsIHQg
OiAnU0lYLVBFUi1FTSBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwNycsIHQgOiAnRklHVVJFIFNQ
QUNFJ30sCisgICAge3MgOiAnXHUyMDA4JywgdCA6ICdQVU5DVFVBVElPTiBTUEFDRSd9LAorICAg
IHtzIDogJ1x1MjAwOScsIHQgOiAnVEhJTiBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwQScsIHQg
OiAnSEFJUiBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAyRicsIHQgOiAnTkFSUk9XIE5PLUJSRUFL
IFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDVGJywgdCA6ICdNRURJVU0gTUFUSEVNQVRJQ0FMIFNQ
QUNFJ30sCisgICAge3MgOiAnXHUzMDAwJywgdCA6ICdJREVPR1JBUEhJQyBTUEFDRSd9LAorICAg
IHtzIDogJ1x1MjAyOCcsIHQgOiAnTElORSBTRVBBUkFUT1InfSwKKyAgICB7cyA6ICdcdTIwMjkn
LCB0IDogJ1BBUkFHUkFQSCBTRVBBUkFUT1InfSwKKyAgICB7cyA6ICdcdTIwMEInLCB0IDogJ1pF
Uk8gV0lEVEggU1BBQ0UgKGNhdGVnb3J5IENmKSd9CitdOworICAgIAorZm9yICh2YXIgaSA9IDAs
IG87IChvID0gd2hpdGVzcGFjZVtpKytdKTspIHsKKyAgICB3c1N0cmluZyArPSBvLnM7Cit9CisK
K3RyaW1TdHJpbmcgICAgICA9IHdzU3RyaW5nICAgKyB0ZXN0U3RyaW5nICsgd3NTdHJpbmc7Cits
ZWZ0VHJpbVN0cmluZyAgPSB0ZXN0U3RyaW5nICsgd3NTdHJpbmc7ICAgLy90cmltbWVkIGZyb20g
dGhlIGxlZnQKK3JpZ2h0VHJpbVN0cmluZyA9IHdzU3RyaW5nICAgKyB0ZXN0U3RyaW5nOyAvL3Ry
aW1tZWQgZnJvbSB0aGUgcmlnaHQKKyAgICAKK3Nob3VsZEJlKCJ3c1N0cmluZy50cmltKCkiLCAg
ICAgICInJyIpOworc2hvdWxkQmUoIndzU3RyaW5nLnRyaW1MZWZ0KCkiLCAgIicnIik7CitzaG91
bGRCZSgid3NTdHJpbmcudHJpbVJpZ2h0KCkiLCAiJyciKTsKKworc2hvdWxkQmUoInRyaW1TdHJp
bmcudHJpbSgpIiwgICAgICAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKKworc2hvdWxkQmUoInRy
aW0uYXBwbHkod3NTdHJpbmcpIiwgICAgICAiJyciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5hcHBs
eSh3c1N0cmluZykiLCAgIicnIik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmFwcGx5KHdzU3RyaW5n
KSIsICInJyIpOworCitzaG91bGRCZSgidHJpbS5jYWxsKHdzU3RyaW5nKSIsICAgICAgIicnIik7
CitzaG91bGRCZSgidHJpbUxlZnQuY2FsbCh3c1N0cmluZykiLCAgIicnIik7CitzaG91bGRCZSgi
dHJpbVJpZ2h0LmNhbGwod3NTdHJpbmcpIiwgIicnIik7CisKK3Nob3VsZEJlKCJ0cmltU3RyaW5n
LnRyaW0oKSIsICAgICAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgidHJpbVN0
cmluZy50cmltTGVmdCgpIiwgICJsZWZ0VHJpbVN0cmluZyIpOworc2hvdWxkQmUoInRyaW1TdHJp
bmcudHJpbVJpZ2h0KCkiLCAicmlnaHRUcmltU3RyaW5nIik7CisKK3Nob3VsZEJlKCJsZWZ0VHJp
bVN0cmluZy50cmltKCkiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUo
ImxlZnRUcmltU3RyaW5nLnRyaW1MZWZ0KCkiLCAgImxlZnRUcmltU3RyaW5nIik7CitzaG91bGRC
ZSgibGVmdFRyaW1TdHJpbmcudHJpbVJpZ2h0KCkiLCAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsK
KyAgICAKK3Nob3VsZEJlKCJyaWdodFRyaW1TdHJpbmcudHJpbSgpIiwgICAgICAiJyIgKyB0ZXN0
U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJyaWdodFRyaW1TdHJpbmcudHJpbUxlZnQoKSIsICAi
JyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJyaWdodFRyaW1TdHJpbmcudHJpbVJp
Z2h0KCkiLCAicmlnaHRUcmltU3RyaW5nIik7CisgICAgCitzaG91bGRCZSgidHJpbS5jYWxsKHdz
U3RyaW5nKSIsICAgICAgIicnIik7CitzaG91bGRCZSgidHJpbUxlZnQuY2FsbCh3c1N0cmluZyki
LCAgIicnIik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmNhbGwod3NTdHJpbmcpIiwgIicnIik7Cisg
ICAgCitzaG91bGRCZSgidHJpbS5jYWxsKHRyaW1TdHJpbmcpIiwgICAgICAiJyIgKyB0ZXN0U3Ry
aW5nICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5jYWxsKHRyaW1TdHJpbmcpIiwgICJsZWZ0
VHJpbVN0cmluZyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5jYWxsKHRyaW1TdHJpbmcpIiwgInJp
Z2h0VHJpbVN0cmluZyIpOworICAgIAorc2hvdWxkQmUoInRyaW0uY2FsbChsZWZ0VHJpbVN0cmlu
ZykiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUoInRyaW1MZWZ0LmNh
bGwobGVmdFRyaW1TdHJpbmcpIiwgICJsZWZ0VHJpbVN0cmluZyIpOworc2hvdWxkQmUoInRyaW1S
aWdodC5jYWxsKGxlZnRUcmltU3RyaW5nKSIsICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworICAg
IAorc2hvdWxkQmUoInRyaW0uY2FsbChyaWdodFRyaW1TdHJpbmcpIiwgICAgICAiJyIgKyB0ZXN0
U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5jYWxsKHJpZ2h0VHJpbVN0cmluZyki
LCAgIiciICsgdGVzdFN0cmluZyArICInIik7CitzaG91bGRCZSgidHJpbVJpZ2h0LmNhbGwocmln
aHRUcmltU3RyaW5nKSIsICJyaWdodFRyaW1TdHJpbmciKTsKKyAgICAKK3Nob3VsZEJlKCJ0cmlt
LmFwcGx5KHdzU3RyaW5nKSIsICAgICAgIicnIik7CitzaG91bGRCZSgidHJpbUxlZnQuYXBwbHko
d3NTdHJpbmcpIiwgICInJyIpOworc2hvdWxkQmUoInRyaW1SaWdodC5hcHBseSh3c1N0cmluZyki
LCAiJyciKTsKKyAgICAKK3Nob3VsZEJlKCJ0cmltLmFwcGx5KHRyaW1TdHJpbmcpIiwgICAgICAi
JyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5hcHBseSh0cmltU3Ry
aW5nKSIsICAibGVmdFRyaW1TdHJpbmciKTsKK3Nob3VsZEJlKCJ0cmltUmlnaHQuYXBwbHkodHJp
bVN0cmluZykiLCAicmlnaHRUcmltU3RyaW5nIik7CisgICAgCitzaG91bGRCZSgidHJpbS5hcHBs
eShsZWZ0VHJpbVN0cmluZykiLCAgICAgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxk
QmUoInRyaW1MZWZ0LmFwcGx5KGxlZnRUcmltU3RyaW5nKSIsICAibGVmdFRyaW1TdHJpbmciKTsK
K3Nob3VsZEJlKCJ0cmltUmlnaHQuYXBwbHkobGVmdFRyaW1TdHJpbmcpIiwgIiciICsgdGVzdFN0
cmluZyArICInIik7CisgICAgCitzaG91bGRCZSgidHJpbS5hcHBseShyaWdodFRyaW1TdHJpbmcp
IiwgICAgICAiJyIgKyB0ZXN0U3RyaW5nICsgIiciKTsKK3Nob3VsZEJlKCJ0cmltTGVmdC5hcHBs
eShyaWdodFRyaW1TdHJpbmcpIiwgICInIiArIHRlc3RTdHJpbmcgKyAiJyIpOworc2hvdWxkQmUo
InRyaW1SaWdodC5hcHBseShyaWdodFRyaW1TdHJpbmcpIiwgInJpZ2h0VHJpbVN0cmluZyIpOwor
Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40996</attachid>
            <date>2009-10-10 19:48:12 -0700</date>
            <delta_ts>2009-10-10 20:44:07 -0700</delta_ts>
            <desc>Support for String.trim(), String.trimLeft() and String.trimRight() methods</desc>
            <filename>bug-26590-20091010194810.patch</filename>
            <type>text/plain</type>
            <size>13283</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBjMzMxNjhlLi4wZTJmNTFlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMDktMTAtMTAgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTdXBwb3J0IGZvciBTdHJp
bmcudHJpbSgpLCBTdHJpbmcudHJpbUxlZnQoKSBhbmQgU3RyaW5nLnRyaW1SaWdodCgpIG1ldGhv
ZHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NTkw
CisKKyAgICAgICAgSW1wbGVtZW50IHRyaW0sIHRyaW1MZWZ0LCBhbmQgdHJpbVJpZ2h0CisKKyAg
ICAgICAgKiBydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OmlzVHJp
bVdoaXRlc3BhY2UpOgorICAgICAgICAgICBPdXIgbm9ybWFsIHN0cmluZyB3aGl0ZXNwYWNlIGZ1
bmN0aW9uIGRvZXMgbm90IGluY2x1ZGUgVSsyMDBCIHdoaWNoCisgICAgICAgICAgIGlzIG5lZWRl
ZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG1vemlsbGEncyBpbXBsZW1lbnRhdGlvbiBvZiB0cmlt
LgorICAgICAgICAgICBVKzIwMEIgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGV4cGVjdGVkIGFjY29y
ZGluZyB0byBzcGVjLCBob3dldmVyIEkgYW0KKyAgICAgICAgICAgY2hvb3NpbmcgdG8gYmUgbGF4
LCBhbmQgbWF0Y2ggbW96aWxsYSBiZWhhdmlvciBzbyBoYXZlIGFkZGVkIHRoaXMKKyAgICAgICAg
ICAgZXhjZXB0aW9uLgorICAgICAgICAoSlNDOjp0cmltU3RyaW5nKToKKwogMjAwOS0xMC0wOSAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQ
cm90b3R5cGUuY3BwIGIvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3Bw
CmluZGV4IDE4MWY0MGUuLmEwNzEzYjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RyaW5nUHJvdG90eXBlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmlu
Z1Byb3RvdHlwZS5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJDYWNoZWRDYWxsLmgi
CiAjaW5jbHVkZSAiRXJyb3IuaCIKICNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJKU0FycmF5LmgiCiAjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgpAQCAtNzIsNiAr
NzMsMTAgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNGb250
c2l6ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmEKIHN0YXRpYyBKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jQW5jaG9yKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1
ZSwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNMaW5rKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYpOwogCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW0o
RXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CitzdGF0aWMg
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUcmltUmlnaHQoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlLCBjb25zdCBBcmdMaXN0Jik7CisKIH0KIAogI2luY2x1ZGUgIlN0cmluZ1Byb3Rv
dHlwZS5sdXQuaCIKQEAgLTExNyw2ICsxMjIsOSBAQCBjb25zdCBDbGFzc0luZm8gU3RyaW5nUHJv
dG90eXBlOjppbmZvID0geyAiU3RyaW5nIiwgJlN0cmluZ09iamVjdDo6aW5mbywgMCwgRXhlYwog
ICAgIGZvbnRzaXplICAgICAgICAgICAgICBzdHJpbmdQcm90b0Z1bmNGb250c2l6ZSAgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAgICAgICAxCiAgICAgYW5jaG9yICAgICAgICAgICAgICAgIHN0
cmluZ1Byb3RvRnVuY0FuY2hvciAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDEK
ICAgICBsaW5rICAgICAgICAgICAgICAgICAgc3RyaW5nUHJvdG9GdW5jTGluayAgICAgICAgICAg
ICAgRG9udEVudW18RnVuY3Rpb24gICAgICAgMQorICAgIHRyaW0gICAgICAgICAgICAgICAgICBz
dHJpbmdQcm90b0Z1bmNUcmltICAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAgICAgICAw
CisgICAgdHJpbUxlZnQgICAgICAgICAgICAgIHN0cmluZ1Byb3RvRnVuY1RyaW1MZWZ0ICAgICAg
ICAgIERvbnRFbnVtfEZ1bmN0aW9uICAgICAgIDAKKyAgICB0cmltUmlnaHQgICAgICAgICAgICAg
c3RyaW5nUHJvdG9GdW5jVHJpbVJpZ2h0ICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gICAgICAg
MAogQGVuZAogKi8KIApAQCAtODk5LDQgKzkwNyw1MSBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
c3RyaW5nUHJvdG9GdW5jTGluayhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aAogICAgIHJldHVybiBqc05vbnRyaXZpYWxTdHJpbmcoZXhlYywgVVN0cmluZyhidWZmZXIsIGJ1
ZmZlclNpemUsIGZhbHNlKSk7CiB9CiAKK2VudW0geworICAgIFRyaW1MZWZ0ID0gMSwKKyAgICBU
cmltUmlnaHQgPSAyCit9OworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNUcmltV2hpdGVzcGFjZShV
Q2hhciBjKQoreworICAgIHJldHVybiBpc1N0cldoaXRlU3BhY2UoYykgfHwgYyA9PSAweDIwMGI7
Cit9CisKK3N0YXRpYyBpbmxpbmUgSlNWYWx1ZSB0cmltU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSB0aGlzVmFsdWUsIGludCB0cmltS2luZCkKK3sKKyAgICBVU3RyaW5nIHN0ciA9IHRo
aXNWYWx1ZS50b1RoaXNTdHJpbmcoZXhlYyk7CisgICAgaW50IGxlZnQgPSAwOworICAgIGlmICh0
cmltS2luZCAmIFRyaW1MZWZ0KSB7CisgICAgICAgIHdoaWxlIChsZWZ0IDwgc3RyLnNpemUoKSAm
JiBpc1RyaW1XaGl0ZXNwYWNlKHN0cltsZWZ0XSkpCisgICAgICAgICAgICBsZWZ0Kys7CisgICAg
fQorICAgIGludCByaWdodCA9IHN0ci5zaXplKCk7CisgICAgaWYgKHRyaW1LaW5kICYgVHJpbVJp
Z2h0KSB7CisgICAgICAgIHdoaWxlIChyaWdodCA+IGxlZnQgJiYgaXNUcmltV2hpdGVzcGFjZShz
dHJbcmlnaHQgLSAxXSkpCisgICAgICAgICAgICByaWdodC0tOworICAgIH0KKworICAgIC8vIERv
bid0IGdjIGFsbG9jYXRlIGEgbmV3IHN0cmluZyBpZiB3ZSBkb24ndCBoYXZlIHRvLgorICAgIGlm
IChsZWZ0ID09IDAgJiYgcmlnaHQgPT0gc3RyLnNpemUoKSAmJiB0aGlzVmFsdWUuaXNTdHJpbmco
KSkKKyAgICAgICAgcmV0dXJuIHRoaXNWYWx1ZTsKKworICAgIHJldHVybiBqc1N0cmluZyhleGVj
LCBzdHIuc3Vic3RyKGxlZnQsIHJpZ2h0IC0gbGVmdCkpOworfQorCitKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNW
YWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQoreworICAgIHJldHVybiB0cmltU3RyaW5n
KGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbUxlZnQgfCBUcmltUmlnaHQpOworfQorCitKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVHJpbUxlZnQoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKK3sKKyAgICByZXR1cm4g
dHJpbVN0cmluZyhleGVjLCB0aGlzVmFsdWUsIFRyaW1MZWZ0KTsKK30KKworSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RyaW1SaWdodChFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQoreworICAgIHJldHVybiB0
cmltU3RyaW5nKGV4ZWMsIHRoaXNWYWx1ZSwgVHJpbVJpZ2h0KTsKK30KKyAgICAKKyAgICAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGQ1ZDhhNTMuLmFhODIyYWIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAwOS0xMC0xMCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgZm9y
IFN0cmluZy50cmltKCksIFN0cmluZy50cmltTGVmdCgpIGFuZCBTdHJpbmcudHJpbVJpZ2h0KCkg
bWV0aG9kcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjY1OTAKKworICAgICAgICBBZGQgdGVzdHMgZm9yIHRyaW0sIHRyaW1MZWZ0LCBhbmQgdHJpbVJp
Z2h0CisKKyAgICAgICAgKiBmYXN0L2pzL3NjcmlwdC10ZXN0cy9zdHJpbmctdHJpbS5qczogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9zdHJpbmctdHJpbS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvanMvc3RyaW5nLXRyaW0uaHRtbDogQWRkZWQuCisKIDIwMDktMTAtMTAg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0
cy9zdHJpbmctdHJpbS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRlc3RzL3N0cmlu
Zy10cmltLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNzVmMzAKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9zdHJpbmct
dHJpbS5qcwpAQCAtMCwwICsxLDczIEBACitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGNoZWNrcyBT
dHJpbmcudHJpbSgpLCBTdHJpbmcudHJpbUxlZnQoKSBhbmQgU3RyaW5nLnRyaW1SaWdodCgpIG1l
dGhvZHMuIik7CisKKy8vcmVmZXJlbmNlcyB0byB0cmltKCksIHRyaW1MZWZ0KCkgYW5kIHRyaW1S
aWdodCgpIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBGdW5jdGlvbidzICouY2FsbCgpIGFuZCAqLmFw
cGx5KCkgbWV0aG9kcwordmFyIHRyaW0gICAgICAgICAgICA9IFN0cmluZy5wcm90b3R5cGUudHJp
bTsKK3ZhciB0cmltTGVmdCAgICAgICAgPSBTdHJpbmcucHJvdG90eXBlLnRyaW1MZWZ0OwordmFy
IHRyaW1SaWdodCAgICAgICA9IFN0cmluZy5wcm90b3R5cGUudHJpbVJpZ2h0OworCit2YXIgdGVz
dFN0cmluZyAgICAgID0gJ2ZvbyBiYXInOwordmFyIHRyaW1TdHJpbmcgICAgICA9ICcnOwordmFy
IGxlZnRUcmltU3RyaW5nICA9ICcnOwordmFyIHJpZ2h0VHJpbVN0cmluZyA9ICcnOwordmFyIHdz
U3RyaW5nICAgICAgICA9ICcnOworCit2YXIgd2hpdGVzcGFjZSAgICAgID0gWworICAgIHtzIDog
J1x1MDAwOScsIHQgOiAnSE9SSVpPTlRBTCBUQUInfSwKKyAgICB7cyA6ICdcdTAwMEEnLCB0IDog
J0xJTkUgRkVFRCBPUiBORVcgTElORSd9LAorICAgIHtzIDogJ1x1MDAwQicsIHQgOiAnVkVSVElD
QUwgVEFCJ30sCisgICAge3MgOiAnXHUwMDBDJywgdCA6ICdGT1JNRkVFRCd9LAorICAgIHtzIDog
J1x1MDAwRCcsIHQgOiAnQ0FSUklBR0UgUkVUVVJOJ30sCisgICAge3MgOiAnXHUwMDIwJywgdCA6
ICdTUEFDRSd9LAorICAgIHtzIDogJ1x1MDBBMCcsIHQgOiAnTk8tQlJFQUsgU1BBQ0UnfSwKKyAg
ICB7cyA6ICdcdTIwMDAnLCB0IDogJ0VOIFFVQUQnfSwKKyAgICB7cyA6ICdcdTIwMDEnLCB0IDog
J0VNIFFVQUQnfSwKKyAgICB7cyA6ICdcdTIwMDInLCB0IDogJ0VOIFNQQUNFJ30sCisgICAge3Mg
OiAnXHUyMDAzJywgdCA6ICdFTSBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwNCcsIHQgOiAnVEhS
RUUtUEVSLUVNIFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDA1JywgdCA6ICdGT1VSLVBFUi1FTSBT
UEFDRSd9LAorICAgIHtzIDogJ1x1MjAwNicsIHQgOiAnU0lYLVBFUi1FTSBTUEFDRSd9LAorICAg
IHtzIDogJ1x1MjAwNycsIHQgOiAnRklHVVJFIFNQQUNFJ30sCisgICAge3MgOiAnXHUyMDA4Jywg
dCA6ICdQVU5DVFVBVElPTiBTUEFDRSd9LAorICAgIHtzIDogJ1x1MjAwOScsIHQgOiAnVEhJTiBT
UEFDRSd9LAorICAgIHtzIDogJ1x1MjAwQScsIHQgOiAnSEFJUiBTUEFDRSd9LAorICAgIHtzIDog
J1x1MzAwMCcsIHQgOiAnSURFT0dSQVBISUMgU1BBQ0UnfSwKKyAgICB7cyA6ICdcdTIwMjgnLCB0
IDogJ0xJTkUgU0VQQVJBVE9SJ30sCisgICAge3MgOiAnXHUyMDI5JywgdCA6ICdQQVJBR1JBUEgg
U0VQQVJBVE9SJ30sCisgICAge3MgOiAnXHUyMDBCJywgdCA6ICdaRVJPIFdJRFRIIFNQQUNFIChj
YXRlZ29yeSBDZiknfQorXTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCB3aGl0ZXNwYWNlLmxlbmd0
aDsgaSsrKSB7CisgICAgc2hvdWxkQmUoIndoaXRlc3BhY2VbIitpKyJdLnMudHJpbSgpIiwgIicn
Iik7CisgICAgc2hvdWxkQmUoIndoaXRlc3BhY2VbIitpKyJdLnMudHJpbUxlZnQoKSIsICInJyIp
OworICAgIHNob3VsZEJlKCJ3aGl0ZXNwYWNlWyIraSsiXS5zLnRyaW1SaWdodCgpIiwgIicnIik7
CisgICAgd3NTdHJpbmcgKz0gd2hpdGVzcGFjZVtpXS5zOworfQorCit0cmltU3RyaW5nICAgICAg
PSB3c1N0cmluZyAgICsgdGVzdFN0cmluZyArIHdzU3RyaW5nOworbGVmdFRyaW1TdHJpbmcgID0g
dGVzdFN0cmluZyArIHdzU3RyaW5nOyAgIC8vdHJpbW1lZCBmcm9tIHRoZSBsZWZ0CityaWdodFRy
aW1TdHJpbmcgPSB3c1N0cmluZyAgICsgdGVzdFN0cmluZzsgLy90cmltbWVkIGZyb20gdGhlIHJp
Z2h0CisgICAgCitzaG91bGRCZSgid3NTdHJpbmcudHJpbSgpIiwgICAgICAiJyciKTsKK3Nob3Vs
ZEJlKCJ3c1N0cmluZy50cmltTGVmdCgpIiwgICInJyIpOworc2hvdWxkQmUoIndzU3RyaW5nLnRy
aW1SaWdodCgpIiwgIicnIik7CisKK3Nob3VsZEJlKCJ0cmltU3RyaW5nLnRyaW0oKSIsICAgICAg
InRlc3RTdHJpbmciKTsKK3Nob3VsZEJlKCJ0cmltU3RyaW5nLnRyaW1MZWZ0KCkiLCAgImxlZnRU
cmltU3RyaW5nIik7CitzaG91bGRCZSgidHJpbVN0cmluZy50cmltUmlnaHQoKSIsICJyaWdodFRy
aW1TdHJpbmciKTsKKworc2hvdWxkQmUoImxlZnRUcmltU3RyaW5nLnRyaW0oKSIsICAgICAgInRl
c3RTdHJpbmciKTsKK3Nob3VsZEJlKCJsZWZ0VHJpbVN0cmluZy50cmltTGVmdCgpIiwgICJsZWZ0
VHJpbVN0cmluZyIpOworc2hvdWxkQmUoImxlZnRUcmltU3RyaW5nLnRyaW1SaWdodCgpIiwgInRl
c3RTdHJpbmciKTsKKyAgICAKK3Nob3VsZEJlKCJyaWdodFRyaW1TdHJpbmcudHJpbSgpIiwgICAg
ICAidGVzdFN0cmluZyIpOworc2hvdWxkQmUoInJpZ2h0VHJpbVN0cmluZy50cmltTGVmdCgpIiwg
ICJ0ZXN0U3RyaW5nIik7CitzaG91bGRCZSgicmlnaHRUcmltU3RyaW5nLnRyaW1SaWdodCgpIiwg
InJpZ2h0VHJpbVN0cmluZyIpOworCit2YXIgdGVzdFZhbHVlcyA9IFsiMCIsICJJbmZpbml0eSIs
ICJOYU4iLCAidHJ1ZSIsICJmYWxzZSIsICIoe30pIiwgIih7dG9TdHJpbmc6ZnVuY3Rpb24oKXty
ZXR1cm4gJ3dpYmJsZSd9fSkiLCAiWydhbicsJ2FycmF5J10iXTsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgdGVzdFZhbHVlcy5sZW5ndGg7IGkrKykgeworICAgIHNob3VsZEJlKCJ0cmltLmNhbGwoIit0
ZXN0VmFsdWVzW2ldKyIpIiwgIiciK2V2YWwodGVzdFZhbHVlc1tpXSkrIiciKTsKKyAgICBzaG91
bGRCZSgidHJpbUxlZnQuY2FsbCgiK3Rlc3RWYWx1ZXNbaV0rIikiLCAiJyIrZXZhbCh0ZXN0VmFs
dWVzW2ldKSsiJyIpOworICAgIHNob3VsZEJlKCJ0cmltUmlnaHQuY2FsbCgiK3Rlc3RWYWx1ZXNb
aV0rIikiLCAiJyIrZXZhbCh0ZXN0VmFsdWVzW2ldKSsiJyIpOworfQordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5n
LXRyaW0tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9zdHJpbmctdHJpbS1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWM0YTJjZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvc3RyaW5nLXRyaW0tZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTExIEBACitUaGlzIHRlc3QgY2hlY2tzIFN0cmluZy50cmltKCksIFN0
cmluZy50cmltTGVmdCgpIGFuZCBTdHJpbmcudHJpbVJpZ2h0KCkgbWV0aG9kcy4KKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgd2hpdGVzcGFjZVswXS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzBdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzBdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxXS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzFdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzFdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsyXS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzJdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzJdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVszXS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzNdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzNdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVs0XS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzRdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzRdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVs1XS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzVdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzVdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVs2XS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzZdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzZdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVs3XS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzddLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzddLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVs4XS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzhdLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzhdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVs5XS5zLnRyaW0oKSBpcyAn
JworUEFTUyB3aGl0ZXNwYWNlWzldLnMudHJpbUxlZnQoKSBpcyAnJworUEFTUyB3aGl0ZXNwYWNl
WzldLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxMF0ucy50cmltKCkgaXMg
JycKK1BBU1Mgd2hpdGVzcGFjZVsxMF0ucy50cmltTGVmdCgpIGlzICcnCitQQVNTIHdoaXRlc3Bh
Y2VbMTBdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxMV0ucy50cmltKCkg
aXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxMV0ucy50cmltTGVmdCgpIGlzICcnCitQQVNTIHdoaXRl
c3BhY2VbMTFdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxMl0ucy50cmlt
KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxMl0ucy50cmltTGVmdCgpIGlzICcnCitQQVNTIHdo
aXRlc3BhY2VbMTJdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxM10ucy50
cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxM10ucy50cmltTGVmdCgpIGlzICcnCitQQVNT
IHdoaXRlc3BhY2VbMTNdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxNF0u
cy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxNF0ucy50cmltTGVmdCgpIGlzICcnCitQ
QVNTIHdoaXRlc3BhY2VbMTRdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsx
NV0ucy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxNV0ucy50cmltTGVmdCgpIGlzICcn
CitQQVNTIHdoaXRlc3BhY2VbMTVdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFj
ZVsxNl0ucy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxNl0ucy50cmltTGVmdCgpIGlz
ICcnCitQQVNTIHdoaXRlc3BhY2VbMTZdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hpdGVz
cGFjZVsxN10ucy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxN10ucy50cmltTGVmdCgp
IGlzICcnCitQQVNTIHdoaXRlc3BhY2VbMTddLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mgd2hp
dGVzcGFjZVsxOF0ucy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxOF0ucy50cmltTGVm
dCgpIGlzICcnCitQQVNTIHdoaXRlc3BhY2VbMThdLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1Mg
d2hpdGVzcGFjZVsxOV0ucy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsxOV0ucy50cmlt
TGVmdCgpIGlzICcnCitQQVNTIHdoaXRlc3BhY2VbMTldLnMudHJpbVJpZ2h0KCkgaXMgJycKK1BB
U1Mgd2hpdGVzcGFjZVsyMF0ucy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsyMF0ucy50
cmltTGVmdCgpIGlzICcnCitQQVNTIHdoaXRlc3BhY2VbMjBdLnMudHJpbVJpZ2h0KCkgaXMgJycK
K1BBU1Mgd2hpdGVzcGFjZVsyMV0ucy50cmltKCkgaXMgJycKK1BBU1Mgd2hpdGVzcGFjZVsyMV0u
cy50cmltTGVmdCgpIGlzICcnCitQQVNTIHdoaXRlc3BhY2VbMjFdLnMudHJpbVJpZ2h0KCkgaXMg
JycKK1BBU1Mgd3NTdHJpbmcudHJpbSgpIGlzICcnCitQQVNTIHdzU3RyaW5nLnRyaW1MZWZ0KCkg
aXMgJycKK1BBU1Mgd3NTdHJpbmcudHJpbVJpZ2h0KCkgaXMgJycKK1BBU1MgdHJpbVN0cmluZy50
cmltKCkgaXMgdGVzdFN0cmluZworUEFTUyB0cmltU3RyaW5nLnRyaW1MZWZ0KCkgaXMgbGVmdFRy
aW1TdHJpbmcKK1BBU1MgdHJpbVN0cmluZy50cmltUmlnaHQoKSBpcyByaWdodFRyaW1TdHJpbmcK
K1BBU1MgbGVmdFRyaW1TdHJpbmcudHJpbSgpIGlzIHRlc3RTdHJpbmcKK1BBU1MgbGVmdFRyaW1T
dHJpbmcudHJpbUxlZnQoKSBpcyBsZWZ0VHJpbVN0cmluZworUEFTUyBsZWZ0VHJpbVN0cmluZy50
cmltUmlnaHQoKSBpcyB0ZXN0U3RyaW5nCitQQVNTIHJpZ2h0VHJpbVN0cmluZy50cmltKCkgaXMg
dGVzdFN0cmluZworUEFTUyByaWdodFRyaW1TdHJpbmcudHJpbUxlZnQoKSBpcyB0ZXN0U3RyaW5n
CitQQVNTIHJpZ2h0VHJpbVN0cmluZy50cmltUmlnaHQoKSBpcyByaWdodFRyaW1TdHJpbmcKK1BB
U1MgdHJpbS5jYWxsKDApIGlzICcwJworUEFTUyB0cmltTGVmdC5jYWxsKDApIGlzICcwJworUEFT
UyB0cmltUmlnaHQuY2FsbCgwKSBpcyAnMCcKK1BBU1MgdHJpbS5jYWxsKEluZmluaXR5KSBpcyAn
SW5maW5pdHknCitQQVNTIHRyaW1MZWZ0LmNhbGwoSW5maW5pdHkpIGlzICdJbmZpbml0eScKK1BB
U1MgdHJpbVJpZ2h0LmNhbGwoSW5maW5pdHkpIGlzICdJbmZpbml0eScKK1BBU1MgdHJpbS5jYWxs
KE5hTikgaXMgJ05hTicKK1BBU1MgdHJpbUxlZnQuY2FsbChOYU4pIGlzICdOYU4nCitQQVNTIHRy
aW1SaWdodC5jYWxsKE5hTikgaXMgJ05hTicKK1BBU1MgdHJpbS5jYWxsKHRydWUpIGlzICd0cnVl
JworUEFTUyB0cmltTGVmdC5jYWxsKHRydWUpIGlzICd0cnVlJworUEFTUyB0cmltUmlnaHQuY2Fs
bCh0cnVlKSBpcyAndHJ1ZScKK1BBU1MgdHJpbS5jYWxsKGZhbHNlKSBpcyAnZmFsc2UnCitQQVNT
IHRyaW1MZWZ0LmNhbGwoZmFsc2UpIGlzICdmYWxzZScKK1BBU1MgdHJpbVJpZ2h0LmNhbGwoZmFs
c2UpIGlzICdmYWxzZScKK1BBU1MgdHJpbS5jYWxsKCh7fSkpIGlzICdbb2JqZWN0IE9iamVjdF0n
CitQQVNTIHRyaW1MZWZ0LmNhbGwoKHt9KSkgaXMgJ1tvYmplY3QgT2JqZWN0XScKK1BBU1MgdHJp
bVJpZ2h0LmNhbGwoKHt9KSkgaXMgJ1tvYmplY3QgT2JqZWN0XScKK1BBU1MgdHJpbS5jYWxsKCh7
dG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gJ3dpYmJsZSd9fSkpIGlzICd3aWJibGUnCitQQVNT
IHRyaW1MZWZ0LmNhbGwoKHt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAnd2liYmxlJ319KSkg
aXMgJ3dpYmJsZScKK1BBU1MgdHJpbVJpZ2h0LmNhbGwoKHt0b1N0cmluZzpmdW5jdGlvbigpe3Jl
dHVybiAnd2liYmxlJ319KSkgaXMgJ3dpYmJsZScKK1BBU1MgdHJpbS5jYWxsKFsnYW4nLCdhcnJh
eSddKSBpcyAnYW4sYXJyYXknCitQQVNTIHRyaW1MZWZ0LmNhbGwoWydhbicsJ2FycmF5J10pIGlz
ICdhbixhcnJheScKK1BBU1MgdHJpbVJpZ2h0LmNhbGwoWydhbicsJ2FycmF5J10pIGlzICdhbixh
cnJheScKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL3N0cmluZy10cmltLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2pzL3N0cmluZy10cmltLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uY2I5MzNiNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
anMvc3RyaW5nLXRyaW0uaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N0cmluZy10cmltLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4=
</data>
<flag name="review"
          id="22300"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>