<?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>14360</bug_id>
          
          <creation_ts>2007-06-24 00:13:48 -0700</creation_ts>
          <short_desc>JavaScript source view should be syntax highlighted</short_desc>
          <delta_ts>2008-06-19 13:27:59 -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>Web Inspector (Deprecated)</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>19677</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Keishi Hattori">keishi</assigned_to>
          <cc>hyatt</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>6502</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-06-24 00:13:48 -0700</bug_when>
    <thetext>The JavaScript source view in the Inspector should be syntax highlighted, just like the HTML source view already is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68616</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-01-29 10:59:10 -0800</bug_when>
    <thetext>&lt;rdar://problem/5712818&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83080</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-06-11 19:16:40 -0700</bug_when>
    <thetext>It would probably be good enough (at least as an initial implementation) to do the highlighting using JavaScript code in the Inspector (like Drosera did for syntax highlighting).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83293</commentid>
    <comment_count>3</comment_count>
      <attachid>21693</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-06-13 23:14:16 -0700</bug_when>
    <thetext>Created attachment 21693
Adds syntax coloring to JS source code in the Resources panel.

I didn&apos;t know where to stick my code so I stuck it at the end of SourceFrame.js.

keywords, operators(except ?:), regexp, numbers, strings, comments get colorized</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83300</commentid>
    <comment_count>4</comment_count>
      <attachid>21693</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-14 00:37:20 -0700</bug_when>
    <thetext>Comment on attachment 21693
Adds syntax coloring to JS source code in the Resources panel.

Over all this is looking great! I have many comments, mainly because I have been thinking about this recently, but most are very minor.

A few style things: The tabs need to be removed and changed to 4 spaces. We also avoid single string quotes in the Inspector&apos;s code. A few places like &quot;i=0&quot; which is missing spaces around the operator. Also in for loops use ++i and ++j etc. Also try to use ===/!== wherever you can, I notice you mixed it up a bit. In echoChar (and other places) you don&apos;t indent the line after the if/else statements.

Other comments:
I would remove the use of getElementsByClassName in syntaxHighlightJavascript, and add more assumptions about the structure of the elements. We control the content so this code can be more efficient. Take a look at sourceRow() and _addMessageToSource(), they access the table rows and cells directly.

Tracking state needs to be changed, using a class name to track being in a comment is heavy handed. You can just add a property to the previous &lt;tr&gt; line element, like &quot;_syntaxHighlightState&quot; which is an object that has a &quot;comment&quot; boolean property. I recommend an object because I think you will need more state tracking because RegExp&apos;s can span multiple lines, as well as strings.

No need to add WebInspector.JavascriptSyntaxHighlight, just add another function to SourceFrame&apos;s prototype like &quot;_syntaxHighlightJavascriptLine&quot;.

I would not use innerHTML for this code. The syntax highlighting needs to be fast, so manipulating the DOM directly would be preferred. Use textContent of the webkit-line-content cell, then remove all the nodes of the cell, then scan and make text nodes and elements with a className and textContent for the highlighted parts and append them to the cell as you go. This would eliminate the need for echoChar, since you don&apos;t need to entity encode textContent.

I am curious if isDigit and isHex would be faster as:

function isDigit(c)
{
    return &quot;0123456789&quot;.indexOf(c) !== -1;
}

function isHex(c)
{
    return &quot;0123456789abcdefABCDEF&quot;.indexOf(c) !== -1;
}

You are missing a few operators like &quot;%=&quot;, &quot;*=&quot;, &quot;/=&quot;, etc. Right now those would highlight as two separate operators. Also most syntax highlighters don&apos;t highlight operators, so maybe we should skip them too?

Your list of keywords is too broad and includes things that JavaScriptCore does not consider a keyword. See JavaScriptCore/kjs/keywords.table for the correct list. Why do you highlight boolean true and false differently? I would just label them as a keyword.

This code needs to be as fast as possible. Also if you store the state on the previous lines, we can make the highlighter lazy, so we only syntax highlight the visible lines until you scroll down. The Drosera syntax highlighting code was a real slow down for long scripts, so this lazy highlighting approach might be required.

Do you need to check for \n when scanning? Our view source code always makes a new &lt;tr&gt; for each line ending. Do we keep the \n in the text?

You will also want to syntax highlight in ScriptView.

Where did you get the colors for the highlights? Does it match Xcode or something else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83315</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-06-14 06:49:56 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; This code needs to be as fast as possible. Also if you store the state on the
&gt; previous lines, we can make the highlighter lazy, so we only syntax highlight
&gt; the visible lines until you scroll down. The Drosera syntax highlighting code
&gt; was a real slow down for long scripts, so this lazy highlighting approach might
&gt; be required.

I think we could probably make the code lazy in a followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83424</commentid>
    <comment_count>6</comment_count>
      <attachid>21720</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-06-15 20:49:58 -0700</bug_when>
    <thetext>Created attachment 21720
highlighter rewritten

I rewrote the highlighter. It&apos;s still slow(prototype.js takes a couple of seconds). 

bug: confuses division slash with regexp
todo: Highlighting in the scripts panel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83425</commentid>
    <comment_count>7</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-06-15 21:13:56 -0700</bug_when>
    <thetext>by the way, colors now match dashcode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83453</commentid>
    <comment_count>8</comment_count>
      <attachid>21720</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-06-16 06:36:39 -0700</bug_when>
    <thetext>Comment on attachment 21720
highlighter rewritten

Keishi, you should make sure to set the &quot;review&quot; flag to &quot;?&quot; when uploading patches that you want people to look at (I&apos;ve just done it for you).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83638</commentid>
    <comment_count>9</comment_count>
      <attachid>21720</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-17 14:18:48 -0700</bug_when>
    <thetext>Comment on attachment 21720
highlighter rewritten

This is looking better! I have a few comments, most are code style and formatting.

First there are many lines that are missing indentation, like:

+            var match = /^(-?\d+\.?\d*|0x\h+|Infinity|NaN)\W/.exec(str);
+            if (!match)
+            match = /^(-?\d+\.?\d*|0x\h+|Infinity|NaN)$/.exec(str);

The line after the if statement should be indented like:

+            var match = /^(-?\d+\.?\d*|0x\h+|Infinity|NaN)\W/.exec(str);
+            if (!match)
+                match = /^(-?\d+\.?\d*|0x\h+|Infinity|NaN)$/.exec(str);

While I am looking at this line (and the others like it with two matches each) these can be simplified into one RegExp (for speed). Like:

+            var match = /^(-?\d+\.?\d*|0x\h+|Infinity|NaN)(?:\W|$)/.exec(str);

Also notice that I used the non-capturing parenthesis (?:...) to prevent the regex from remembering the contents, since we don&apos;t need them for back references. Use these when you don&apos;t need a back reference in other places you are using regular parenthesis now.

Put the opening brace for your functions (a few of them) on the next line:

+        function createSpan(content, className) {

Like:

+        function createSpan(content, className)
+        {

For readability, add some extra empty lines in a few places, like after the closing brace for the nested functions.

+            var span = document.createElement(&apos;SPAN&apos;);

Use double quotes, and use lowercase &quot;span&quot;.

+                node._length = match[0].length;

I am not too fond of adding _length to all the highlighted nodes in the DOM. This will be a fairly large memory impact for large syntax-highlighted JS documents. You can take advantage of the closure created by these nested functions to provide the length for the previous match like this:

	_syntaxHighlightJavascriptLine: function(line, prevLine) {
		// ...
		
		var previousMatchLength = 0;
		
		// ...
		
		function findNumber(str) {
			// ...
			previousMatchLength = match[0].length;
			return node;
			// ...
		}
		
		// ...
		
		findNumber(code);
		i += previousMatchLength;
		
		// ...		
	}


+        if (tmp &lt; code.length) {
+            line.appendChild(document.createTextNode(code.substring(tmp, i)));
+        }

This should be a single line if statement (no braces.)


+    syntaxHighlightJavascript: function() {
+        var rowNum = 1, lineContainer, line, prevLine;
+        var totalLines = this.numOfLines();
+        for (var i = 1; i &lt;= totalLines; ++i) {
+            lineContainer = this.sourceRow(i);
+            line = lineContainer.lastChild;
+            this._syntaxHighlightJavascriptLine(line, prevLine);
+            prevLine = line;
+        }

I would not call sourceRow, it does a lot of work to be used in a loop like this.  Something like this would be better:

    syntaxHighlightJavascript: function() {
        var table = this.element.contentDocument.getElementsByTagName(&quot;table&quot;)[0];
        if (!table)
            return;

        var rows = table.rows;
        var rowsLength = rows.length;
        var previousCell = null;
        for (var i = 0; i &lt; rowsLength; ++i) {
            var row = rows[i];
            var cell = row.getElementsByTagName(&quot;td&quot;)[1];
            if (!cell)
                continue;
            this._syntaxHighlightJavascriptLine(cell, previousCell);
            previousCell = cell;
        }
    }

You can then remove numOfLines. 

+            if (this.resource.type === WebInspector.Resource.Type.Script) {
+                this.sourceFrame.syntaxHighlightJavascript();
+            }

This should not have braces.

You should add the syntaxHighlightJavascript() call to ScriptView.js too, just like you did for SourceView. In a similar setupSourceFrameIfNeeded function too! No need to check type, just add the call and you fix one of the bugs you listed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83736</commentid>
    <comment_count>10</comment_count>
      <attachid>21811</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-06-17 22:33:47 -0700</bug_when>
    <thetext>Created attachment 21811
regexp detection improved

xenon, thank you for the review.

This time I&apos;ve done:
- Script View highlighting
- Support for scientific notation number literals
- Improved regexp detection

regexp is still not 100%, but I think it works most of the time now. jquery-min, prototype.js looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83763</commentid>
    <comment_count>11</comment_count>
      <attachid>21811</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-06-18 08:10:08 -0700</bug_when>
    <thetext>Comment on attachment 21811
regexp detection improved

+        function findNumber(str)
+        {
+            var match = /^(-?(\d+\.?\d*([eE][+-]\d+)?|0[xX]\h+|Infinity)|NaN)(?:\W|$)/.exec(str);
+            if (match) {
+                var node = createSpan(match[1], &quot;webkit-javascript-number&quot;);
+                previousMatchLength = match[1].length;
+                return node;
+            }
+            return null;
+        }

There are many functions in this patch that have this same form. I have two thoughts on this:

1. It would be nicer to reverse the condition in the if and do an early return. This will reduce nesting in the function. For example:

if (!match)
    return null;
...do the work that was inside the if here...

2. There might be some way to reduce the amount of boilerplate code here. Something like this might work, at least for the simple cases:

function generateFinder(regex, matchNumber, class)
{
    return function(str) {
        var match = regex.exec(str);
        if (!match)
            return null;
        previousMatchLength = match[matchNumber].length;
        return createSpan(match[matchNumber], class);
    }
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83771</commentid>
    <comment_count>12</comment_count>
      <attachid>21820</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-06-18 10:47:22 -0700</bug_when>
    <thetext>Created attachment 21820
lines reduced

Thanks aroben. I was feeling there was too much redundancy.
I reduced the number of lines to less than half the previous one. I hope I didn&apos;t compromise code readability. I was surprised to see that generating a function every time has hardly any overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83772</commentid>
    <comment_count>13</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-18 11:05:03 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; Thanks aroben. I was feeling there was too much redundancy.
&gt; I reduced the number of lines to less than half the previous one. I hope I
&gt; didn&apos;t compromise code readability. I was surprised to see that generating a
&gt; function every time has hardly any overhead. 

Neat! I would use multiple var statements instead of comma separating them. Might make things more readable, and match coding style of the inspector better.

I think it is time to write a ChangeLog entry and get this sucker landed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83787</commentid>
    <comment_count>14</comment_count>
    <who name="Anthony Ricaud">rik</who>
    <bug_when>2008-06-18 12:36:07 -0700</bug_when>
    <thetext>Maybe it is possible to delete all the _commentContinues, _regexpContinues, etc. If I&apos;ve understood the patch well, they are not useful after the code is executed. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83788</commentid>
    <comment_count>15</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-18 12:42:33 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Maybe it is possible to delete all the _commentContinues, _regexpContinues,
&gt; etc. If I&apos;ve understood the patch well, they are not useful after the code is
&gt; executed. 

It would be good to delete them, but in the future when we lazily syntax highlight, we will need at least the last line that was syntax highlighted to have this info.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83791</commentid>
    <comment_count>16</comment_count>
    <who name="Anthony Ricaud">rik</who>
    <bug_when>2008-06-18 13:23:03 -0700</bug_when>
    <thetext>When a section ends, a while loop could delete all the properties for that section. This would also work with a lazy syntax highlighting. 

But the code only needs to remember the state of the previous line, not every line. After highlighting a line, the precious line could be cleaned. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83792</commentid>
    <comment_count>17</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-18 13:26:45 -0700</bug_when>
    <thetext>Agreed. We should make that change (delete the previous line&apos;s _*Continues properties when done with the line.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83793</commentid>
    <comment_count>18</comment_count>
      <attachid>21822</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-06-18 13:28:36 -0700</bug_when>
    <thetext>Created attachment 21822
delete

I think writing like this will make it easy to rewrite into lazy highlighting.
        function deleteContinueFlags(cell)
        {
            if (cell) {
                delete cell._commentContinues;
                delete cell._singleQuoteStringContinues;
                delete cell._doubleQuoteStringContinues;
                delete cell._regexpContinues;
            }
        }
        
        for (var i = 0; i &lt; rowsLength; ++i) {
            var row = rows[i];
            var cell = row.getElementsByTagName(&quot;td&quot;)[1];
            if (!cell)
                continue;
            this._syntaxHighlightJavascriptLine(cell, previousCell);
            deleteContinueFlags(previousCell);
            previousCell = cell;
        }
        deleteContinueFlags(previousCell);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83795</commentid>
    <comment_count>19</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-18 13:57:22 -0700</bug_when>
    <thetext>Looks great! I would move the if (cell) to the caller of deleteContinueFlags or make it an early return:

if (!cell)
    return;

Still need a ChangeLog, and then this will be r+ed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83796</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-06-18 14:03:19 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Still need a ChangeLog, and then this will be r+ed!

Instructions for writing a ChangeLog can be found at http://webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83804</commentid>
    <comment_count>21</comment_count>
      <attachid>21825</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2008-06-18 17:19:38 -0700</bug_when>
    <thetext>Created attachment 21825
with change log

Added a change log entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83868</commentid>
    <comment_count>22</comment_count>
      <attachid>21825</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-06-19 07:48:56 -0700</bug_when>
    <thetext>Comment on attachment 21825
with change log

We normally reference the Bugzilla bug in the ChangeLog entry by including its title and URL. Also, your email address in the ChangeLog header is missing the enclosing angle brackets. I&apos;ll fix these before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83890</commentid>
    <comment_count>23</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-19 10:02:01 -0700</bug_when>
    <thetext>Landed in r34657.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83892</commentid>
    <comment_count>24</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-19 10:08:07 -0700</bug_when>
    <thetext>I think we should use colors from Xcode. After using this for a bit in the Web Inspector I am not fond of the Dashcode colors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83893</commentid>
    <comment_count>25</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-06-19 10:22:08 -0700</bug_when>
    <thetext>I changed the colors in r34658.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83909</commentid>
    <comment_count>26</comment_count>
    <who name="Anthony Ricaud">rik</who>
    <bug_when>2008-06-19 12:53:21 -0700</bug_when>
    <thetext>I don&apos;t know if it should be part of another bug but javascript code in HTML content is not syntax highlighted. It should be. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83913</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2008-06-19 13:27:59 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; I don&apos;t know if it should be part of another bug but javascript code in HTML
&gt; content is not syntax highlighted. It should be. 

There is at least bug 19351. I had thought there was another one as well, but I can&apos;t find it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21693</attachid>
            <date>2008-06-13 23:14:16 -0700</date>
            <delta_ts>2008-06-15 20:49:58 -0700</delta_ts>
            <desc>Adds syntax coloring to JS source code in the Resources panel.</desc>
            <filename>MyFirstPatch.txt</filename>
            <type>text/plain</type>
            <size>7184</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZUZyYW1lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZUZyYW1lLmpzCShyZXZp
c2lvbiAzNDUyNikKKysrIFNvdXJjZUZyYW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDcgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAg
c3R5bGVUZXh0ICs9ICIud2Via2l0LWhlaWdodC1zaXplZC10by1maXQgeyBvdmVyZmxvdy15OiBo
aWRkZW4gfVxuIjsKICAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWxpbmUtY29udGVudCB7
IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyB9XG4iOwogICAgICAgICBzdHlsZVRleHQgKz0gIi53
ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSAud2Via2l0LWxpbmUtY29udGVudCB7IGJhY2tncm91bmQt
Y29sb3I6IHJnYigyNTUsIDI1NSwgMTIwKTsgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBi
YWNrZ3JvdW5kLWNvbG9yOyAtd2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDFzOyB9XG4iOwor
CQlzdHlsZVRleHQgKz0gIi53ZWJraXQtbGluZS1jb250ZW50IC5rZXl3b3JkIHtjb2xvcjogcmdi
KDAsIDAsIDI1NSk7fS53ZWJraXQtbGluZS1jb250ZW50IC5yZWdleHAge2NvbG9yOiByZ2IoMjU1
LCAxMDYsIDcpO30ud2Via2l0LWxpbmUtY29udGVudCAuc3RyaW5nIHtjb2xvcjogcmdiKDMsIDEw
NiwgNyk7fS53ZWJraXQtbGluZS1jb250ZW50IC5udW1iZXIge2NvbG9yOiByZ2IoMCwgMCwgMjA1
KTt9LndlYmtpdC1saW5lLWNvbnRlbnQgLmJvb2xlYW4ge2NvbG9yOiByZ2IoODgsIDkyLCAyNDYp
O30ud2Via2l0LWxpbmUtY29udGVudCAuY29tbWVudCB7Y29sb3I6IHJnYigwLCAxMDIsIDI1NSk7
Zm9udC1zdHlsZTogaXRhbGljO30ud2Via2l0LWxpbmUtY29udGVudCAub3BlcmF0b3Ige2NvbG9y
OiByZ2IoMTA0LCAxMTgsIDEzNSk7fSI7CiAKICAgICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250
ZW50ID0gc3R5bGVUZXh0OwogCkBAIC00NTYsNSArNDU3LDIzMSBAQCBXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJ
bkNvbnRleHQoY3R4LCB0cnVlKTsKIAogICAgICAgICBkZWxldGUgdGhpcy5fbmVlZHNCcmVha3Bv
aW50SW1hZ2VzOwotICAgIH0KKyAgICB9LAorCXN5bnRheEhpZ2hsaWdodEphdmFzY3JpcHQ6IGZ1
bmN0aW9uKCkgeworCQlmdW5jdGlvbiBpc0luQ29tbWVudChwcmV2TGluZU5vZGUpIHsKKwkJCWlm
IChwcmV2TGluZU5vZGUpCisJCQkJcmV0dXJuIHByZXZMaW5lTm9kZS5nZXRFbGVtZW50c0J5Q2xh
c3NOYW1lKCdjb21tZW50X2NvbnRpbnVlcycpLmxlbmd0aCA+IDA7CisJCQlyZXR1cm4gZmFsc2U7
CisJCX07CisJCXZhciBsaW5lcyA9IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0RWxl
bWVudHNCeUNsYXNzTmFtZSgnd2Via2l0LWxpbmUtY29udGVudCcpOworCQlmb3IgKHZhciBpPTA7
IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykgeworCQkJbGluZXNbaV0uaW5uZXJIVE1MID0gV2ViSW5z
cGVjdG9yLkphdmFzY3JpcHRTeW50YXhIaWdobGlnaHQobGluZXNbaV0uaW5uZXJIVE1MLCBpc0lu
Q29tbWVudChsaW5lc1tpLTFdKSk7CisJCX0KKwl9CiB9CisKK1dlYkluc3BlY3Rvci5KYXZhc2Ny
aXB0U3ludGF4SGlnaGxpZ2h0ID0gZnVuY3Rpb24oY29kZSwgaW5Db21tZW50KSB7CisJdmFyIGtl
eXdvcmRzID0geworCQknYnJlYWsnOiAxLAorCQknZWxzZSc6IDEsCisJCSduZXcnOiAxLAorCQkn
dmFyJzogMSwKKwkJJ2Nhc2UnOiAxLAorCQknZmluYWxseSc6IDEsCisJCSdyZXR1cm4nOiAxLAor
CQkndm9pZCc6IDEsCisJCSdjYXRjaCc6IDEsCisJCSdmb3InOiAxLAorCQknc3dpdGNoJzogMSwK
KwkJJ3doaWxlJzogMSwKKwkJJ2NvbnRpbnVlJzogMSwKKwkJJ2Z1bmN0aW9uJzogMSwKKwkJJ3Ro
aXMnOiAxLAorCQknd2l0aCc6IDEsCisJCSdkZWZhdWx0JzogMSwKKwkJJ2lmJzogMSwKKwkJJ3Ro
cm93JzogMSwKKwkJJ2RlbGV0ZSc6IDEsCisJCSdpbic6IDEsCisJCSd0cnknOiAxLAorCQknZG8n
OiAxLAorCQknaW5zdGFuY2VvZic6IDEsCisJCSd0eXBlb2YnOiAxLAorCQkvLyBGdXR1cmUgUmVz
ZXJ2ZWQgV29yZHMKKwkJJ2Fic3RyYWN0JzogMSwKKwkJJ2VudW0nOiAxLAorCQknaW50JzogMSwK
KwkJJ3Nob3J0JzogMSwKKwkJJ2Jvb2xlYW4nOiAxLAorCQknZXhwb3J0JzogMSwKKwkJJ2ludGVy
ZmFjZSc6IDEsCisJCSdzdGF0aWMnOiAxLAorCQknYnl0ZSc6IDEsCisJCSdleHRlbmRzJzogMSwK
KwkJJ2xvbmcnOiAxLAorCQknc3VwZXInOiAxLAorCQknY2hhcic6IDEsCisJCSdmaW5hbCc6IDEs
CisJCSduYXRpdmUnOiAxLAorCQknc3luY2hyb25pemVkJzogMSwKKwkJJ2NsYXNzJzogMSwKKwkJ
J2Zsb2F0JzogMSwKKwkJJ3BhY2thZ2UnOiAxLAorCQkndGhyb3dzJzogMSwKKwkJJ2NvbnN0Jzog
MSwKKwkJJ2dvdG8nOiAxLAorCQkncHJpdmF0ZSc6IDEsCisJCSd0cmFuc2llbnQnOiAxLAorCQkn
ZGVidWdnZXInOiAxLAorCQknaW1wbGVtZW50cyc6IDEsCisJCSdwcm90ZWN0ZWQnOiAxLAorCQkn
dm9sYXRpbGUnOiAxLAorCQknZG91YmxlJzogMSwKKwkJJ2ltcG9ydCc6IDEsCisJCSdwdWJsaWMn
OiAxCisJfTsKKwl2YXIgaXNEaWdpdCA9IG5ldyBSZWdFeHAoL15cZC8pOworCXZhciBpc0hleCA9
IG5ldyBSZWdFeHAoL15caC8pOworCXZhciBpc0xldHRlciA9IG5ldyBSZWdFeHAoL15cdy8pOwor
CXZhciBpc09wZXJhdG9yID0gbmV3IFJlZ0V4cCgvXihcK3sxLDJ9fFwtezEsMn18IT17MSwyfXxc
KnxcL3xcJXw9ezEsM318PD18Pj18PHsxLDJ9fD57MSwyfXwmezEsMn18XHx7MSwyfXwhKS8pOyAv
LyAKKwlmdW5jdGlvbiBlY2hvQ2hhcihjKSB7CisJCWlmIChjID09ICc8JykKKwkJcmVzdWx0ICs9
ICcmbHQ7JzsKKwkJZWxzZSBpZiAoYyA9PSAnPicpCisJCXJlc3VsdCArPSAnJmd0Oyc7CisJCWVs
c2UgaWYgKGMgPT0gJyYnKQorCQlyZXN1bHQgKz0gJyZhbXA7JzsKKwkJZWxzZSBpZiAoYyA9PSAn
XHQnKQorCQlyZXN1bHQgKz0gJyAgICAnOworCQllbHNlCisJCXJlc3VsdCArPSBjOworCX0KKwl2
YXIgcmVzdWx0ID0gJyc7CisJdmFyIGNQcmV2ID0gJyc7CisJdmFyIGMgPSAnJzsKKwl2YXIgY05l
eHQgPSAnJzsKKwlmb3IgKHZhciBpID0gMDsgaSA8IGNvZGUubGVuZ3RoOyBpKyspIHsKKwkJY1By
ZXYgPSBjOworCQljID0gY29kZVtpXTsKKwkJY05leHQgPSBjb2RlW2krMV07CisJCWlmICgoYyA9
PT0gIi8iICYmIGNOZXh0ID09PSAiKiIpIHx8IGluQ29tbWVudCkgeworCQkJcmVzdWx0ICs9ICc8
c3BhbiBjbGFzcz0iY29tbWVudCI+JzsKKwkJCWVjaG9DaGFyKGMpOworCQkJZWNob0NoYXIoY05l
eHQpOworCQkJZm9yIChpICs9IDI7IGkgPCBjb2RlLmxlbmd0aDsgaSsrKSB7CisJCQkJYyA9IGNv
ZGVbaV07CisJCQkJaWYgKGMgPT0gIlxuIikKKwkJCQkJcmVzdWx0ICs9ICI8L3NwYW4+IjsKKwkJ
CQllY2hvQ2hhcihjKTsKKwkJCQlpZiAoYyA9PSAiXG4iKQorCQkJCQlyZXN1bHQgKz0gJzxzcGFu
IGNsYXNzPSJjb21tZW50Ij4nOworCQkJCWlmIChjUHJldiA9PSAnKicgJiYgYyA9PSAnLycpIHsK
KwkJCQkJdmFyIGNvbW1lbnRFbmQgPSB0cnVlOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY1By
ZXYgPSBjOworCQkJfQkKKwkJCXJlc3VsdCArPSAnPC9zcGFuPic7CisJCQlpZiAoIWNvbW1lbnRF
bmQpCisJCQkJcmVzdWx0ICs9ICc8c3BhbiBjbGFzcz0iY29tbWVudF9jb250aW51ZXMiPjwvc3Bh
bj4nOworCQkJY29udGludWU7CisJCX0gZWxzZSBpZiAoYyA9PT0gJy8nICYmIGNOZXh0ID09PSAn
LycpIHsKKwkJCXJlc3VsdCArPSAnPHNwYW4gY2xhc3M9ImNvbW1lbnQiPic7CisJCQllY2hvQ2hh
cihjKTsKKwkJCWVjaG9DaGFyKGNOZXh0KTsKKwkJCWZvciAoaSArPSAyOyBpIDwgY29kZS5sZW5n
dGg7IGkrKykgeworCQkJCWMgPSBjb2RlW2ldOworCQkJCWlmIChjID09PSAnXG4nKQorCQkJCQli
cmVhazsKKwkJCQllY2hvQ2hhcihjKTsKKwkJCX0KKwkJCXJlc3VsdCArPSAnPC9zcGFuPic7CisJ
CQlpZiAoYyA9PT0gJ1xuJykKKwkJCQllY2hvQ2hhcihjKTsKKwkJCWNvbnRpbnVlOworCQl9IGVs
c2UgaWYgKGMgPT0gJy8nKSB7CisJCQlyZXN1bHQgKz0gJzxzcGFuIGNsYXNzPSJyZWdleHAiPic7
CisJCQllY2hvQ2hhcihjKTsKKwkJCWZvciAoaSArPSAxOyBpIDwgY29kZS5sZW5ndGg7IGkrKykg
eworCQkJCWMgPSBjb2RlW2ldOworCQkJCWlmIChjID09ICcvJyAmJiBjUHJldiAhPSAnXFwnKSB7
CisJCQkJCWZvciAoOyBpIDwgY29kZS5sZW5ndGg7IGkrKykgeworCQkJCQkJY05leHQgPSBjb2Rl
W2krMV07CisJCQkJCQljID0gY29kZVtpXTsKKwkJCQkJCWlmIChjTmV4dCA9PT0gJ2cnIHx8IGNO
ZXh0ID09PSAnaScgfHwgY05leHQgPT09ICdtJykgeworCQkJCQkJCWVjaG9DaGFyKGMpOworCQkJ
CQkJfSBlbHNlIHsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsK
KwkJCQl9CisJCQkJZWNob0NoYXIoYyk7CisJCQkJY1ByZXYgPSBjOworCQkJfQorCQkJZWNob0No
YXIoYyk7CisJCQlyZXN1bHQgKz0gJzwvc3Bhbj4nOworCQkJY29udGludWU7CisJCX0gZWxzZSBp
ZiAoYyA9PSAnIicgfHwgYyA9PSAnXCcnKSB7CisJCQl2YXIgaW5zdHJpbmd0eXBlID0gYzsKKwkJ
CXZhciBzdHJpbmdzdGFydCA9IGk7CisJCQlyZXN1bHQgKz0gJzxzcGFuIGNsYXNzPSJzdHJpbmci
Pic7CisJCQllY2hvQ2hhcihjKTsKKwkJCWZvciAoaSArPSAxOyBpIDwgY29kZS5sZW5ndGg7IGkr
KykgeworCQkJCWMgPSBjb2RlW2ldOworCQkJCWlmIChzdHJpbmdzdGFydCA8IChpIC0gMSkgJiYg
Y1ByZXYgPT0gaW5zdHJpbmd0eXBlICYmIAorCQkJCQljb2RlLmNoYXJBdFtpIC0gMl0gIT0gJ1xc
JykKKwkJCQkJYnJlYWs7CisJCQkJZWNob0NoYXIoYyk7CisJCQkJY1ByZXYgPSBjOworCQkJfQor
CQkJcmVzdWx0ICs9ICc8L3NwYW4+JzsKKwkJCWVjaG9DaGFyKGMpOworCQkJY29udGludWU7CisJ
CX0gZWxzZSBpZiAoYyA9PSAiMCIgJiYgY05leHQgPT0gIngiICYmIAorCQkJKGkgPT0gMCB8fCAo
IWlzTGV0dGVyLnRlc3QoY1ByZXYpICYmICFpc0RpZ2l0LnRlc3QoY1ByZXYpKSkpIHsKKwkJCXJl
c3VsdCArPSAnPHNwYW4gY2xhc3M9Im51bWJlciI+JzsKKwkJCWVjaG9DaGFyKGMpOworCQkJZWNo
b0NoYXIoY05leHQpOworCQkJZm9yIChpICs9IDI7IGkgPCBjb2RlLmxlbmd0aDsgaSsrKSB7CisJ
CQkJYyA9IGNvZGVbaV07CisJCQkJaWYgKCFpc0hleC50ZXN0KGMpKQorCQkJCQlicmVhazsKKwkJ
CQllY2hvQ2hhcihjKTsKKwkJCX0KKwkJCXJlc3VsdCArPSAnPC9zcGFuPic7CisJCQllY2hvQ2hh
cihjKTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKChpc0RpZ2l0LnRlc3QoYykgfHwgKChj
ID09ICctJyB8fCBjID09ICcuJykgJiYgaXNEaWdpdC50ZXN0KGNOZXh0KSkpICYmIAorCQkJKGkg
PT0gMCB8fCAoIWlzTGV0dGVyKGNQcmV2KSAmJiAhaXNEaWdpdChjUHJldikpKSkgeworCQkJcmVz
dWx0ICs9ICI8c3BhbiBjbGFzcz1cIm51bWJlclwiPiI7CisJCQllY2hvQ2hhcihjKTsKKwkJCWZv
ciAoaSArPSAxOyBpIDwgY29kZS5sZW5ndGg7IGkrKykgeworCQkJCWMgPSBjb2RlW2ldOworCQkJ
CWlmICghaXNEaWdpdChjKSAmJiBjICE9ICIuIikKKwkJCQlicmVhazsKKwkJCQllY2hvQ2hhcihj
KTsKKwkJCX0KKwkJCXJlc3VsdCArPSAnPC9zcGFuPic7CisJCQllY2hvQ2hhcihjKTsKKwkJCWNv
bnRpbnVlOworCQl9IGVsc2UgaWYgKGlzT3BlcmF0b3IudGVzdChjb2RlLnN1YnN0cihpLCAzKSkp
IHsKKwkJCXZhciBvcGVyYXRvciA9IGlzT3BlcmF0b3IuZXhlYyhjb2RlLnN1YnN0cihpLCAzKSlb
MF07CisJCQlyZXN1bHQgKz0gJzxzcGFuIGNsYXNzPSJvcGVyYXRvciI+JyArIG9wZXJhdG9yICsg
Jzwvc3Bhbj4nOworCQkJaSArPSBvcGVyYXRvci5sZW5ndGggLSAxOworCQkJY29udGludWU7CisJ
CX0gZWxzZSBpZiAoaXNMZXR0ZXIudGVzdChjKSAmJiAoaSA9PT0gMCB8fCAhaXNMZXR0ZXIudGVz
dChjUHJldikpKSB7CisJCQl2YXIga2V5d29yZCA9IGM7CisJCQl2YXIgY2ogPSAiIjsKKwkJCWZv
ciAodmFyIGogPSBpICsgMTsgaiA8IGkgKyAxMiAmJiBqIDwgY29kZS5sZW5ndGg7IGorKykgewor
CQkJCWNqID0gY29kZVtqXTsKKwkJCQlpZiAoIWlzTGV0dGVyLnRlc3QoY2opKQorCQkJCQlicmVh
azsKKwkJCQlrZXl3b3JkICs9IGNqOworCQkJfQorCQkJaWYgKGtleXdvcmQgPT09ICdmYWxzZScg
fHwga2V5d29yZCA9PT0gJ3RydWUnKSB7CisJCQkJcmVzdWx0ICs9ICc8c3BhbiBjbGFzcz0iYm9v
bGVhbiI+JyArIGtleXdvcmQgKyAnPC9zcGFuPic7CisJCQkJaSArPSBrZXl3b3JkLmxlbmd0aC0x
OworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmIChrZXl3b3Jkc1trZXl3b3JkXSkgeworCQkJ
CXJlc3VsdCArPSAnPHNwYW4gY2xhc3M9ImtleXdvcmQiPicgKyBrZXl3b3JkICsgJzwvc3Bhbj4n
OworCQkJCWkgKz0ga2V5d29yZC5sZW5ndGgtMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQor
CQkKKwkJZWNob0NoYXIoYyk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9OwpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZVZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
Vmlldy5qcwkocmV2aXNpb24gMzQ1MjYpCisrKyBTb3VyY2VWaWV3LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw2ICs4MCw5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VWaWV3LnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICAgIHRoaXMuYXR0YWNoKCk7CiAKICAgICAgICAgICAgIEluc3BlY3RvckNvbnRy
b2xsZXIuYWRkUmVzb3VyY2VTb3VyY2VUb0ZyYW1lKHRoaXMucmVzb3VyY2UuaWRlbnRpZmllciwg
dGhpcy5zb3VyY2VGcmFtZS5lbGVtZW50KTsKKwkJCWlmICh0aGlzLnJlc291cmNlLnR5cGUgPT09
IFdlYkluc3BlY3Rvci5SZXNvdXJjZS5UeXBlLlNjcmlwdCkgeworCQkJCXRoaXMuc291cmNlRnJh
bWUuc3ludGF4SGlnaGxpZ2h0SmF2YXNjcmlwdCgpOworCQkJfQogICAgICAgICB9CiAgICAgfSwK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21720</attachid>
            <date>2008-06-15 20:49:58 -0700</date>
            <delta_ts>2008-06-17 22:33:47 -0700</delta_ts>
            <desc>highlighter rewritten</desc>
            <filename>MyFirstPatch2.txt</filename>
            <type>text/plain</type>
            <size>12721</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZUZyYW1lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZUZyYW1lLmpzCShyZXZp
c2lvbiAzNDUyNikKKysrIFNvdXJjZUZyYW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5
NywyMCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgICAg
IHJldHVybiByb3dzW2xpbmVOdW1iZXJdOwogICAgIH0sCisgICAgCisgICAgbnVtT2ZMaW5lczog
ZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICghdGhpcy5lbGVtZW50LmNvbnRlbnREb2N1bWVudCkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICB2YXIgdGFibGUgPSB0aGlzLmVsZW1lbnQu
Y29udGVudERvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdOworICAgICAg
ICBpZiAoIXRhYmxlKQorICAgICAgICAgICAgcmV0dXJuOwogCisgICAgICAgIHZhciByb3dzID0g
dGFibGUucm93czsKKworICAgICAgICByZXR1cm4gcm93cy5sZW5ndGg7CisgICAgfSwKKyAgICAK
ICAgICBsaW5lTnVtYmVyRm9yU291cmNlUm93OiBmdW5jdGlvbihzb3VyY2VSb3cpCiAgICAgewog
ICAgICAgICAvLyBMaW5lIG51bWJlcnMgYXJlIGEgMS1iYXNlZCBpbmRleCwgYnV0IHRoZSByb3dz
IGNvbGxlY3Rpb24gaXMgMC1iYXNlZC4KQEAgLTE5OSw2ICsyMTIsMTAgQEAgV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0
LWhlaWdodC1zaXplZC10by1maXQgeyBvdmVyZmxvdy15OiBoaWRkZW4gfVxuIjsKICAgICAgICAg
c3R5bGVUZXh0ICs9ICIud2Via2l0LWxpbmUtY29udGVudCB7IGJhY2tncm91bmQtY29sb3I6IHdo
aXRlOyB9XG4iOwogICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQtaGlnaGxpZ2h0ZWQtbGlu
ZSAud2Via2l0LWxpbmUtY29udGVudCB7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwg
MTIwKTsgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yOyAtd2Vi
a2l0LXRyYW5zaXRpb24tZHVyYXRpb246IDFzOyB9XG4iOworICAgICAgICBzdHlsZVRleHQgKz0g
Ii53ZWJraXQtamF2YXNjcmlwdC1jb21tZW50IHsgY29sb3I6IHJnYigzNSwgMTEwLCAzKTsgfVxu
IjsKKyAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWphdmFzY3JpcHQta2V5d29yZCB7IGNv
bG9yOiByZ2IoMTY2LCAyMywgMCk7IH1cbiI7CisgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtp
dC1qYXZhc2NyaXB0LW51bWJlciB7IGNvbG9yOiByZ2IoMjgsIDAsIDIwNyk7IH1cbiI7CisgICAg
ICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZywgLndlYmtpdC1qYXZh
c2NyaXB0LXJlZ2V4cCB7IGNvbG9yOiByZ2IoMTI3LCAxOCwgMTc4KTsgfVxuIjsKIAogICAgICAg
ICBzdHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdHlsZVRleHQ7CiAKQEAgLTQ1Niw1ICs0NzMs
MjQ4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRo
aXMuX2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4dChjdHgsIHRydWUpOwogCiAgICAgICAgIGRl
bGV0ZSB0aGlzLl9uZWVkc0JyZWFrcG9pbnRJbWFnZXM7CisgICAgfSwKKworICAgIF9zeW50YXhI
aWdobGlnaHRKYXZhc2NyaXB0TGluZTogZnVuY3Rpb24obGluZSwgcHJldkxpbmUpIHsKKyAgICAg
ICAgdmFyIGNvZGUgPSBsaW5lLnRleHRDb250ZW50OworICAgICAgICB3aGlsZSAobGluZS5oYXND
aGlsZE5vZGVzKCkpCisgICAgICAgIGxpbmUucmVtb3ZlQ2hpbGQobGluZS5maXJzdENoaWxkKTsK
KyAgICAgICAgZnVuY3Rpb24gY3JlYXRlU3Bhbihjb250ZW50LCBjbGFzc05hbWUpIHsKKyAgICAg
ICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnU1BBTicpOworICAgICAg
ICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgICAgICAgICBzcGFuLmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbnRlbnQpKTsKKyAgICAgICAgICAgIHJl
dHVybiBzcGFuOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGZpbmROdW1iZXIoc3RyKSB7
CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXigtP1xkK1wuP1xkKnwweFxoK3xJbmZpbml0eXxO
YU4pXFcvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2gpCisgICAgICAgICAgICBt
YXRjaCA9IC9eKC0/XGQrXC4/XGQqfDB4XGgrfEluZmluaXR5fE5hTikkLy5leGVjKHN0cik7Cisg
ICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0
ZVNwYW4obWF0Y2hbMV0sICJ3ZWJraXQtamF2YXNjcmlwdC1udW1iZXIiKTsKKyAgICAgICAgICAg
ICAgICBub2RlLl9sZW5ndGggPSBtYXRjaFsxXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgfQorICAgICAgICBmdW5jdGlvbiBmaW5kS2V5d29yZChzdHIpIHsKKyAgICAgICAgICAgIHZh
ciBtYXRjaCA9IC9eKG51bGx8dHJ1ZXxmYWxzZXxicmVha3xjYXNlfGNhdGNofGNvbnN0fGRlZmF1
bHR8ZmluYWxseXxmb3J8aW5zdGFuY2VvZnxlbnd8dmFyfGNvbnRpbnVlfGZ1bmN0aW9ufHJldHVy
bnx2b2lkfGRlbGV0ZXxpZnx0aGlzfGRvfHdoaWxlfGVsc2V8aW58c3dpdGNofHRocm93fHRyeXx0
eXBlb2Z8d2l0aHxkZWJ1Z2dlcnxjbGFzc3xlbnVtfGV4cG9ydHxleHRlbmRzfGltcG9ydHxzdXBl
cilcVy8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKCFtYXRjaCkKKyAgICAgICAgICAgIG1h
dGNoID0gL14obnVsbHx0cnVlfGZhbHNlfGJyZWFrfGNhc2V8Y2F0Y2h8Y29uc3R8ZGVmYXVsdHxm
aW5hbGx5fGZvcnxpbnN0YW5jZW9mfGVud3x2YXJ8Y29udGludWV8ZnVuY3Rpb258cmV0dXJufHZv
aWR8ZGVsZXRlfGlmfHRoaXN8ZG98d2hpbGV8ZWxzZXxpbnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVv
Znx3aXRofGRlYnVnZ2VyfGNsYXNzfGVudW18ZXhwb3J0fGV4dGVuZHN8aW1wb3J0fHN1cGVyKSQv
LmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIHZh
ciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFsxXSwgIndlYmtpdC1qYXZhc2NyaXB0LWtleXdvcmQi
KTsKKyAgICAgICAgICAgICAgICBub2RlLl9sZW5ndGggPSBtYXRjaFsxXS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBmaW5kU2luZ2xlTGluZVN0cmlu
ZyhzdHIpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eIihbXiJcXF18XFwuKSoifF4nKFte
J1xcXXxcXC4pKicvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFswXSwgIndlYmtpdC1qYXZhc2Ny
aXB0LXN0cmluZyIpOworICAgICAgICAgICAgICAgIG5vZGUuX2xlbmd0aCA9IG1hdGNoWzBdLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGZpbmRNdWx0
aWxpbmVDb21tZW50U3RhcnQoc3RyKSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXlwvXCou
KiQvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAg
IHZhciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFswXSwgIndlYmtpdC1qYXZhc2NyaXB0LWNvbW1l
bnQiKTsKKyAgICAgICAgICAgICAgICBub2RlLl9sZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBmaW5kTXVsdGlsaW5lQ29t
bWVudEVuZChzdHIpIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eLio/XCpcLy8uZXhlYyhz
dHIpOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUg
PSBjcmVhdGVTcGFuKG1hdGNoWzBdLCAid2Via2l0LWphdmFzY3JpcHQtY29tbWVudCIpOworICAg
ICAgICAgICAgICAgIG5vZGUuX2xlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGZpbmRNdWx0aWxpbmVTaW5nbGVRdW90ZVN0
cmluZ1N0YXJ0KHN0cikgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14nKFteJ1xcXXxcXC4p
KlxcJC8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAg
ICAgdmFyIG5vZGUgPSBjcmVhdGVTcGFuKG1hdGNoWzBdLCAid2Via2l0LWphdmFzY3JpcHQtc3Ry
aW5nIik7CisgICAgICAgICAgICAgICAgbm9kZS5fbGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoOwor
ICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gZmluZE11bHRpbGluZVNp
bmdsZVF1b3RlU3RyaW5nRW5kKHN0cikgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oW14n
XFxdfFxcLikqPycvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFswXSwgIndlYmtpdC1qYXZhc2Ny
aXB0LXN0cmluZyIpOworICAgICAgICAgICAgICAgIG5vZGUuX2xlbmd0aCA9IG1hdGNoWzBdLmxl
bmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGZpbmRNdWx0
aWxpbmVEb3VibGVRdW90ZVN0cmluZ1N0YXJ0KHN0cikgeworICAgICAgICAgICAgdmFyIG1hdGNo
ID0gL14iKFteIlxcXXxcXC4pKlxcJC8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKG1hdGNo
KSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVTcGFuKG1hdGNoWzBdLCAid2Vi
a2l0LWphdmFzY3JpcHQtc3RyaW5nIik7CisgICAgICAgICAgICAgICAgbm9kZS5fbGVuZ3RoID0g
bWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rp
b24gZmluZE11bHRpbGluZURvdWJsZVF1b3RlU3RyaW5nRW5kKHN0cikgeworICAgICAgICAgICAg
dmFyIG1hdGNoID0gL14oW14iXFxdfFxcLikqPyIvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlm
IChtYXRjaCkgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFsw
XSwgIndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAgICAgICAgICAgICAgIG5vZGUuX2xl
bmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAg
IGZ1bmN0aW9uIGZpbmRNdWx0aWxpbmVSZWdFeHBTdGFydChzdHIpIHsKKyAgICAgICAgICAgIHZh
ciBtYXRjaCA9IC9eXC8oW15cL1xcXXxcXC4pKlxcJC8uZXhlYyhzdHIpOworICAgICAgICAgICAg
aWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVTcGFuKG1hdGNo
WzBdLCAid2Via2l0LWphdmFzY3JpcHQtcmVnZXhwIik7CisgICAgICAgICAgICAgICAgbm9kZS5f
bGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAg
ICAgZnVuY3Rpb24gZmluZE11bHRpbGluZVJlZ0V4cEVuZChzdHIpIHsKKyAgICAgICAgICAgIHZh
ciBtYXRjaCA9IC9eKFteXC9cXF18XFwuKSo/XC9bZ2ltXXswLDN9Ly5leGVjKHN0cik7CisgICAg
ICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0ZVNw
YW4obWF0Y2hbMF0sICJ3ZWJraXQtamF2YXNjcmlwdC1yZWdleHAiKTsKKyAgICAgICAgICAgICAg
ICBub2RlLl9sZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBmdW5jdGlvbiBmaW5kU2luZ2xlTGluZUNvbW1lbnQoc3RyKSB7CisgICAgICAg
ICAgICB2YXIgbWF0Y2ggPSAvXlwvXC8uKnxeXC9cKi4qP1wqXC8vLmV4ZWMoc3RyKTsKKyAgICAg
ICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3Bh
bihtYXRjaFswXSwgIndlYmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKyAgICAgICAgICAgICAg
ICBub2RlLl9sZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
fQorICAgICAgICBmdW5jdGlvbiBmaW5kU2luZ2xlTGluZVJlZ0V4cChzdHIpIHsKKyAgICAgICAg
ICAgIHZhciBtYXRjaCA9IC9eXC8oW15cL1xcXXxcXC4pKlwvW2dpbV17MCwzfS8uZXhlYyhzdHIp
OworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBj
cmVhdGVTcGFuKG1hdGNoWzBdLCAid2Via2l0LWphdmFzY3JpcHQtcmVnZXhwIik7CisgICAgICAg
ICAgICAgICAgbm9kZS5fbGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICAgICAgICAg
IHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIH0KKyAgICAgICAgdmFyIHRtcCA9IDA7CisgICAgICAgIHZhciBpID0gMDsKKyAgICAg
ICAgaWYgKHByZXZMaW5lKSB7CisgICAgICAgICAgICBpZiAocHJldkxpbmUuX2NvbW1lbnRDb250
aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBpZih0b2tlbiA9IGZpbmRNdWx0aWxpbmVDb21tZW50
RW5kKGNvZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gdG9rZW4uX2xlbmd0aDsKKyAg
ICAgICAgICAgICAgICAgICAgdG1wID0gaTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBl
bmRDaGlsZCh0b2tlbik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgdG9rZW4gPSBjcmVhdGVTcGFuKGNvZGUsICJ3ZWJraXQtamF2YXNjcmlwdC1jb21tZW50
Iik7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAg
ICAgICAgICAgICAgICBsaW5lLl9jb21tZW50Q29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGxpbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl
bHNlIGlmIChwcmV2TGluZS5fc2luZ2xlUXVvdGVTdHJpbmdDb250aW51ZXMpIHsKKyAgICAgICAg
ICAgICAgICBpZih0b2tlbiA9IGZpbmRNdWx0aWxpbmVTaW5nbGVRdW90ZVN0cmluZ0VuZChjb2Rl
KSkgeworICAgICAgICAgICAgICAgICAgICBpICs9IHRva2VuLl9sZW5ndGg7CisgICAgICAgICAg
ICAgICAgICAgIHRtcCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQo
dG9rZW4pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRv
a2VuID0gY3JlYXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3JpcHQtc3RyaW5nIik7CisgICAg
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgICAg
ICAgICBsaW5lLl9jb21tZW50Q29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGxpbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChw
cmV2TGluZS5fZG91YmxlUXVvdGVTdHJpbmdDb250aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBp
Zih0b2tlbiA9IGZpbmRNdWx0aWxpbmVEb3VibGVRdW90ZVN0cmluZ0VuZChjb2RlKSkgeworICAg
ICAgICAgICAgICAgICAgICBpICs9IHRva2VuLl9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAg
IHRtcCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOwor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3Jl
YXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3JpcHQtc3RyaW5nIik7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgICAgICAgICBsaW5l
Ll9jb21tZW50Q29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxp
bmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2TGluZS5f
cmVnZXhwQ29udGludWVzKSB7CisgICAgICAgICAgICAgICAgaWYodG9rZW4gPSBmaW5kTXVsdGls
aW5lUmVnRXhwRW5kKGNvZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGkgKz0gdG9rZW4uX2xl
bmd0aDsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gaTsKKyAgICAgICAgICAgICAgICAgICAg
bGluZS5hcHBlbmRDaGlsZCh0b2tlbik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgdG9rZW4gPSBjcmVhdGVTcGFuKGNvZGUsICJ3ZWJraXQtamF2YXNjcmlw
dC1yZWdleHAiKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRDaGlsZCh0b2tlbik7
CisgICAgICAgICAgICAgICAgICAgIGxpbmUuX2NvbW1lbnRDb250aW51ZXMgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbGluZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yICggOyBpIDwgY29kZS5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgdmFyIGNvZGVGcmFnbWVudCA9IGNvZGUuc3Vic3RyKGkpOworICAgICAg
ICAgICAgdmFyIHByZXZDaGFyID0gY29kZVtpIC0gMV07CisgICAgICAgICAgICBpZiAodG9rZW4g
PSBmaW5kU2luZ2xlTGluZUNvbW1lbnQoY29kZUZyYWdtZW50KSkgeworICAgICAgICAgICAgICAg
IGlmICh0bXAgIT09IGkpCisgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVUZXh0Tm9kZShjb2RlLnN1YnN0cmluZyh0bXAsIGkpKSk7CisgICAgICAgICAgICAg
ICAgbGluZS5hcHBlbmRDaGlsZCh0b2tlbik7CisgICAgICAgICAgICAgICAgaSArPSB0b2tlbi5f
bGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICB0bXAgPSBpICsgMTsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAodG9rZW4gPSBmaW5kTXVsdGlsaW5lQ29tbWVudFN0YXJ0KGNvZGVGcmFnbWVudCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodG1wICE9PSBpKQorICAgICAgICAgICAgICAgIGxpbmUu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29kZS5zdWJzdHJpbmcodG1wLCBp
KSkpOworICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAg
ICAgICAgIGxpbmUuX2NvbW1lbnRDb250aW51ZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJl
dHVybiBsaW5lOworICAgICAgICAgICAgfSBlbHNlIGlmICghcHJldkNoYXIgfHwgL15cVy8udGVz
dChwcmV2Q2hhcikpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPSBmaW5kTnVtYmVyKGNv
ZGVGcmFnbWVudCwgY29kZVtpIC0gMV0pIHx8IAorICAgICAgICAgICAgICAgIGZpbmRLZXl3b3Jk
KGNvZGVGcmFnbWVudCwgY29kZVtpIC0gMV0pIHx8CisgICAgICAgICAgICAgICAgZmluZFNpbmds
ZUxpbmVTdHJpbmcoY29kZUZyYWdtZW50KSB8fCAKKyAgICAgICAgICAgICAgICBmaW5kU2luZ2xl
TGluZVJlZ0V4cChjb2RlRnJhZ21lbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAg
IT09IGkpCisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoY29kZS5zdWJzdHJpbmcodG1wLCBpKSkpOworICAgICAgICAgICAgICAgICAg
ICBsaW5lLmFwcGVuZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgaSArPSB0b2tl
bi5fbGVuZ3RoIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gaSArIDE7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA9IGZpbmRNdWx0aWxpbmVTaW5nbGVRdW90ZVN0cmlu
Z1N0YXJ0KGNvZGVGcmFnbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAhPT0g
aSkKKyAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShjb2RlLnN1YnN0cmluZyh0bXAsIGkpKSk7CisgICAgICAgICAgICAgICAgICAgIGxp
bmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgICAgICAgICBsaW5lLl9zaW5nbGVR
dW90ZVN0cmluZ0NvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBs
aW5lOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPSBmaW5kTXVsdGlsaW5lRG91
YmxlUXVvdGVTdHJpbmdTdGFydChjb2RlRnJhZ21lbnQpKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICh0bXAgIT09IGkpCisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoY29kZS5zdWJzdHJpbmcodG1wLCBpKSkpOworICAgICAgICAg
ICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAg
bGluZS5fZG91YmxlUXVvdGVTdHJpbmdDb250aW51ZXMgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbGluZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRva2VuID0gZmlu
ZE11bHRpbGluZVJlZ0V4cFN0YXJ0KGNvZGVGcmFnbWVudCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRtcCAhPT0gaSkKKyAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2RlLnN1YnN0cmluZyh0bXAsIGkpKSk7CisgICAgICAg
ICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgICAgICAg
ICBsaW5lLl9yZWdleHBDb250aW51ZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gbGluZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHRtcCA8IGNvZGUubGVuZ3RoKSB7CisgICAgICAgICAgICBsaW5lLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvZGUuc3Vic3RyaW5nKHRtcCwgaSkpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbGluZTsKKyAgICB9LAorICAgIAorICAgIHN5bnRheEhp
Z2hsaWdodEphdmFzY3JpcHQ6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgcm93TnVtID0gMSwg
bGluZUNvbnRhaW5lciwgbGluZSwgcHJldkxpbmU7CisgICAgICAgIHZhciB0b3RhbExpbmVzID0g
dGhpcy5udW1PZkxpbmVzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHRvdGFsTGlu
ZXM7ICsraSkgeworICAgICAgICAgICAgbGluZUNvbnRhaW5lciA9IHRoaXMuc291cmNlUm93KGkp
OworICAgICAgICAgICAgbGluZSA9IGxpbmVDb250YWluZXIubGFzdENoaWxkOworICAgICAgICAg
ICAgdGhpcy5fc3ludGF4SGlnaGxpZ2h0SmF2YXNjcmlwdExpbmUobGluZSwgcHJldkxpbmUpOwor
ICAgICAgICAgICAgcHJldkxpbmUgPSBsaW5lOworICAgICAgICB9CiAgICAgfQogfQpJbmRleDog
U291cmNlVmlldy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2VWaWV3LmpzCShyZXZpc2lvbiAzNDUy
NikKKysrIFNvdXJjZVZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDkgQEAgV2Vi
SW5zcGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5hdHRh
Y2goKTsKIAogICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5hZGRSZXNvdXJjZVNvdXJj
ZVRvRnJhbWUodGhpcy5yZXNvdXJjZS5pZGVudGlmaWVyLCB0aGlzLnNvdXJjZUZyYW1lLmVsZW1l
bnQpOworICAgICAgICAgICAgaWYgKHRoaXMucmVzb3VyY2UudHlwZSA9PT0gV2ViSW5zcGVjdG9y
LlJlc291cmNlLlR5cGUuU2NyaXB0KSB7CisgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFt
ZS5zeW50YXhIaWdobGlnaHRKYXZhc2NyaXB0KCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICB9LAogCg==
</data>
<flag name="review"
          id="9546"
          type_id="1"
          status="-"
          setter="timothy"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21811</attachid>
            <date>2008-06-17 22:33:47 -0700</date>
            <delta_ts>2008-06-18 10:47:22 -0700</delta_ts>
            <desc>regexp detection improved</desc>
            <filename>MyFirstPatch3.txt</filename>
            <type>text/plain</type>
            <size>12985</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFNjcmlwdFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU2NyaXB0Vmlldy5qcwkocmV2aXNp
b24gMzQ2MjEpCisrKyBTY3JpcHRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5h
dHRhY2goKTsKIAogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFkZFNvdXJjZVRvRnJhbWUo
InRleHQvamF2YXNjcmlwdCIsIHRoaXMuc2NyaXB0LnNvdXJjZSwgdGhpcy5zb3VyY2VGcmFtZS5l
bGVtZW50KTsKKyAgICAgICAgdGhpcy5zY3JpcHQuc291cmNlLnN5bnRheEhpZ2hsaWdodEphdmFz
Y3JpcHQoKTsKICAgICB9LAogCiAgICAgcmV2ZWFsTGluZTogZnVuY3Rpb24obGluZU51bWJlcikK
SW5kZXg6IFNvdXJjZUZyYW1lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZUZyYW1lLmpzCShyZXZp
c2lvbiAzNDYyMSkKKysrIFNvdXJjZUZyYW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDEwIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHN0eWxlVGV4dCArPSAiLndlYmtpdC1oZWlnaHQtc2l6ZWQtdG8tZml0IHsgb3ZlcmZsb3cteTog
aGlkZGVuIH1cbiI7CiAgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1saW5lLWNvbnRlbnQg
eyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfVxuIjsKICAgICAgICAgc3R5bGVUZXh0ICs9ICIu
d2Via2l0LWhpZ2hsaWdodGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeyBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7IC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTog
YmFja2dyb3VuZC1jb2xvcjsgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAxczsgfVxuIjsK
KyAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWphdmFzY3JpcHQtY29tbWVudCB7IGNvbG9y
OiByZ2IoMzUsIDExMCwgMyk7IH1cbiI7CisgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1q
YXZhc2NyaXB0LWtleXdvcmQgeyBjb2xvcjogcmdiKDE2NiwgMjMsIDApOyB9XG4iOworICAgICAg
ICBzdHlsZVRleHQgKz0gIi53ZWJraXQtamF2YXNjcmlwdC1udW1iZXIgeyBjb2xvcjogcmdiKDI4
LCAwLCAyMDcpOyB9XG4iOworICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQtamF2YXNjcmlw
dC1zdHJpbmcsIC53ZWJraXQtamF2YXNjcmlwdC1yZWdleHAgeyBjb2xvcjogcmdiKDEyNywgMTgs
IDE3OCk7IH1cbiI7CiAKICAgICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gc3R5bGVU
ZXh0OwogCkBAIC00NTYsNSArNDYwLDI4MyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4
LCB0cnVlKTsKIAogICAgICAgICBkZWxldGUgdGhpcy5fbmVlZHNCcmVha3BvaW50SW1hZ2VzOwor
ICAgIH0sCisgICAgCisgICAgX3N5bnRheEhpZ2hsaWdodEphdmFzY3JpcHRMaW5lOiBmdW5jdGlv
bihsaW5lLCBwcmV2TGluZSkKKyAgICB7CisgICAgICAgIHZhciBwcmV2aW91c01hdGNoTGVuZ3Ro
ID0gMDsKKyAgICAgICAgdmFyIGNvZGUgPSBsaW5lLnRleHRDb250ZW50OworICAgICAgICB3aGls
ZSAobGluZS5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgICAgICBsaW5lLnJlbW92ZUNoaWxkKGxp
bmUuZmlyc3RDaGlsZCk7CisKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlU3Bhbihjb250ZW50LCBj
bGFzc05hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjbGFzc05h
bWU7CisgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGNvbnRlbnQpKTsKKyAgICAgICAgICAgIHJldHVybiBzcGFuOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gZmluZE51bWJlcihzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBt
YXRjaCA9IC9eKC0/KFxkK1wuP1xkKihbZUVdWystXVxkKyk/fDBbeFhdXGgrfEluZmluaXR5KXxO
YU4pKD86XFd8JCkvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCkgeworICAgICAg
ICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFsxXSwgIndlYmtpdC1qYXZhc2Ny
aXB0LW51bWJlciIpOworICAgICAgICAgICAgICAgIHByZXZpb3VzTWF0Y2hMZW5ndGggPSBtYXRj
aFsxXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IGZpbmRLZXl3b3JkKHN0cikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14o
bnVsbHx0cnVlfGZhbHNlfGJyZWFrfGNhc2V8Y2F0Y2h8Y29uc3R8ZGVmYXVsdHxmaW5hbGx5fGZv
cnxpbnN0YW5jZW9mfGVud3x2YXJ8Y29udGludWV8ZnVuY3Rpb258cmV0dXJufHZvaWR8ZGVsZXRl
fGlmfHRoaXN8ZG98d2hpbGV8ZWxzZXxpbnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnx3aXRofGRl
YnVnZ2VyfGNsYXNzfGVudW18ZXhwb3J0fGV4dGVuZHN8aW1wb3J0fHN1cGVyKSg/OlxXfCQpLy5l
eGVjKHN0cik7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICB2YXIg
bm9kZSA9IGNyZWF0ZVNwYW4obWF0Y2hbMV0sICJ3ZWJraXQtamF2YXNjcmlwdC1rZXl3b3JkIik7
CisgICAgICAgICAgICAgICAgcHJldmlvdXNNYXRjaExlbmd0aCA9IG1hdGNoWzFdLmxlbmd0aDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZmluZFNpbmdsZUxp
bmVTdHJpbmcoc3RyKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXiIoPzpb
XiJcXF18XFwuKSoifF4nKFteJ1xcXXxcXC4pKicvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlm
IChtYXRjaCkgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFsw
XSwgIndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAgICAgICAgICAgICAgIHByZXZpb3Vz
TWF0Y2hMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5v
ZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGZpbmRNdWx0aWxpbmVDb21tZW50U3RhcnQoc3RyKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXlwvXCouKiQvLmV4ZWMoc3RyKTsKKyAgICAg
ICAgICAgIGlmIChtYXRjaCkgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3Bh
bihtYXRjaFswXSwgIndlYmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKyAgICAgICAgICAgICAg
ICBwcmV2aW91c01hdGNoTGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICAgICAgICAg
IHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBmaW5kTXVsdGlsaW5lQ29tbWVudEVuZChzdHIp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eLio/XCpcLy8uZXhlYyhzdHIp
OworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBj
cmVhdGVTcGFuKG1hdGNoWzBdLCAid2Via2l0LWphdmFzY3JpcHQtY29tbWVudCIpOworICAgICAg
ICAgICAgICAgIHByZXZpb3VzTWF0Y2hMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZpbmRNdWx0aWxpbmVTaW5nbGVR
dW90ZVN0cmluZ1N0YXJ0KHN0cikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1hdGNoID0g
L14nKD86W14nXFxdfFxcLikqXFwkLy5leGVjKHN0cik7CisgICAgICAgICAgICBpZiAobWF0Y2gp
IHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0ZVNwYW4obWF0Y2hbMF0sICJ3ZWJr
aXQtamF2YXNjcmlwdC1zdHJpbmciKTsKKyAgICAgICAgICAgICAgICBwcmV2aW91c01hdGNoTGVu
Z3RoID0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAgICAgICAgICAgIHJldHVybiBub2RlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBmaW5kTXVsdGlsaW5lU2luZ2xlUXVvdGVTdHJpbmdFbmQoc3RyKQorICAgICAg
ICB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXig/OlteJ1xcXXxcXC4pKj8nLy5leGVjKHN0
cik7CisgICAgICAgICAgICBpZiAobWF0Y2gpIHsKKyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9
IGNyZWF0ZVNwYW4obWF0Y2hbMF0sICJ3ZWJraXQtamF2YXNjcmlwdC1zdHJpbmciKTsKKyAgICAg
ICAgICAgICAgICBwcmV2aW91c01hdGNoTGVuZ3RoID0gbWF0Y2hbMF0ubGVuZ3RoOworICAgICAg
ICAgICAgICAgIHJldHVybiBub2RlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBmaW5kTXVsdGlsaW5lRG91Ymxl
UXVvdGVTdHJpbmdTdGFydChzdHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9
IC9eIig/OlteIlxcXXxcXC4pKlxcJC8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKG1hdGNo
KSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVTcGFuKG1hdGNoWzBdLCAid2Vi
a2l0LWphdmFzY3JpcHQtc3RyaW5nIik7CisgICAgICAgICAgICAgICAgcHJldmlvdXNNYXRjaExl
bmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gZmluZE11bHRpbGluZURvdWJsZVF1b3RlU3RyaW5nRW5kKHN0cikKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oPzpbXiJcXF18XFwuKSo/Ii8uZXhlYyhz
dHIpOworICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUg
PSBjcmVhdGVTcGFuKG1hdGNoWzBdLCAid2Via2l0LWphdmFzY3JpcHQtc3RyaW5nIik7CisgICAg
ICAgICAgICAgICAgcHJldmlvdXNNYXRjaExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZmluZE11bHRpbGluZVJlZ0V4
cFN0YXJ0KHN0cikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gL15cLyg/Olte
XC9cXF18XFwuKSpcXCQvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmIChtYXRjaCAmJiAvXFx8
XCR8W15cfF1cfFteXHxdLy50ZXN0KG1hdGNoWzBdKSkgeworICAgICAgICAgICAgICAgIHZhciBu
b2RlID0gY3JlYXRlU3BhbihtYXRjaFswXSwgIndlYmtpdC1qYXZhc2NyaXB0LXJlZ2V4cCIpOwor
ICAgICAgICAgICAgICAgIHByZXZpb3VzTWF0Y2hMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZpbmRNdWx0aWxpbmVS
ZWdFeHBFbmQoc3RyKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXig/Olte
XC9cXF18XFwuKSo/XC8oW2dpbV17MCwzfSkvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmICht
YXRjaCkgeworICAgICAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFswXSwg
IndlYmtpdC1qYXZhc2NyaXB0LXJlZ2V4cCIpOworICAgICAgICAgICAgICAgIHByZXZpb3VzTWF0
Y2hMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIGZpbmRTaW5nbGVMaW5lQ29tbWVudChzdHIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHZhciBtYXRjaCA9IC9eXC9cLy4qfF5cL1wqLio/XCpcLy8uZXhlYyhzdHIpOwor
ICAgICAgICAgICAgaWYgKG1hdGNoKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVh
dGVTcGFuKG1hdGNoWzBdLCAid2Via2l0LWphdmFzY3JpcHQtY29tbWVudCIpOworICAgICAgICAg
ICAgICAgIHByZXZpb3VzTWF0Y2hMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbnVs
bDsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZpbmRTaW5nbGVMaW5lUmVnRXhwKHN0
cikKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oXC8oPzpbXlwvXFxdfFxc
LikqXC8oW2dpbV17MCwzfSkpKC4/KS8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKG1hdGNo
ICYmIChtYXRjaFsyXS5sZW5ndGggPiAwIHx8IC9cXHxcJHxbXlx8XVx8W15cfF0vLnRlc3QobWF0
Y2hbMV0pIHx8IC9cLnw7fCwvLnRlc3QobWF0Y2hbM10pKSkgeworICAgICAgICAgICAgICAgIHZh
ciBub2RlID0gY3JlYXRlU3BhbihtYXRjaFsxXSwgIndlYmtpdC1qYXZhc2NyaXB0LXJlZ2V4cCIp
OworICAgICAgICAgICAgICAgIHByZXZpb3VzTWF0Y2hMZW5ndGggPSBtYXRjaFsxXS5sZW5ndGg7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIHZhciB0bXAgPSAwOworICAgICAg
ICB2YXIgaSA9IDA7CisgICAgICAgIGlmIChwcmV2TGluZSkgeworICAgICAgICAgICAgaWYgKHBy
ZXZMaW5lLl9jb21tZW50Q29udGludWVzKSB7CisgICAgICAgICAgICAgICAgaWYodG9rZW4gPSBm
aW5kTXVsdGlsaW5lQ29tbWVudEVuZChjb2RlKSkgeworICAgICAgICAgICAgICAgICAgICBpICs9
IHByZXZpb3VzTWF0Y2hMZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IGk7CisgICAg
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3JlYXRlU3Bhbihjb2RlLCAi
d2Via2l0LWphdmFzY3JpcHQtY29tbWVudCIpOworICAgICAgICAgICAgICAgICAgICBsaW5lLmFw
cGVuZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5fY29tbWVudENvbnRp
bnVlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldkxpbmUuX3NpbmdsZVF1b3RlU3Ry
aW5nQ29udGludWVzKSB7CisgICAgICAgICAgICAgICAgaWYodG9rZW4gPSBmaW5kTXVsdGlsaW5l
U2luZ2xlUXVvdGVTdHJpbmdFbmQoY29kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBw
cmV2aW91c01hdGNoTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB0bXAgPSBpOworICAgICAg
ICAgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNyZWF0ZVNwYW4oY29kZSwgIndl
YmtpdC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVu
ZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5fY29tbWVudENvbnRpbnVl
cyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldkxpbmUuX2RvdWJsZVF1b3RlU3RyaW5n
Q29udGludWVzKSB7CisgICAgICAgICAgICAgICAgaWYodG9rZW4gPSBmaW5kTXVsdGlsaW5lRG91
YmxlUXVvdGVTdHJpbmdFbmQoY29kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaSArPSBwcmV2
aW91c01hdGNoTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICB0bXAgPSBpOworICAgICAgICAg
ICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNyZWF0ZVNwYW4oY29kZSwgIndlYmtp
dC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENo
aWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5fY29tbWVudENvbnRpbnVlcyA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaW5lOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldkxpbmUuX3JlZ2V4cENvbnRpbnVlcykgewor
ICAgICAgICAgICAgICAgIGlmKHRva2VuID0gZmluZE11bHRpbGluZVJlZ0V4cEVuZChjb2RlKSkg
eworICAgICAgICAgICAgICAgICAgICBpICs9IHByZXZpb3VzTWF0Y2hMZW5ndGg7CisgICAgICAg
ICAgICAgICAgICAgIHRtcCA9IGk7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hp
bGQodG9rZW4pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IHRva2VuID0gY3JlYXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3JpcHQtcmVnZXhwIik7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAg
ICAgICAgICBsaW5lLl9jb21tZW50Q29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGxpbmU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIGZvciAoIDsgaSA8IGNvZGUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IHZhciBjb2RlRnJhZ21lbnQgPSBjb2RlLnN1YnN0cihpKTsKKyAgICAgICAgICAgIHZhciBwcmV2
Q2hhciA9IGNvZGVbaSAtIDFdOworICAgICAgICAgICAgaWYgKHRva2VuID0gZmluZFNpbmdsZUxp
bmVDb21tZW50KGNvZGVGcmFnbWVudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wICE9PSBp
KQorICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKGNvZGUuc3Vic3RyaW5nKHRtcCwgaSkpKTsKKyAgICAgICAgICAgICAgICBsaW5lLmFw
cGVuZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICBpICs9IHByZXZpb3VzTWF0Y2hMZW5n
dGggLSAxOworICAgICAgICAgICAgICAgIHRtcCA9IGkgKyAxOworICAgICAgICAgICAgfSBlbHNl
IGlmICh0b2tlbiA9IGZpbmRNdWx0aWxpbmVDb21tZW50U3RhcnQoY29kZUZyYWdtZW50KSkgewor
ICAgICAgICAgICAgICAgIGlmICh0bXAgIT09IGkpCisgICAgICAgICAgICAgICAgICAgIGxpbmUu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29kZS5zdWJzdHJpbmcodG1wLCBp
KSkpOworICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAg
ICAgICAgIGxpbmUuX2NvbW1lbnRDb250aW51ZXMgPSB0cnVlOworICAgICAgICAgICAgICAgIHJl
dHVybiBsaW5lOworICAgICAgICAgICAgfSBlbHNlIGlmICghcHJldkNoYXIgfHwgL15cVy8udGVz
dChwcmV2Q2hhcikpIHsKKyAgICAgICAgICAgICAgICBpZiAodG9rZW4gPSBmaW5kTnVtYmVyKGNv
ZGVGcmFnbWVudCwgY29kZVtpIC0gMV0pIHx8IAorICAgICAgICAgICAgICAgICAgICBmaW5kS2V5
d29yZChjb2RlRnJhZ21lbnQsIGNvZGVbaSAtIDFdKSB8fAorICAgICAgICAgICAgICAgICAgICBm
aW5kU2luZ2xlTGluZVN0cmluZyhjb2RlRnJhZ21lbnQpIHx8IAorICAgICAgICAgICAgICAgICAg
ICBmaW5kU2luZ2xlTGluZVJlZ0V4cChjb2RlRnJhZ21lbnQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAgIT09IGkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvZGUuc3Vic3RyaW5nKHRtcCwgaSkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRDaGlsZCh0b2tlbik7CisgICAgICAgICAgICAg
ICAgICAgIGkgKz0gcHJldmlvdXNNYXRjaExlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgICAg
IHRtcCA9IGkgKyAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPSBmaW5kTXVs
dGlsaW5lU2luZ2xlUXVvdGVTdHJpbmdTdGFydChjb2RlRnJhZ21lbnQpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh0bXAgIT09IGkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvZGUuc3Vic3RyaW5nKHRtcCwgaSkp
KTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5hcHBlbmRDaGlsZCh0b2tlbik7CisgICAgICAg
ICAgICAgICAgICAgIGxpbmUuX3NpbmdsZVF1b3RlU3RyaW5nQ29udGludWVzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICh0b2tlbiA9IGZpbmRNdWx0aWxpbmVEb3VibGVRdW90ZVN0cmluZ1N0YXJ0KGNvZGVGcmFnbWVu
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAhPT0gaSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29kZS5z
dWJzdHJpbmcodG1wLCBpKSkpOworICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxk
KHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5fZG91YmxlUXVvdGVTdHJpbmdDb250
aW51ZXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gbGluZTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHRva2VuID0gZmluZE11bHRpbGluZVJlZ0V4cFN0YXJ0KGNvZGVG
cmFnbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcCAhPT0gaSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
Y29kZS5zdWJzdHJpbmcodG1wLCBpKSkpOworICAgICAgICAgICAgICAgICAgICBsaW5lLmFwcGVu
ZENoaWxkKHRva2VuKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZS5fcmVnZXhwQ29udGludWVz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh0bXAgPCBjb2RlLmxl
bmd0aCkKKyAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoY29kZS5zdWJzdHJpbmcodG1wLCBpKSkpOworICAgICAgICByZXR1cm4gbGluZTsKKyAgICB9
LAorICAgIAorICAgIHN5bnRheEhpZ2hsaWdodEphdmFzY3JpcHQ6IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciB0YWJsZSA9IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0RWxl
bWVudHNCeVRhZ05hbWUoInRhYmxlIilbMF07CisgICAgICAgIGlmICghdGFibGUpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzOworICAgICAgICB2
YXIgcm93c0xlbmd0aCA9IHJvd3MubGVuZ3RoOworICAgICAgICB2YXIgcHJldmlvdXNDZWxsID0g
bnVsbDsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93c0xlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICB2YXIgcm93ID0gcm93c1tpXTsKKyAgICAgICAgICAgIHZhciBj
ZWxsID0gcm93LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpWzFdOworICAgICAgICAgICAgaWYg
KCFjZWxsKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGhpcy5fc3lu
dGF4SGlnaGxpZ2h0SmF2YXNjcmlwdExpbmUoY2VsbCwgcHJldmlvdXNDZWxsKTsKKyAgICAgICAg
ICAgIHByZXZpb3VzQ2VsbCA9IGNlbGw7CisgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3Vy
Y2VWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZVZpZXcuanMJKHJldmlzaW9uIDM0NjIxKQor
KysgU291cmNlVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBXZWJJbnNw
ZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmF0dGFjaCgp
OwogCiAgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFkZFJlc291cmNlU291cmNlVG9G
cmFtZSh0aGlzLnJlc291cmNlLmlkZW50aWZpZXIsIHRoaXMuc291cmNlRnJhbWUuZWxlbWVudCk7
CisgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVz
b3VyY2UuVHlwZS5TY3JpcHQpCisgICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zeW50
YXhIaWdobGlnaHRKYXZhc2NyaXB0KCk7CiAgICAgICAgIH0KICAgICB9LAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21820</attachid>
            <date>2008-06-18 10:47:22 -0700</date>
            <delta_ts>2008-06-18 13:28:36 -0700</delta_ts>
            <desc>lines reduced</desc>
            <filename>MyFirstPatch4.txt</filename>
            <type>text/plain</type>
            <size>8974</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFNjcmlwdFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU2NyaXB0Vmlldy5qcwkocmV2aXNp
b24gMzQ2MjEpCisrKyBTY3JpcHRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5h
dHRhY2goKTsKIAogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFkZFNvdXJjZVRvRnJhbWUo
InRleHQvamF2YXNjcmlwdCIsIHRoaXMuc2NyaXB0LnNvdXJjZSwgdGhpcy5zb3VyY2VGcmFtZS5l
bGVtZW50KTsKKyAgICAgICAgdGhpcy5zY3JpcHQuc291cmNlLnN5bnRheEhpZ2hsaWdodEphdmFz
Y3JpcHQoKTsKICAgICB9LAogCiAgICAgcmV2ZWFsTGluZTogZnVuY3Rpb24obGluZU51bWJlcikK
SW5kZXg6IFNvdXJjZUZyYW1lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZUZyYW1lLmpzCShyZXZp
c2lvbiAzNDYyMSkKKysrIFNvdXJjZUZyYW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDEwIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHN0eWxlVGV4dCArPSAiLndlYmtpdC1oZWlnaHQtc2l6ZWQtdG8tZml0IHsgb3ZlcmZsb3cteTog
aGlkZGVuIH1cbiI7CiAgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1saW5lLWNvbnRlbnQg
eyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfVxuIjsKICAgICAgICAgc3R5bGVUZXh0ICs9ICIu
d2Via2l0LWhpZ2hsaWdodGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeyBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7IC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTog
YmFja2dyb3VuZC1jb2xvcjsgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAxczsgfVxuIjsK
KyAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWphdmFzY3JpcHQtY29tbWVudCB7IGNvbG9y
OiByZ2IoMzUsIDExMCwgMyk7IH1cbiI7CisgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1q
YXZhc2NyaXB0LWtleXdvcmQgeyBjb2xvcjogcmdiKDE2NiwgMjMsIDApOyB9XG4iOworICAgICAg
ICBzdHlsZVRleHQgKz0gIi53ZWJraXQtamF2YXNjcmlwdC1udW1iZXIgeyBjb2xvcjogcmdiKDI4
LCAwLCAyMDcpOyB9XG4iOworICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQtamF2YXNjcmlw
dC1zdHJpbmcsIC53ZWJraXQtamF2YXNjcmlwdC1yZWdleHAgeyBjb2xvcjogcmdiKDEyNywgMTgs
IDE3OCk7IH1cbiI7CiAKICAgICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gc3R5bGVU
ZXh0OwogCkBAIC00NTYsNSArNDYwLDE1MSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4
LCB0cnVlKTsKIAogICAgICAgICBkZWxldGUgdGhpcy5fbmVlZHNCcmVha3BvaW50SW1hZ2VzOwor
ICAgIH0sCisgICAgCisgICAgX3N5bnRheEhpZ2hsaWdodEphdmFzY3JpcHRMaW5lOiBmdW5jdGlv
bihsaW5lLCBwcmV2TGluZSkKKyAgICB7CisgICAgICAgIHZhciBwcmV2aW91c01hdGNoTGVuZ3Ro
ID0gMDsKKyAgICAgICAgdmFyIGNvZGUgPSBsaW5lLnRleHRDb250ZW50OworICAgICAgICB3aGls
ZSAobGluZS5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgICAgICBsaW5lLnJlbW92ZUNoaWxkKGxp
bmUuZmlyc3RDaGlsZCk7CisKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlU3Bhbihjb250ZW50LCBj
bGFzc05hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjbGFzc05h
bWU7CisgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGNvbnRlbnQpKTsKKyAgICAgICAgICAgIHJldHVybiBzcGFuOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gZ2VuZXJhdGVGaW5kZXIocmVnZXgsIG1hdGNoTnVtYmVyLCBjbGFzc05hbWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzdHIpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbWF0Y2ggPSByZWdleC5leGVjKHN0cik7CisgICAgICAgICAgICAgICAgaWYg
KCFtYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAg
ICAgcHJldmlvdXNNYXRjaExlbmd0aCA9IG1hdGNoW21hdGNoTnVtYmVyXS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNwYW4obWF0Y2hbbWF0Y2hOdW1iZXJdLCBjbGFzc05h
bWUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBmaW5kTnVtYmVy
ID0gZ2VuZXJhdGVGaW5kZXIoL14oLT8oXGQrXC4/XGQqKFtlRV1bKy1dXGQrKT98MFt4WF1caCt8
SW5maW5pdHkpfE5hTikoPzpcV3wkKS8sIDEsICJ3ZWJraXQtamF2YXNjcmlwdC1udW1iZXIiKSwK
KyAgICAgICAgICAgIGZpbmRLZXl3b3JkID0gZ2VuZXJhdGVGaW5kZXIoL14obnVsbHx0cnVlfGZh
bHNlfGJyZWFrfGNhc2V8Y2F0Y2h8Y29uc3R8ZGVmYXVsdHxmaW5hbGx5fGZvcnxpbnN0YW5jZW9m
fGVud3x2YXJ8Y29udGludWV8ZnVuY3Rpb258cmV0dXJufHZvaWR8ZGVsZXRlfGlmfHRoaXN8ZG98
d2hpbGV8ZWxzZXxpbnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnx3aXRofGRlYnVnZ2VyfGNsYXNz
fGVudW18ZXhwb3J0fGV4dGVuZHN8aW1wb3J0fHN1cGVyKSg/OlxXfCQpLywgMSwgIndlYmtpdC1q
YXZhc2NyaXB0LWtleXdvcmQiKSwKKyAgICAgICAgICAgIGZpbmRTaW5nbGVMaW5lU3RyaW5nID0g
Z2VuZXJhdGVGaW5kZXIoL14iKD86W14iXFxdfFxcLikqInxeJyhbXidcXF18XFwuKSonLywgMCwg
IndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZyIpLAorICAgICAgICAgICAgZmluZE11bHRpbGluZUNv
bW1lbnRTdGFydCA9IGdlbmVyYXRlRmluZGVyKC9eXC9cKi4qJC8sIDAsICJ3ZWJraXQtamF2YXNj
cmlwdC1jb21tZW50IiksCisgICAgICAgICAgICBmaW5kTXVsdGlsaW5lQ29tbWVudEVuZCA9IGdl
bmVyYXRlRmluZGVyKC9eLio/XCpcLy8sIDAsICJ3ZWJraXQtamF2YXNjcmlwdC1jb21tZW50Iiks
CisgICAgICAgICAgICBmaW5kTXVsdGlsaW5lU2luZ2xlUXVvdGVTdHJpbmdTdGFydCA9IGdlbmVy
YXRlRmluZGVyKC9eJyg/OlteJ1xcXXxcXC4pKlxcJC8sIDAsICJ3ZWJraXQtamF2YXNjcmlwdC1z
dHJpbmciKSwKKyAgICAgICAgICAgIGZpbmRNdWx0aWxpbmVTaW5nbGVRdW90ZVN0cmluZ0VuZCA9
IGdlbmVyYXRlRmluZGVyKC9eKD86W14nXFxdfFxcLikqPycvLCAwLCAid2Via2l0LWphdmFzY3Jp
cHQtc3RyaW5nIiksCisgICAgICAgICAgICBmaW5kTXVsdGlsaW5lRG91YmxlUXVvdGVTdHJpbmdT
dGFydCA9IGdlbmVyYXRlRmluZGVyKC9eIig/OlteIlxcXXxcXC4pKlxcJC8sIDAsICJ3ZWJraXQt
amF2YXNjcmlwdC1zdHJpbmciKSwKKyAgICAgICAgICAgIGZpbmRNdWx0aWxpbmVEb3VibGVRdW90
ZVN0cmluZ0VuZCA9IGdlbmVyYXRlRmluZGVyKC9eKD86W14iXFxdfFxcLikqPyIvLCAwLCAid2Vi
a2l0LWphdmFzY3JpcHQtc3RyaW5nIiksCisgICAgICAgICAgICBmaW5kTXVsdGlsaW5lUmVnRXhw
RW5kID0gZ2VuZXJhdGVGaW5kZXIoL14oPzpbXlwvXFxdfFxcLikqP1wvKFtnaW1dezAsM30pLywg
MCwgIndlYmtpdC1qYXZhc2NyaXB0LXJlZ2V4cCIpLAorICAgICAgICAgICAgZmluZFNpbmdsZUxp
bmVDb21tZW50ID0gZ2VuZXJhdGVGaW5kZXIoL15cL1wvLip8XlwvXCouKj9cKlwvLywgMCwgIndl
YmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKworICAgICAgICBmdW5jdGlvbiBmaW5kTXVsdGls
aW5lUmVnRXhwU3RhcnQoc3RyKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAv
XlwvKD86W15cL1xcXXxcXC4pKlxcJC8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKCFtYXRj
aCB8fCAhL1xcfFwkfFteXHxdXHxbXlx8XS8udGVzdChtYXRjaFswXSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB2YXIgbm9kZSA9IGNyZWF0ZVNwYW4obWF0Y2hb
MF0sICJ3ZWJraXQtamF2YXNjcmlwdC1yZWdleHAiKTsKKyAgICAgICAgICAgIHByZXZpb3VzTWF0
Y2hMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gbm9kZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGZpbmRTaW5nbGVMaW5lUmVnRXhwKHN0cikKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIG1hdGNoID0gL14oXC8oPzpbXlwvXFxdfFxcLikqXC8o
W2dpbV17MCwzfSkpKC4/KS8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKCFtYXRjaCB8fCAh
KG1hdGNoWzJdLmxlbmd0aCA+IDAgfHwgL1xcfFwkfFteXHxdXHxbXlx8XS8udGVzdChtYXRjaFsx
XSkgfHwgL1wufDt8LC8udGVzdChtYXRjaFszXSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBu
dWxsOworICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVTcGFuKG1hdGNoWzFdLCAid2Via2l0
LWphdmFzY3JpcHQtcmVnZXhwIik7CisgICAgICAgICAgICBwcmV2aW91c01hdGNoTGVuZ3RoID0g
bWF0Y2hbMV0ubGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgdG9rZW4sCisgICAgICAgICAgICB0bXAgPSAwLAorICAgICAgICAgICAgaSA9
IDA7CisKKyAgICAgICAgaWYgKHByZXZMaW5lKSB7CisgICAgICAgICAgICBpZiAocHJldkxpbmUu
X2NvbW1lbnRDb250aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoISh0b2tlbiA9IGZpbmRN
dWx0aWxpbmVDb21tZW50RW5kKGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9
IGNyZWF0ZVNwYW4oY29kZSwgIndlYmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGluZS5fY29tbWVudENvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2TGluZS5fc2luZ2xlUXVvdGVTdHJpbmdD
b250aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoISh0b2tlbiA9IGZpbmRNdWx0aWxpbmVT
aW5nbGVRdW90ZVN0cmluZ0VuZChjb2RlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4g
PSBjcmVhdGVTcGFuKGNvZGUsICJ3ZWJraXQtamF2YXNjcmlwdC1zdHJpbmciKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGluZS5fc2luZ2xlUXVvdGVTdHJpbmdDb250aW51ZXMgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldkxpbmUuX2RvdWJsZVF1
b3RlU3RyaW5nQ29udGludWVzKSB7CisgICAgICAgICAgICAgICAgaWYgKCEodG9rZW4gPSBmaW5k
TXVsdGlsaW5lRG91YmxlUXVvdGVTdHJpbmdFbmQoY29kZSkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRva2VuID0gY3JlYXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3JpcHQtc3RyaW5nIik7
CisgICAgICAgICAgICAgICAgICAgIGxpbmUuX2RvdWJsZVF1b3RlU3RyaW5nQ29udGludWVzID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZMaW5l
Ll9yZWdleHBDb250aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoISh0b2tlbiA9IGZpbmRN
dWx0aWxpbmVSZWdFeHBFbmQoY29kZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0g
Y3JlYXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3JpcHQtcmVnZXhwIik7CisgICAgICAgICAg
ICAgICAgICAgIGxpbmUuX3JlZ2V4cENvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2VuKSB7CisgICAgICAgICAgICAg
ICAgaSArPSBwcmV2aW91c01hdGNoTGVuZ3RoID8gcHJldmlvdXNNYXRjaExlbmd0aCA6IGNvZGUu
bGVuZ3RoOworICAgICAgICAgICAgICAgIHRtcCA9IGk7CisgICAgICAgICAgICAgICAgbGluZS5h
cHBlbmRDaGlsZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
b3IgKCA7IGkgPCBjb2RlLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY29kZUZyYWdt
ZW50ID0gY29kZS5zdWJzdHIoaSk7CisgICAgICAgICAgICB2YXIgcHJldkNoYXIgPSBjb2RlW2kg
LSAxXTsKKyAgICAgICAgICAgIHRva2VuID0gZmluZFNpbmdsZUxpbmVDb21tZW50KGNvZGVGcmFn
bWVudCk7CisgICAgICAgICAgICBpZiAoIXRva2VuKSB7CisgICAgICAgICAgICAgICAgaWYgKCh0
b2tlbiA9IGZpbmRNdWx0aWxpbmVDb21tZW50U3RhcnQoY29kZUZyYWdtZW50KSkpCisgICAgICAg
ICAgICAgICAgICAgIGxpbmUuX2NvbW1lbnRDb250aW51ZXMgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKCFwcmV2Q2hhciB8fCAvXlxXLy50ZXN0KHByZXZDaGFyKSkgeworICAgICAg
ICAgICAgICAgICAgICB0b2tlbiA9IGZpbmROdW1iZXIoY29kZUZyYWdtZW50LCBjb2RlW2kgLSAx
XSkgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZEtleXdvcmQoY29kZUZyYWdt
ZW50LCBjb2RlW2kgLSAxXSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kU2lu
Z2xlTGluZVN0cmluZyhjb2RlRnJhZ21lbnQpIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZpbmRTaW5nbGVMaW5lUmVnRXhwKGNvZGVGcmFnbWVudCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghdG9rZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9IGZp
bmRNdWx0aWxpbmVTaW5nbGVRdW90ZVN0cmluZ1N0YXJ0KGNvZGVGcmFnbWVudCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGluZS5fc2luZ2xlUXVvdGVTdHJpbmdDb250aW51ZXMgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPSBmaW5kTXVsdGls
aW5lRG91YmxlUXVvdGVTdHJpbmdTdGFydChjb2RlRnJhZ21lbnQpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxpbmUuX2RvdWJsZVF1b3RlU3RyaW5nQ29udGludWVzID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID0gZmluZE11bHRpbGluZVJlZ0V4
cFN0YXJ0KGNvZGVGcmFnbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5f
cmVnZXhwQ29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbikgeworICAgICAg
ICAgICAgICAgIGlmICh0bXAgIT09IGkpCisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29kZS5zdWJzdHJpbmcodG1wLCBpKSkpOwor
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgICAg
IGkgKz0gcHJldmlvdXNNYXRjaExlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgdG1wID0gaSAr
IDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodG1wIDwgY29kZS5s
ZW5ndGgpCisgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKGNvZGUuc3Vic3RyaW5nKHRtcCwgaSkpKTsKKyAgICB9LAorICAgIAorICAgIHN5bnRheEhp
Z2hsaWdodEphdmFzY3JpcHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0YWJsZSA9
IHRoaXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxl
IilbMF07CisgICAgICAgIGlmICghdGFibGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgdmFyIHJvd3MgPSB0YWJsZS5yb3dzOworICAgICAgICB2YXIgcm93c0xlbmd0aCA9IHJvd3Mu
bGVuZ3RoOworICAgICAgICB2YXIgcHJldmlvdXNDZWxsID0gbnVsbDsKKyAgICAgICAgCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93c0xlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2
YXIgcm93ID0gcm93c1tpXTsKKyAgICAgICAgICAgIHZhciBjZWxsID0gcm93LmdldEVsZW1lbnRz
QnlUYWdOYW1lKCJ0ZCIpWzFdOworICAgICAgICAgICAgaWYgKCFjZWxsKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGhpcy5fc3ludGF4SGlnaGxpZ2h0SmF2YXNjcmlw
dExpbmUoY2VsbCwgcHJldmlvdXNDZWxsKTsKKyAgICAgICAgICAgIHByZXZpb3VzQ2VsbCA9IGNl
bGw7CisgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2VWaWV3LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZVZpZXcuanMJKHJldmlzaW9uIDM0NjIxKQorKysgU291cmNlVmlldy5qcwkod29y
a2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90
b3R5cGUgPSB7CiAgICAgICAgICAgICB0aGlzLmF0dGFjaCgpOwogCiAgICAgICAgICAgICBJbnNw
ZWN0b3JDb250cm9sbGVyLmFkZFJlc291cmNlU291cmNlVG9GcmFtZSh0aGlzLnJlc291cmNlLmlk
ZW50aWZpZXIsIHRoaXMuc291cmNlRnJhbWUuZWxlbWVudCk7CisgICAgICAgICAgICBpZiAodGhp
cy5yZXNvdXJjZS50eXBlID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQpCisg
ICAgICAgICAgICAgICAgdGhpcy5zb3VyY2VGcmFtZS5zeW50YXhIaWdobGlnaHRKYXZhc2NyaXB0
KCk7CiAgICAgICAgIH0KICAgICB9LAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21822</attachid>
            <date>2008-06-18 13:28:36 -0700</date>
            <delta_ts>2008-06-18 17:19:38 -0700</delta_ts>
            <desc>delete</desc>
            <filename>MyFirstPatch5.txt</filename>
            <type>text/plain</type>
            <size>9415</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFNjcmlwdFZpZXcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU2NyaXB0Vmlldy5qcwkocmV2aXNp
b24gMzQ2MjEpCisrKyBTY3JpcHRWaWV3LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3
IEBAIFdlYkluc3BlY3Rvci5TY3JpcHRWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5h
dHRhY2goKTsKIAogICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVyLmFkZFNvdXJjZVRvRnJhbWUo
InRleHQvamF2YXNjcmlwdCIsIHRoaXMuc2NyaXB0LnNvdXJjZSwgdGhpcy5zb3VyY2VGcmFtZS5l
bGVtZW50KTsKKyAgICAgICAgdGhpcy5zY3JpcHQuc291cmNlLnN5bnRheEhpZ2hsaWdodEphdmFz
Y3JpcHQoKTsKICAgICB9LAogCiAgICAgcmV2ZWFsTGluZTogZnVuY3Rpb24obGluZU51bWJlcikK
SW5kZXg6IFNvdXJjZUZyYW1lLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZUZyYW1lLmpzCShyZXZp
c2lvbiAzNDYyMSkKKysrIFNvdXJjZUZyYW1lLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDEwIEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAg
IHN0eWxlVGV4dCArPSAiLndlYmtpdC1oZWlnaHQtc2l6ZWQtdG8tZml0IHsgb3ZlcmZsb3cteTog
aGlkZGVuIH1cbiI7CiAgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1saW5lLWNvbnRlbnQg
eyBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgfVxuIjsKICAgICAgICAgc3R5bGVUZXh0ICs9ICIu
d2Via2l0LWhpZ2hsaWdodGVkLWxpbmUgLndlYmtpdC1saW5lLWNvbnRlbnQgeyBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2IoMjU1LCAyNTUsIDEyMCk7IC13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eTog
YmFja2dyb3VuZC1jb2xvcjsgLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uOiAxczsgfVxuIjsK
KyAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWphdmFzY3JpcHQtY29tbWVudCB7IGNvbG9y
OiByZ2IoMzUsIDExMCwgMyk7IH1cbiI7CisgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1q
YXZhc2NyaXB0LWtleXdvcmQgeyBjb2xvcjogcmdiKDE2NiwgMjMsIDApOyB9XG4iOworICAgICAg
ICBzdHlsZVRleHQgKz0gIi53ZWJraXQtamF2YXNjcmlwdC1udW1iZXIgeyBjb2xvcjogcmdiKDI4
LCAwLCAyMDcpOyB9XG4iOworICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQtamF2YXNjcmlw
dC1zdHJpbmcsIC53ZWJraXQtamF2YXNjcmlwdC1yZWdleHAgeyBjb2xvcjogcmdiKDEyNywgMTgs
IDE3OCk7IH1cbiI7CiAKICAgICAgICAgc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gc3R5bGVU
ZXh0OwogCkBAIC00NTYsNSArNDYwLDE2MyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlID0gewogICAgICAgICB0aGlzLl9kcmF3UHJvZ3JhbUNvdW50ZXJJbkNvbnRleHQoY3R4
LCB0cnVlKTsKIAogICAgICAgICBkZWxldGUgdGhpcy5fbmVlZHNCcmVha3BvaW50SW1hZ2VzOwor
ICAgIH0sCisgICAgCisgICAgX3N5bnRheEhpZ2hsaWdodEphdmFzY3JpcHRMaW5lOiBmdW5jdGlv
bihsaW5lLCBwcmV2TGluZSkKKyAgICB7CisgICAgICAgIHZhciBwcmV2aW91c01hdGNoTGVuZ3Ro
ID0gMDsKKyAgICAgICAgdmFyIGNvZGUgPSBsaW5lLnRleHRDb250ZW50OworICAgICAgICB3aGls
ZSAobGluZS5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgICAgICBsaW5lLnJlbW92ZUNoaWxkKGxp
bmUuZmlyc3RDaGlsZCk7CisKKyAgICAgICAgZnVuY3Rpb24gY3JlYXRlU3Bhbihjb250ZW50LCBj
bGFzc05hbWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOworICAgICAgICAgICAgc3Bhbi5jbGFzc05hbWUgPSBjbGFzc05h
bWU7CisgICAgICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGNvbnRlbnQpKTsKKyAgICAgICAgICAgIHJldHVybiBzcGFuOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gZ2VuZXJhdGVGaW5kZXIocmVnZXgsIG1hdGNoTnVtYmVyLCBjbGFzc05hbWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzdHIpIHsKKyAgICAgICAg
ICAgICAgICB2YXIgbWF0Y2ggPSByZWdleC5leGVjKHN0cik7CisgICAgICAgICAgICAgICAgaWYg
KCFtYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAg
ICAgcHJldmlvdXNNYXRjaExlbmd0aCA9IG1hdGNoW21hdGNoTnVtYmVyXS5sZW5ndGg7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNwYW4obWF0Y2hbbWF0Y2hOdW1iZXJdLCBjbGFzc05h
bWUpOworICAgICAgICAgICAgfTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBmaW5kTnVtYmVy
ID0gZ2VuZXJhdGVGaW5kZXIoL14oLT8oXGQrXC4/XGQqKFtlRV1bKy1dXGQrKT98MFt4WF1caCt8
SW5maW5pdHkpfE5hTikoPzpcV3wkKS8sIDEsICJ3ZWJraXQtamF2YXNjcmlwdC1udW1iZXIiKTsK
KyAgICAgICAgdmFyIGZpbmRLZXl3b3JkID0gZ2VuZXJhdGVGaW5kZXIoL14obnVsbHx0cnVlfGZh
bHNlfGJyZWFrfGNhc2V8Y2F0Y2h8Y29uc3R8ZGVmYXVsdHxmaW5hbGx5fGZvcnxpbnN0YW5jZW9m
fGVud3x2YXJ8Y29udGludWV8ZnVuY3Rpb258cmV0dXJufHZvaWR8ZGVsZXRlfGlmfHRoaXN8ZG98
d2hpbGV8ZWxzZXxpbnxzd2l0Y2h8dGhyb3d8dHJ5fHR5cGVvZnx3aXRofGRlYnVnZ2VyfGNsYXNz
fGVudW18ZXhwb3J0fGV4dGVuZHN8aW1wb3J0fHN1cGVyKSg/OlxXfCQpLywgMSwgIndlYmtpdC1q
YXZhc2NyaXB0LWtleXdvcmQiKTsKKyAgICAgICAgdmFyIGZpbmRTaW5nbGVMaW5lU3RyaW5nID0g
Z2VuZXJhdGVGaW5kZXIoL14iKD86W14iXFxdfFxcLikqInxeJyhbXidcXF18XFwuKSonLywgMCwg
IndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAgICAgICB2YXIgZmluZE11bHRpbGluZUNv
bW1lbnRTdGFydCA9IGdlbmVyYXRlRmluZGVyKC9eXC9cKi4qJC8sIDAsICJ3ZWJraXQtamF2YXNj
cmlwdC1jb21tZW50Iik7CisgICAgICAgIHZhciBmaW5kTXVsdGlsaW5lQ29tbWVudEVuZCA9IGdl
bmVyYXRlRmluZGVyKC9eLio/XCpcLy8sIDAsICJ3ZWJraXQtamF2YXNjcmlwdC1jb21tZW50Iik7
CisgICAgICAgIHZhciBmaW5kTXVsdGlsaW5lU2luZ2xlUXVvdGVTdHJpbmdTdGFydCA9IGdlbmVy
YXRlRmluZGVyKC9eJyg/OlteJ1xcXXxcXC4pKlxcJC8sIDAsICJ3ZWJraXQtamF2YXNjcmlwdC1z
dHJpbmciKTsKKyAgICAgICAgdmFyIGZpbmRNdWx0aWxpbmVTaW5nbGVRdW90ZVN0cmluZ0VuZCA9
IGdlbmVyYXRlRmluZGVyKC9eKD86W14nXFxdfFxcLikqPycvLCAwLCAid2Via2l0LWphdmFzY3Jp
cHQtc3RyaW5nIik7CisgICAgICAgIHZhciBmaW5kTXVsdGlsaW5lRG91YmxlUXVvdGVTdHJpbmdT
dGFydCA9IGdlbmVyYXRlRmluZGVyKC9eIig/OlteIlxcXXxcXC4pKlxcJC8sIDAsICJ3ZWJraXQt
amF2YXNjcmlwdC1zdHJpbmciKTsKKyAgICAgICAgdmFyIGZpbmRNdWx0aWxpbmVEb3VibGVRdW90
ZVN0cmluZ0VuZCA9IGdlbmVyYXRlRmluZGVyKC9eKD86W14iXFxdfFxcLikqPyIvLCAwLCAid2Vi
a2l0LWphdmFzY3JpcHQtc3RyaW5nIik7CisgICAgICAgIHZhciBmaW5kTXVsdGlsaW5lUmVnRXhw
RW5kID0gZ2VuZXJhdGVGaW5kZXIoL14oPzpbXlwvXFxdfFxcLikqP1wvKFtnaW1dezAsM30pLywg
MCwgIndlYmtpdC1qYXZhc2NyaXB0LXJlZ2V4cCIpOworICAgICAgICB2YXIgZmluZFNpbmdsZUxp
bmVDb21tZW50ID0gZ2VuZXJhdGVGaW5kZXIoL15cL1wvLip8XlwvXCouKj9cKlwvLywgMCwgIndl
YmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKworICAgICAgICBmdW5jdGlvbiBmaW5kTXVsdGls
aW5lUmVnRXhwU3RhcnQoc3RyKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAv
XlwvKD86W15cL1xcXXxcXC4pKlxcJC8uZXhlYyhzdHIpOworICAgICAgICAgICAgaWYgKCFtYXRj
aCB8fCAhL1xcfFwkfFwuW1w/XCpcK118W15cfF1cfFteXHxdLy50ZXN0KG1hdGNoWzBdKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRl
U3BhbihtYXRjaFswXSwgIndlYmtpdC1qYXZhc2NyaXB0LXJlZ2V4cCIpOworICAgICAgICAgICAg
cHJldmlvdXNNYXRjaExlbmd0aCA9IG1hdGNoWzBdLmxlbmd0aDsKKyAgICAgICAgICAgIHJldHVy
biBub2RlOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gZmluZFNpbmdsZUxpbmVSZWdF
eHAoc3RyKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSAvXihcLyg/OlteXC9c
XF18XFwuKSpcLyhbZ2ltXXswLDN9KSkoLj8pLy5leGVjKHN0cik7CisgICAgICAgICAgICBpZiAo
IW1hdGNoIHx8ICEobWF0Y2hbMl0ubGVuZ3RoID4gMCB8fCAvXFx8XCR8XC5bXD9cKlwrXXxbXlx8
XVx8W15cfF0vLnRlc3QobWF0Y2hbMV0pIHx8IC9cLnw7fCwvLnRlc3QobWF0Y2hbM10pKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIHZhciBub2RlID0gY3JlYXRl
U3BhbihtYXRjaFsxXSwgIndlYmtpdC1qYXZhc2NyaXB0LXJlZ2V4cCIpOworICAgICAgICAgICAg
cHJldmlvdXNNYXRjaExlbmd0aCA9IG1hdGNoWzFdLmxlbmd0aDsKKyAgICAgICAgICAgIHJldHVy
biBub2RlOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHRva2VuOworICAgICAgICB2YXIgdG1w
ID0gMDsKKyAgICAgICAgdmFyIGkgPSAwOworCisgICAgICAgIGlmIChwcmV2TGluZSkgeworICAg
ICAgICAgICAgaWYgKHByZXZMaW5lLl9jb21tZW50Q29udGludWVzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCEodG9rZW4gPSBmaW5kTXVsdGlsaW5lQ29tbWVudEVuZChjb2RlKSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdG9rZW4gPSBjcmVhdGVTcGFuKGNvZGUsICJ3ZWJraXQtamF2YXNjcmlw
dC1jb21tZW50Iik7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuX2NvbW1lbnRDb250aW51ZXMg
PSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldkxp
bmUuX3NpbmdsZVF1b3RlU3RyaW5nQ29udGludWVzKSB7CisgICAgICAgICAgICAgICAgaWYgKCEo
dG9rZW4gPSBmaW5kTXVsdGlsaW5lU2luZ2xlUXVvdGVTdHJpbmdFbmQoY29kZSkpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHRva2VuID0gY3JlYXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3Jp
cHQtc3RyaW5nIik7CisgICAgICAgICAgICAgICAgICAgIGxpbmUuX3NpbmdsZVF1b3RlU3RyaW5n
Q29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHByZXZMaW5lLl9kb3VibGVRdW90ZVN0cmluZ0NvbnRpbnVlcykgeworICAgICAgICAgICAg
ICAgIGlmICghKHRva2VuID0gZmluZE11bHRpbGluZURvdWJsZVF1b3RlU3RyaW5nRW5kKGNvZGUp
KSkgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNyZWF0ZVNwYW4oY29kZSwgIndlYmtp
dC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAgICAgICAgICAgICAgICAgICBsaW5lLl9kb3VibGVR
dW90ZVN0cmluZ0NvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIGlmIChwcmV2TGluZS5fcmVnZXhwQ29udGludWVzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCEodG9rZW4gPSBmaW5kTXVsdGlsaW5lUmVnRXhwRW5kKGNvZGUpKSkgeworICAgICAg
ICAgICAgICAgICAgICB0b2tlbiA9IGNyZWF0ZVNwYW4oY29kZSwgIndlYmtpdC1qYXZhc2NyaXB0
LXJlZ2V4cCIpOworICAgICAgICAgICAgICAgICAgICBsaW5lLl9yZWdleHBDb250aW51ZXMgPSB0
cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0
b2tlbikgeworICAgICAgICAgICAgICAgIGkgKz0gcHJldmlvdXNNYXRjaExlbmd0aCA/IHByZXZp
b3VzTWF0Y2hMZW5ndGggOiBjb2RlLmxlbmd0aDsKKyAgICAgICAgICAgICAgICB0bXAgPSBpOwor
ICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgZm9yICggOyBpIDwgY29kZS5sZW5ndGg7ICsraSkgeworICAg
ICAgICAgICAgdmFyIGNvZGVGcmFnbWVudCA9IGNvZGUuc3Vic3RyKGkpOworICAgICAgICAgICAg
dmFyIHByZXZDaGFyID0gY29kZVtpIC0gMV07CisgICAgICAgICAgICB0b2tlbiA9IGZpbmRTaW5n
bGVMaW5lQ29tbWVudChjb2RlRnJhZ21lbnQpOworICAgICAgICAgICAgaWYgKCF0b2tlbikgewor
ICAgICAgICAgICAgICAgIGlmICgodG9rZW4gPSBmaW5kTXVsdGlsaW5lQ29tbWVudFN0YXJ0KGNv
ZGVGcmFnbWVudCkpKQorICAgICAgICAgICAgICAgICAgICBsaW5lLl9jb21tZW50Q29udGludWVz
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghcHJldkNoYXIgfHwgL15cVy8udGVz
dChwcmV2Q2hhcikpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBmaW5kTnVtYmVyKGNv
ZGVGcmFnbWVudCwgY29kZVtpIC0gMV0pIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbmRLZXl3b3JkKGNvZGVGcmFnbWVudCwgY29kZVtpIC0gMV0pIHx8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmluZFNpbmdsZUxpbmVTdHJpbmcoY29kZUZyYWdtZW50KSB8fCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kU2luZ2xlTGluZVJlZ0V4cChjb2RlRnJhZ21l
bnQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXRva2VuKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodG9rZW4gPSBmaW5kTXVsdGlsaW5lU2luZ2xlUXVvdGVTdHJpbmdTdGFydChj
b2RlRnJhZ21lbnQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuX3NpbmdsZVF1
b3RlU3RyaW5nQ29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKHRva2VuID0gZmluZE11bHRpbGluZURvdWJsZVF1b3RlU3RyaW5nU3RhcnQoY29kZUZyYWdt
ZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLl9kb3VibGVRdW90ZVN0cmlu
Z0NvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0b2tl
biA9IGZpbmRNdWx0aWxpbmVSZWdFeHBTdGFydChjb2RlRnJhZ21lbnQpKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGxpbmUuX3JlZ2V4cENvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiAodG9rZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wICE9PSBpKQorICAgICAgICAg
ICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvZGUu
c3Vic3RyaW5nKHRtcCwgaSkpKTsKKyAgICAgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKHRv
a2VuKTsKKyAgICAgICAgICAgICAgICBpICs9IHByZXZpb3VzTWF0Y2hMZW5ndGggLSAxOworICAg
ICAgICAgICAgICAgIHRtcCA9IGkgKyAxOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRtcCA8IGNvZGUubGVuZ3RoKQorICAgICAgICAgICAgbGluZS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2RlLnN1YnN0cmluZyh0bXAsIGkpKSk7CisgICAg
fSwKKyAgICAKKyAgICBzeW50YXhIaWdobGlnaHRKYXZhc2NyaXB0OiBmdW5jdGlvbigpCisgICAg
eworICAgICAgICB2YXIgdGFibGUgPSB0aGlzLmVsZW1lbnQuY29udGVudERvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJ0YWJsZSIpWzBdOworICAgICAgICBpZiAoIXRhYmxlKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHZhciByb3dzID0gdGFibGUucm93czsKKyAgICAgICAg
dmFyIHJvd3NMZW5ndGggPSByb3dzLmxlbmd0aDsKKyAgICAgICAgdmFyIHByZXZpb3VzQ2VsbCA9
IG51bGw7CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBkZWxldGVDb250aW51ZUZsYWdzKGNl
bGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChjZWxsKSB7CisgICAgICAgICAgICAgICAg
ZGVsZXRlIGNlbGwuX2NvbW1lbnRDb250aW51ZXM7CisgICAgICAgICAgICAgICAgZGVsZXRlIGNl
bGwuX3NpbmdsZVF1b3RlU3RyaW5nQ29udGludWVzOworICAgICAgICAgICAgICAgIGRlbGV0ZSBj
ZWxsLl9kb3VibGVRdW90ZVN0cmluZ0NvbnRpbnVlczsKKyAgICAgICAgICAgICAgICBkZWxldGUg
Y2VsbC5fcmVnZXhwQ29udGludWVzOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3NMZW5ndGg7ICsraSkgeworICAgICAg
ICAgICAgdmFyIHJvdyA9IHJvd3NbaV07CisgICAgICAgICAgICB2YXIgY2VsbCA9IHJvdy5nZXRF
bGVtZW50c0J5VGFnTmFtZSgidGQiKVsxXTsKKyAgICAgICAgICAgIGlmICghY2VsbCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRoaXMuX3N5bnRheEhpZ2hsaWdodEph
dmFzY3JpcHRMaW5lKGNlbGwsIHByZXZpb3VzQ2VsbCk7CisgICAgICAgICAgICBkZWxldGVDb250
aW51ZUZsYWdzKHByZXZpb3VzQ2VsbCk7CisgICAgICAgICAgICBwcmV2aW91c0NlbGwgPSBjZWxs
OworICAgICAgICB9CisgICAgICAgIGRlbGV0ZUNvbnRpbnVlRmxhZ3MocHJldmlvdXNDZWxsKTsK
ICAgICB9CiB9CkluZGV4OiBTb3VyY2VWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZVZpZXcu
anMJKHJldmlzaW9uIDM0NjIxKQorKysgU291cmNlVmlldy5qcwkod29ya2luZyBjb3B5KQpAQCAt
ODAsNiArODAsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlVmlldy5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICB0aGlzLmF0dGFjaCgpOwogCiAgICAgICAgICAgICBJbnNwZWN0b3JDb250cm9sbGVy
LmFkZFJlc291cmNlU291cmNlVG9GcmFtZSh0aGlzLnJlc291cmNlLmlkZW50aWZpZXIsIHRoaXMu
c291cmNlRnJhbWUuZWxlbWVudCk7CisgICAgICAgICAgICBpZiAodGhpcy5yZXNvdXJjZS50eXBl
ID09PSBXZWJJbnNwZWN0b3IuUmVzb3VyY2UuVHlwZS5TY3JpcHQpCisgICAgICAgICAgICAgICAg
dGhpcy5zb3VyY2VGcmFtZS5zeW50YXhIaWdobGlnaHRKYXZhc2NyaXB0KCk7CiAgICAgICAgIH0K
ICAgICB9LAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21825</attachid>
            <date>2008-06-18 17:19:38 -0700</date>
            <delta_ts>2008-06-18 19:15:59 -0700</delta_ts>
            <desc>with change log</desc>
            <filename>MyFirstPatch6.txt</filename>
            <type>text/plain</type>
            <size>10535</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzNDY1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMDgtMDYtMTggIEtlaXNoaSBIYXR0b3JpICBjYXNleS5oYXR0b3Jp
QGdtYWlsLmNvbQorCisJCUFkZGVkIEphdmFTY3JpcHQgc3ludGF4IGhpZ2hsaWdodGluZyB0byB0
aGUgV2ViIEluc3BlY3Rvci4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHBhZ2UvaW5zcGVjdG9yL1NjcmlwdFZpZXcuanM6IEFkZGVkIGEgY2FsbCB0
byBzeW50YXhIaWdobGlnaHRKYXZhc2NyaXB0LgorICAgICAgICAqIHBhZ2UvaW5zcGVjdG9yL1Nv
dXJjZUZyYW1lLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5fc3ludGF4SGlnaGxpZ2h0SmF2YXNjcmlwdExpbmUpOiBBZGRlZC4gCisJCU1vZGlmaWVzIGEg
bGluZSBjb250ZW50IGVsZW1lbnQuCisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlLnN5bnRheEhpZ2hsaWdodEphdmFzY3JpcHQpOiBBZGRlZC4gCisJCVN5bnRheCBo
aWdobGlnaHRzIHRoZSBlbnRpcmUgc2NyaXB0LgorICAgICAgICAqIHBhZ2UvaW5zcGVjdG9yL1Nv
dXJjZVZpZXcuanM6IEFkZGVkIGEgY2FsbCB0byBzeW50YXhIaWdobGlnaHRKYXZhc2NyaXB0Lgor
CiAyMDA4LTA2LTE4ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAg
ICAgICBBZGQgYSBzY3JpcHQgYnVpbGQgcGhhc2UgdG8gcmVtb3ZlIHRoZSBXZWJLaXQucXJjIGZp
bGUgZnJvbQpJbmRleDogV2ViQ29yZS9wYWdlL2luc3BlY3Rvci9TY3JpcHRWaWV3LmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9pbnNwZWN0b3IvU2NyaXB0Vmlldy5qcwkocmV2aXNpb24g
MzQ2MjEpCisrKyBXZWJDb3JlL3BhZ2UvaW5zcGVjdG9yL1NjcmlwdFZpZXcuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDcgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdFZpZXcucHJvdG90eXBl
ID0gewogICAgICAgICB0aGlzLmF0dGFjaCgpOwogCiAgICAgICAgIEluc3BlY3RvckNvbnRyb2xs
ZXIuYWRkU291cmNlVG9GcmFtZSgidGV4dC9qYXZhc2NyaXB0IiwgdGhpcy5zY3JpcHQuc291cmNl
LCB0aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQpOworICAgICAgICB0aGlzLnNjcmlwdC5zb3VyY2Uu
c3ludGF4SGlnaGxpZ2h0SmF2YXNjcmlwdCgpOwogICAgIH0sCiAKICAgICByZXZlYWxMaW5lOiBm
dW5jdGlvbihsaW5lTnVtYmVyKQpJbmRleDogV2ViQ29yZS9wYWdlL2luc3BlY3Rvci9Tb3VyY2VG
cmFtZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvaW5zcGVjdG9yL1NvdXJjZUZyYW1l
LmpzCShyZXZpc2lvbiAzNDYyMSkKKysrIFdlYkNvcmUvcGFnZS9pbnNwZWN0b3IvU291cmNlRnJh
bWUuanMJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTAgQEAgV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWhl
aWdodC1zaXplZC10by1maXQgeyBvdmVyZmxvdy15OiBoaWRkZW4gfVxuIjsKICAgICAgICAgc3R5
bGVUZXh0ICs9ICIud2Via2l0LWxpbmUtY29udGVudCB7IGJhY2tncm91bmQtY29sb3I6IHdoaXRl
OyB9XG4iOwogICAgICAgICBzdHlsZVRleHQgKz0gIi53ZWJraXQtaGlnaGxpZ2h0ZWQtbGluZSAu
d2Via2l0LWxpbmUtY29udGVudCB7IGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMTIw
KTsgLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5OiBiYWNrZ3JvdW5kLWNvbG9yOyAtd2Via2l0
LXRyYW5zaXRpb24tZHVyYXRpb246IDFzOyB9XG4iOworICAgICAgICBzdHlsZVRleHQgKz0gIi53
ZWJraXQtamF2YXNjcmlwdC1jb21tZW50IHsgY29sb3I6IHJnYigzNSwgMTEwLCAzKTsgfVxuIjsK
KyAgICAgICAgc3R5bGVUZXh0ICs9ICIud2Via2l0LWphdmFzY3JpcHQta2V5d29yZCB7IGNvbG9y
OiByZ2IoMTY2LCAyMywgMCk7IH1cbiI7CisgICAgICAgIHN0eWxlVGV4dCArPSAiLndlYmtpdC1q
YXZhc2NyaXB0LW51bWJlciB7IGNvbG9yOiByZ2IoMjgsIDAsIDIwNyk7IH1cbiI7CisgICAgICAg
IHN0eWxlVGV4dCArPSAiLndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZywgLndlYmtpdC1qYXZhc2Ny
aXB0LXJlZ2V4cCB7IGNvbG9yOiByZ2IoMTI3LCAxOCwgMTc4KTsgfVxuIjsKIAogICAgICAgICBz
dHlsZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdHlsZVRleHQ7CiAKQEAgLTQ1Niw1ICs0NjAsMTYz
IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMu
X2RyYXdQcm9ncmFtQ291bnRlckluQ29udGV4dChjdHgsIHRydWUpOwogCiAgICAgICAgIGRlbGV0
ZSB0aGlzLl9uZWVkc0JyZWFrcG9pbnRJbWFnZXM7CisgICAgfSwKKyAgICAKKyAgICBfc3ludGF4
SGlnaGxpZ2h0SmF2YXNjcmlwdExpbmU6IGZ1bmN0aW9uKGxpbmUsIHByZXZMaW5lKQorICAgIHsK
KyAgICAgICAgdmFyIHByZXZpb3VzTWF0Y2hMZW5ndGggPSAwOworICAgICAgICB2YXIgY29kZSA9
IGxpbmUudGV4dENvbnRlbnQ7CisgICAgICAgIHdoaWxlIChsaW5lLmhhc0NoaWxkTm9kZXMoKSkK
KyAgICAgICAgICAgIGxpbmUucmVtb3ZlQ2hpbGQobGluZS5maXJzdENoaWxkKTsKKworICAgICAg
ICBmdW5jdGlvbiBjcmVhdGVTcGFuKGNvbnRlbnQsIGNsYXNzTmFtZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgdmFyIHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAg
ICAgICAgICBzcGFuLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTsKKyAgICAgICAgICAgIHNwYW4uYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29udGVudCkpOworICAgICAgICAgICAg
cmV0dXJuIHNwYW47CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZW5lcmF0ZUZpbmRl
cihyZWdleCwgbWF0Y2hOdW1iZXIsIGNsYXNzTmFtZSkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGZ1bmN0aW9uKHN0cikgeworICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IHJlZ2V4
LmV4ZWMoc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICBwcmV2aW91c01hdGNoTGVuZ3RoID0g
bWF0Y2hbbWF0Y2hOdW1iZXJdLmxlbmd0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
U3BhbihtYXRjaFttYXRjaE51bWJlcl0sIGNsYXNzTmFtZSk7CisgICAgICAgICAgICB9OworICAg
ICAgICB9CisKKyAgICAgICAgdmFyIGZpbmROdW1iZXIgPSBnZW5lcmF0ZUZpbmRlcigvXigtPyhc
ZCtcLj9cZCooW2VFXVsrLV1cZCspP3wwW3hYXVxoK3xJbmZpbml0eSl8TmFOKSg/OlxXfCQpLywg
MSwgIndlYmtpdC1qYXZhc2NyaXB0LW51bWJlciIpOworICAgICAgICB2YXIgZmluZEtleXdvcmQg
PSBnZW5lcmF0ZUZpbmRlcigvXihudWxsfHRydWV8ZmFsc2V8YnJlYWt8Y2FzZXxjYXRjaHxjb25z
dHxkZWZhdWx0fGZpbmFsbHl8Zm9yfGluc3RhbmNlb2Z8ZW53fHZhcnxjb250aW51ZXxmdW5jdGlv
bnxyZXR1cm58dm9pZHxkZWxldGV8aWZ8dGhpc3xkb3x3aGlsZXxlbHNlfGlufHN3aXRjaHx0aHJv
d3x0cnl8dHlwZW9mfHdpdGh8ZGVidWdnZXJ8Y2xhc3N8ZW51bXxleHBvcnR8ZXh0ZW5kc3xpbXBv
cnR8c3VwZXIpKD86XFd8JCkvLCAxLCAid2Via2l0LWphdmFzY3JpcHQta2V5d29yZCIpOworICAg
ICAgICB2YXIgZmluZFNpbmdsZUxpbmVTdHJpbmcgPSBnZW5lcmF0ZUZpbmRlcigvXiIoPzpbXiJc
XF18XFwuKSoifF4nKFteJ1xcXXxcXC4pKicvLCAwLCAid2Via2l0LWphdmFzY3JpcHQtc3RyaW5n
Iik7CisgICAgICAgIHZhciBmaW5kTXVsdGlsaW5lQ29tbWVudFN0YXJ0ID0gZ2VuZXJhdGVGaW5k
ZXIoL15cL1wqLiokLywgMCwgIndlYmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKyAgICAgICAg
dmFyIGZpbmRNdWx0aWxpbmVDb21tZW50RW5kID0gZ2VuZXJhdGVGaW5kZXIoL14uKj9cKlwvLywg
MCwgIndlYmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKyAgICAgICAgdmFyIGZpbmRNdWx0aWxp
bmVTaW5nbGVRdW90ZVN0cmluZ1N0YXJ0ID0gZ2VuZXJhdGVGaW5kZXIoL14nKD86W14nXFxdfFxc
LikqXFwkLywgMCwgIndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAgICAgICB2YXIgZmlu
ZE11bHRpbGluZVNpbmdsZVF1b3RlU3RyaW5nRW5kID0gZ2VuZXJhdGVGaW5kZXIoL14oPzpbXidc
XF18XFwuKSo/Jy8sIDAsICJ3ZWJraXQtamF2YXNjcmlwdC1zdHJpbmciKTsKKyAgICAgICAgdmFy
IGZpbmRNdWx0aWxpbmVEb3VibGVRdW90ZVN0cmluZ1N0YXJ0ID0gZ2VuZXJhdGVGaW5kZXIoL14i
KD86W14iXFxdfFxcLikqXFwkLywgMCwgIndlYmtpdC1qYXZhc2NyaXB0LXN0cmluZyIpOworICAg
ICAgICB2YXIgZmluZE11bHRpbGluZURvdWJsZVF1b3RlU3RyaW5nRW5kID0gZ2VuZXJhdGVGaW5k
ZXIoL14oPzpbXiJcXF18XFwuKSo/Ii8sIDAsICJ3ZWJraXQtamF2YXNjcmlwdC1zdHJpbmciKTsK
KyAgICAgICAgdmFyIGZpbmRNdWx0aWxpbmVSZWdFeHBFbmQgPSBnZW5lcmF0ZUZpbmRlcigvXig/
OlteXC9cXF18XFwuKSo/XC8oW2dpbV17MCwzfSkvLCAwLCAid2Via2l0LWphdmFzY3JpcHQtcmVn
ZXhwIik7CisgICAgICAgIHZhciBmaW5kU2luZ2xlTGluZUNvbW1lbnQgPSBnZW5lcmF0ZUZpbmRl
cigvXlwvXC8uKnxeXC9cKi4qP1wqXC8vLCAwLCAid2Via2l0LWphdmFzY3JpcHQtY29tbWVudCIp
OworCisgICAgICAgIGZ1bmN0aW9uIGZpbmRNdWx0aWxpbmVSZWdFeHBTdGFydChzdHIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZhciBtYXRjaCA9IC9eXC8oPzpbXlwvXFxdfFxcLikqXFwkLy5l
eGVjKHN0cik7CisgICAgICAgICAgICBpZiAoIW1hdGNoIHx8ICEvXFx8XCR8XC5bXD9cKlwrXXxb
Xlx8XVx8W15cfF0vLnRlc3QobWF0Y2hbMF0pKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVTcGFuKG1hdGNoWzBdLCAid2Via2l0LWph
dmFzY3JpcHQtcmVnZXhwIik7CisgICAgICAgICAgICBwcmV2aW91c01hdGNoTGVuZ3RoID0gbWF0
Y2hbMF0ubGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBmaW5kU2luZ2xlTGluZVJlZ0V4cChzdHIpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBtYXRjaCA9IC9eKFwvKD86W15cL1xcXXxcXC4pKlwvKFtnaW1dezAsM30pKSgu
PykvLmV4ZWMoc3RyKTsKKyAgICAgICAgICAgIGlmICghbWF0Y2ggfHwgIShtYXRjaFsyXS5sZW5n
dGggPiAwIHx8IC9cXHxcJHxcLltcP1wqXCtdfFteXHxdXHxbXlx8XS8udGVzdChtYXRjaFsxXSkg
fHwgL1wufDt8LC8udGVzdChtYXRjaFszXSkpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
OworICAgICAgICAgICAgdmFyIG5vZGUgPSBjcmVhdGVTcGFuKG1hdGNoWzFdLCAid2Via2l0LWph
dmFzY3JpcHQtcmVnZXhwIik7CisgICAgICAgICAgICBwcmV2aW91c01hdGNoTGVuZ3RoID0gbWF0
Y2hbMV0ubGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgICAgIH0KKworICAg
ICAgICB2YXIgdG9rZW47CisgICAgICAgIHZhciB0bXAgPSAwOworICAgICAgICB2YXIgaSA9IDA7
CisKKyAgICAgICAgaWYgKHByZXZMaW5lKSB7CisgICAgICAgICAgICBpZiAocHJldkxpbmUuX2Nv
bW1lbnRDb250aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoISh0b2tlbiA9IGZpbmRNdWx0
aWxpbmVDb21tZW50RW5kKGNvZGUpKSkgeworICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNy
ZWF0ZVNwYW4oY29kZSwgIndlYmtpdC1qYXZhc2NyaXB0LWNvbW1lbnQiKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGluZS5fY29tbWVudENvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2TGluZS5fc2luZ2xlUXVvdGVTdHJpbmdDb250
aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoISh0b2tlbiA9IGZpbmRNdWx0aWxpbmVTaW5n
bGVRdW90ZVN0cmluZ0VuZChjb2RlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBj
cmVhdGVTcGFuKGNvZGUsICJ3ZWJraXQtamF2YXNjcmlwdC1zdHJpbmciKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGluZS5fc2luZ2xlUXVvdGVTdHJpbmdDb250aW51ZXMgPSB0cnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocHJldkxpbmUuX2RvdWJsZVF1b3Rl
U3RyaW5nQ29udGludWVzKSB7CisgICAgICAgICAgICAgICAgaWYgKCEodG9rZW4gPSBmaW5kTXVs
dGlsaW5lRG91YmxlUXVvdGVTdHJpbmdFbmQoY29kZSkpKSB7CisgICAgICAgICAgICAgICAgICAg
IHRva2VuID0gY3JlYXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3JpcHQtc3RyaW5nIik7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmUuX2RvdWJsZVF1b3RlU3RyaW5nQ29udGludWVzID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHByZXZMaW5lLl9y
ZWdleHBDb250aW51ZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoISh0b2tlbiA9IGZpbmRNdWx0
aWxpbmVSZWdFeHBFbmQoY29kZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRva2VuID0gY3Jl
YXRlU3Bhbihjb2RlLCAid2Via2l0LWphdmFzY3JpcHQtcmVnZXhwIik7CisgICAgICAgICAgICAg
ICAgICAgIGxpbmUuX3JlZ2V4cENvbnRpbnVlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHRva2VuKSB7CisgICAgICAgICAgICAgICAg
aSArPSBwcmV2aW91c01hdGNoTGVuZ3RoID8gcHJldmlvdXNNYXRjaExlbmd0aCA6IGNvZGUubGVu
Z3RoOworICAgICAgICAgICAgICAgIHRtcCA9IGk7CisgICAgICAgICAgICAgICAgbGluZS5hcHBl
bmRDaGlsZCh0b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KCA7IGkgPCBjb2RlLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgY29kZUZyYWdtZW50
ID0gY29kZS5zdWJzdHIoaSk7CisgICAgICAgICAgICB2YXIgcHJldkNoYXIgPSBjb2RlW2kgLSAx
XTsKKyAgICAgICAgICAgIHRva2VuID0gZmluZFNpbmdsZUxpbmVDb21tZW50KGNvZGVGcmFnbWVu
dCk7CisgICAgICAgICAgICBpZiAoIXRva2VuKSB7CisgICAgICAgICAgICAgICAgaWYgKCh0b2tl
biA9IGZpbmRNdWx0aWxpbmVDb21tZW50U3RhcnQoY29kZUZyYWdtZW50KSkpCisgICAgICAgICAg
ICAgICAgICAgIGxpbmUuX2NvbW1lbnRDb250aW51ZXMgPSB0cnVlOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKCFwcmV2Q2hhciB8fCAvXlxXLy50ZXN0KHByZXZDaGFyKSkgeworICAgICAgICAg
ICAgICAgICAgICB0b2tlbiA9IGZpbmROdW1iZXIoY29kZUZyYWdtZW50LCBjb2RlW2kgLSAxXSkg
fHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZEtleXdvcmQoY29kZUZyYWdtZW50
LCBjb2RlW2kgLSAxXSkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5kU2luZ2xl
TGluZVN0cmluZyhjb2RlRnJhZ21lbnQpIHx8IAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZpbmRTaW5nbGVMaW5lUmVnRXhwKGNvZGVGcmFnbWVudCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICghdG9rZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tlbiA9IGZpbmRN
dWx0aWxpbmVTaW5nbGVRdW90ZVN0cmluZ1N0YXJ0KGNvZGVGcmFnbWVudCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGluZS5fc2luZ2xlUXVvdGVTdHJpbmdDb250aW51ZXMgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPSBmaW5kTXVsdGlsaW5l
RG91YmxlUXVvdGVTdHJpbmdTdGFydChjb2RlRnJhZ21lbnQpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmUuX2RvdWJsZVF1b3RlU3RyaW5nQ29udGludWVzID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID0gZmluZE11bHRpbGluZVJlZ0V4cFN0
YXJ0KGNvZGVGcmFnbWVudCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5fcmVn
ZXhwQ29udGludWVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0b2tlbikgeworICAgICAgICAg
ICAgICAgIGlmICh0bXAgIT09IGkpCisgICAgICAgICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29kZS5zdWJzdHJpbmcodG1wLCBpKSkpOworICAg
ICAgICAgICAgICAgIGxpbmUuYXBwZW5kQ2hpbGQodG9rZW4pOworICAgICAgICAgICAgICAgIGkg
Kz0gcHJldmlvdXNNYXRjaExlbmd0aCAtIDE7CisgICAgICAgICAgICAgICAgdG1wID0gaSArIDE7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAodG1wIDwgY29kZS5sZW5n
dGgpCisgICAgICAgICAgICBsaW5lLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KGNvZGUuc3Vic3RyaW5nKHRtcCwgaSkpKTsKKyAgICB9LAorICAgIAorICAgIHN5bnRheEhpZ2hs
aWdodEphdmFzY3JpcHQ6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0YWJsZSA9IHRo
aXMuZWxlbWVudC5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRhYmxlIilb
MF07CisgICAgICAgIGlmICghdGFibGUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
dmFyIHJvd3MgPSB0YWJsZS5yb3dzOworICAgICAgICB2YXIgcm93c0xlbmd0aCA9IHJvd3MubGVu
Z3RoOworICAgICAgICB2YXIgcHJldmlvdXNDZWxsID0gbnVsbDsKKyAgICAgICAgCisgICAgICAg
IGZ1bmN0aW9uIGRlbGV0ZUNvbnRpbnVlRmxhZ3MoY2VsbCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKCFjZWxsKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGRlbGV0
ZSBjZWxsLl9jb21tZW50Q29udGludWVzOworICAgICAgICAgICAgZGVsZXRlIGNlbGwuX3Npbmds
ZVF1b3RlU3RyaW5nQ29udGludWVzOworICAgICAgICAgICAgZGVsZXRlIGNlbGwuX2RvdWJsZVF1
b3RlU3RyaW5nQ29udGludWVzOworICAgICAgICAgICAgZGVsZXRlIGNlbGwuX3JlZ2V4cENvbnRp
bnVlczsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
b3dzTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIHZhciByb3cgPSByb3dzW2ldOworICAgICAg
ICAgICAgdmFyIGNlbGwgPSByb3cuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIilbMV07CisgICAg
ICAgICAgICBpZiAoIWNlbGwpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB0aGlzLl9zeW50YXhIaWdobGlnaHRKYXZhc2NyaXB0TGluZShjZWxsLCBwcmV2aW91c0NlbGwp
OworICAgICAgICAgICAgZGVsZXRlQ29udGludWVGbGFncyhwcmV2aW91c0NlbGwpOworICAgICAg
ICAgICAgcHJldmlvdXNDZWxsID0gY2VsbDsKKyAgICAgICAgfQorICAgICAgICBkZWxldGVDb250
aW51ZUZsYWdzKHByZXZpb3VzQ2VsbCk7CiAgICAgfQogfQpJbmRleDogV2ViQ29yZS9wYWdlL2lu
c3BlY3Rvci9Tb3VyY2VWaWV3LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9pbnNwZWN0
b3IvU291cmNlVmlldy5qcwkocmV2aXNpb24gMzQ2MjEpCisrKyBXZWJDb3JlL3BhZ2UvaW5zcGVj
dG9yL1NvdXJjZVZpZXcuanMJKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDggQEAgV2ViSW5z
cGVjdG9yLlNvdXJjZVZpZXcucHJvdG90eXBlID0gewogICAgICAgICAgICAgdGhpcy5hdHRhY2go
KTsKIAogICAgICAgICAgICAgSW5zcGVjdG9yQ29udHJvbGxlci5hZGRSZXNvdXJjZVNvdXJjZVRv
RnJhbWUodGhpcy5yZXNvdXJjZS5pZGVudGlmaWVyLCB0aGlzLnNvdXJjZUZyYW1lLmVsZW1lbnQp
OworICAgICAgICAgICAgaWYgKHRoaXMucmVzb3VyY2UudHlwZSA9PT0gV2ViSW5zcGVjdG9yLlJl
c291cmNlLlR5cGUuU2NyaXB0KQorICAgICAgICAgICAgICAgIHRoaXMuc291cmNlRnJhbWUuc3lu
dGF4SGlnaGxpZ2h0SmF2YXNjcmlwdCgpOwogICAgICAgICB9CiAgICAgfSwKIAo=
</data>
<flag name="review"
          id="9577"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>