<?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>139690</bug_id>
          
          <creation_ts>2014-12-16 11:54:47 -0800</creation_ts>
          <short_desc>REGRESSION (r154769): Wrong &lt;title&gt; taken as a tooltip for SVG element</short_desc>
          <delta_ts>2015-01-14 18:16:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=127305</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Poitras">epoitras</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1056037</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Poitras">epoitras</who>
    <bug_when>2014-12-16 11:54:47 -0800</bug_when>
    <thetext>Here a live sample:

http://jsfiddle.net/msj518e4/3/

Hover the large circle with the mouse and it will display &quot;small circle!&quot;.

Here is the associated markup:
&lt;svg&gt;
    &lt;g&gt;
        &lt;circle cx=&quot;10&quot; cy=&quot;10&quot; r=&quot;10&quot; fill=&quot;red&quot;&gt; 
            &lt;title&gt;small circle!&lt;/title&gt;
        &lt;/circle&gt;
        &lt;circle cx=&quot;50&quot; cy=&quot;50&quot; r=&quot;20&quot; fill=&quot;red&quot;&gt; &lt;/circle&gt;
    &lt;/g&gt;
&lt;/svg&gt;

Title should be picked up only if it&apos;s the first direct children of the node.

Tested in all other browsers (Even opera?) and it works fine.

Might be related as well to this other bug: https://bugs.webkit.org/show_bug.cgi?id=127305</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059945</commentid>
    <comment_count>1</comment_count>
      <attachid>244292</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-08 14:00:52 -0800</bug_when>
    <thetext>Created attachment 244292
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1059949</commentid>
    <comment_count>2</comment_count>
      <attachid>244292</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2015-01-08 14:08:50 -0800</bug_when>
    <thetext>Comment on attachment 244292
Patch

r=me. It would be nice to have a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060325</commentid>
    <comment_count>3</comment_count>
      <attachid>244387</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-09 16:16:51 -0800</bug_when>
    <thetext>Created attachment 244387
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060340</commentid>
    <comment_count>4</comment_count>
      <attachid>244390</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-09 16:50:53 -0800</bug_when>
    <thetext>Created attachment 244390
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060438</commentid>
    <comment_count>5</comment_count>
      <attachid>244390</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-10 12:48:28 -0800</bug_when>
    <thetext>Comment on attachment 244390
Patch

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

The change looks good and I&apos;m happy that you wrote a test. I have some feedback on how we can make the test more straightforward to read and identify the expected result of each sub-test.

&gt; Source/WebCore/ChangeLog:3
&gt; +        Safari 7.1 picks the wrong title to display as a tooltip on SVG element.

This issue isn&apos;t specific to Safari. I updated the title of this bug.

There is an unwritten convention (we should document it) of prefixing bugs that are known to be regressions with &quot;REGRESSION (r154769):&quot; where r154769 is thet revision number that caused the regression. We also add the keyword Regression to keyword field on the Bugzilla bug. The benefit of both of these conventions is that it makes such bugs stand out in the ChangeLog/commit message and in Bugzilla among other benefits.

&gt; Source/WebCore/ChangeLog:9
&gt; +        was calling Traversal&lt;SVGTitleElement&gt;::firstWithin(this)) which is the same as calling

This was the same as firstChild()? I haven&apos;t looked at the code, but given the rest of your description below and the name of the class (Traversal) and member function (firstWithin) I get the impression that this function returned the first direct child of |this| that was a SVGTitleElement, which may not necessarily be the first child (since the first child may not be a SVGTitleElement.).

&gt; LayoutTests/svg/hittest/svg-tooltip-expected.txt:4
&gt; +	parent id:	main_g

Although you write PASS or FAILED at the end of the results it&apos;s difficult to make sense of what the respected result is for each of the sub-tests. See my remake below about making use of js-test-pre.js. The convenience functions in that JavaScript script can be used to make the output of this test more understandable.

&gt; LayoutTests/svg/hittest/svg-tooltip.html:22
&gt; +    {

Instead of duplicating logic to perform comparisons and logging we should make use of the functionality provided in LayoutTests/resources/js-test-pre.js.

&gt; LayoutTests/svg/hittest/svg-tooltip.html:64
&gt; +        if (!verifySVGToolTips(children[i]))

It would be better if we didn&apos;t stop at the first failure so as to not hide multiple regressions (even though we would hope that someone would take notice that this test failed as soon as it does).

&gt; LayoutTests/svg/hittest/svg-tooltip.html:113
&gt; +  &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;500&quot; height=&quot;500&quot; id=&quot;main_svg&quot;&gt;

The xmlns attributes should be removed as this SVG a is embedded in an HTML document.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060694</commentid>
    <comment_count>6</comment_count>
      <attachid>244471</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-12 15:22:38 -0800</bug_when>
    <thetext>Created attachment 244471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060699</commentid>
    <comment_count>7</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-12 15:38:04 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 244390 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=244390&amp;action=review
&gt; 
&gt; The change looks good and I&apos;m happy that you wrote a test. I have some
&gt; feedback on how we can make the test more straightforward to read and
&gt; identify the expected result of each sub-test.
&gt;

I changed the expected text file to include the word &quot;PASS&quot; only in case of success. In case of failure, all failed elements with the actual and the expected tooltips will be written instead.
 
&gt; &gt; Source/WebCore/ChangeLog:3
&gt; &gt; +        Safari 7.1 picks the wrong title to display as a tooltip on SVG element.
&gt; 
&gt; This issue isn&apos;t specific to Safari. I updated the title of this bug.
&gt; 
&gt; There is an unwritten convention (we should document it) of prefixing bugs
&gt; that are known to be regressions with &quot;REGRESSION (r154769):&quot; where r154769
&gt; is thet revision number that caused the regression. We also add the keyword
&gt; Regression to keyword field on the Bugzilla bug. The benefit of both of
&gt; these conventions is that it makes such bugs stand out in the
&gt; ChangeLog/commit message and in Bugzilla among other benefits.
&gt;

ChangeLogs are fixed to include the new title.
 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        was calling Traversal&lt;SVGTitleElement&gt;::firstWithin(this)) which is the same as calling
&gt; 
&gt; This was the same as firstChild()? I haven&apos;t looked at the code, but given
&gt; the rest of your description below and the name of the class (Traversal) and
&gt; member function (firstWithin) I get the impression that this function
&gt; returned the first direct child of |this| that was a SVGTitleElement, which
&gt; may not necessarily be the first child (since the first child may not be a
&gt; SVGTitleElement.).
&gt; 

Yes firstWithin() is the same as firstChild for &quot;Elements&quot;. At the top of ElementTraversal.h, the following comment is there.

// For Elements firstWithin is always the same as first child.

I changed the ChangeLog to explain the difference between firstWithin() and the descendantsOfType&lt;SVGTitleElement&gt;(this).begin().

&gt; &gt; LayoutTests/svg/hittest/svg-tooltip-expected.txt:4
&gt; &gt; +	parent id:	main_g
&gt; 
&gt; Although you write PASS or FAILED at the end of the results it&apos;s difficult
&gt; to make sense of what the respected result is for each of the sub-tests. See
&gt; my remake below about making use of js-test-pre.js. The convenience
&gt; functions in that JavaScript script can be used to make the output of this
&gt; test more understandable.
&gt; 

I could have used &quot;debug()&quot; to log the actual and the expected tooltips in case of failure.

&gt; &gt; LayoutTests/svg/hittest/svg-tooltip.html:22
&gt; &gt; +    {
&gt; 
&gt; Instead of duplicating logic to perform comparisons and logging we should
&gt; make use of the functionality provided in
&gt; LayoutTests/resources/js-test-pre.js.
&gt; 

The comparison and the logging in case of failure is now in a single function named: verifyElementToolTip().

&gt; &gt; LayoutTests/svg/hittest/svg-tooltip.html:64
&gt; &gt; +        if (!verifySVGToolTips(children[i]))
&gt; 
&gt; It would be better if we didn&apos;t stop at the first failure so as to not hide
&gt; multiple regressions (even though we would hope that someone would take
&gt; notice that this test failed as soon as it does).
&gt; 

Done.

&gt; &gt; LayoutTests/svg/hittest/svg-tooltip.html:113
&gt; &gt; +  &lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; width=&quot;500&quot; height=&quot;500&quot; id=&quot;main_svg&quot;&gt;
&gt; 
&gt; The xmlns attributes should be removed as this SVG a is embedded in an HTML
&gt; document.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060738</commentid>
    <comment_count>8</comment_count>
      <attachid>244471</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-12 18:05:00 -0800</bug_when>
    <thetext>Comment on attachment 244471
Patch

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

&gt; LayoutTests/svg/hittest/svg-tooltip-expected.txt:2
&gt; +PASS
&gt; +

This output is not useful given that this test is testing tooltips, which are user-visible text. Such simplistic output would be reasonable for a test that verified a fix for a crash or assertion failure since the presence of any page content (&quot;PASS&quot;) indicates that we did not crash.

&gt; LayoutTests/svg/hittest/svg-tooltip.html:34
&gt; +    // Searches the tree elements upward till it finds an element an SVGTitleElement child
&gt; +    function titleElementFromElementUpward(element)
&gt; +    {
&gt; +      for (; element; element = element.parentElement) {
&gt; +                  
&gt; +        // No tooltip for the root SVG element    
&gt; +        if (element.tagName == &quot;svg&quot;)
&gt; +          break;
&gt; +
&gt; +        var children = element.childNodes;
&gt; +
&gt; +        // Search immediate children and if any of them is a title element return it
&gt; +        for (var i = 0; i &lt; children.length; i++) {
&gt; +          if (children[i].tagName == &quot;title&quot;)
&gt; +            return children[i];
&gt; +        }
&gt; +      }
&gt; +      
&gt; +      return null;
&gt; +    }

We should not be mimicking the C++ algorithm as a way to test this bug. Mimicking the C++ algorithm in JavaScript makes updating this test more fragile and error prone than having hardcoded string literals of the expected results because the algorithm in this function will need to be kept synchronized with the algorithm in WebCore. Computing the expected tooltip text instead of having hardcoded expected tooltip text also makes it time intensive for a person to verify the correctness of the expected result as they will need to execute this algorithm in there head (or run the test) to verify correctness.

I envision using hardcoded string literals for the expected tooltip text together with shouldBeEqualToString() (defined in js-test-pre.js) and the Internals method you added (window.internals.toolTipFromElement) to verify that the actual tooltip text is identical to the hardcoded string literal. You may also want to consider adding a window.internals.toolTipAtPoint() function that takes an (x, y) coordinate pair and returns the tooltip for the element at the specified point and/or expose a method to return the tooltip for a shadow DOM element such that we can write a test for the visible contents of the SVG &lt;use&gt; element (e.g. test that hovering over the clone of big_circle associated with &lt;use id=&quot;use_without_title&quot;&gt; displays the tooltip &quot;nested circle!&quot; - (see remark (*))). Notice that it is not sufficient to use document.elementFromPoint() for get a reference to such an element since it is not part of the user-visible DOM.

(*) We can get away with using internals.toolTipFromElement() on &lt;circle id=&quot;big_circle&quot;&gt; defined in &lt;defs&gt; to test this case, but it would be more representative to go through the hit-test machinery with a (x, y)-coordinate pair for this case and window.internals.toolTipAtPoint() would allow us to get the tooltip for other shadow DOM elements.

&gt; LayoutTests/svg/hittest/svg-tooltip.html:46
&gt; +      if (!titleElement &amp;&amp; toolTip.length == 0 || toolTip == titleElement.textContent)

Take element := document.getElementById(&quot;main_svg&quot;). Suppose there is a regression such that internals.toolTipFromElement(element) is equal to the empty string. Then a JavaScript type error will occur when we access titleElement.textContent (since titleElement == null). While the JavaScript error does indicate that the sub-test failed it causes this entire test to fail (i.e. we do not run any other sub-test) and the output of such an error is not very meaningful since it is a JavaScript error and a person will need to read the code to determine that internals.toolTipFromElement(element) returned the empty string.

Moreover, the first conjunct encodes a valid sub-test: the root &lt;svg&gt; element never has a tooltip. We should explicitly have such a sub test.

&gt; LayoutTests/svg/hittest/svg-tooltip.html:84
&gt; +    // Verifies the tooltip text for an SVG element and all its descendants
&gt; +    function verifyElementTreeToolTips(element)
&gt; +    {
&gt; +      var children = element.childNodes;
&gt; +      var result = verifyElementToolTip(element);
&gt; +
&gt; +      // Verify the tooltips of the children elements
&gt; +      for (var i = 0; i &lt; children.length; i++) {
&gt; +        if (children[i].nodeType != 1)
&gt; +          continue;
&gt; +          
&gt; +        if (children[i].tagName == &quot;defs&quot; || children[i].tagName == &quot;title&quot;)
&gt; +          continue;
&gt; +          
&gt; +        result &amp;= verifyElementTreeToolTips(children[i]);
&gt; +      }
&gt; +      
&gt; +      return result;
&gt; +    }
&gt; +    
&gt; +    function runTest()
&gt; +    {
&gt; +      if (window.testRunner) {
&gt; +        testRunner.dumpAsText();
&gt; +        debug(verifyElementTreeToolTips(document.getElementsByTagName(&quot;svg&quot;)[0], 0) ? &quot;PASS&quot; : &quot;FAILED&quot;);
&gt; +       }
&gt; +     }

We&apos;re underutilizing the convenience functions in js-test-pre.js. We should use shouldBeEqualToString() to test a sub-test. Moreover, we should use description() to print a textual description of this test instead of putting the description of this test in an HTML comment (lines 4 - 10). It&apos;s unnecessary to call testRunner.dumpAsText() as js-test-pre.js and instead of defining runTest() here and using the HTML onload attribute on &lt;body&gt; (line 87) we should just inline the content of runTest(), and move all associated logic, to a &lt;script&gt; placed before &lt;/body&gt;. Then we can remove the HTML onload attribute on &lt;body&gt;. See my remark below (**) on how I would write this test in terms of shouldBeEqualToString() and description().

&gt; LayoutTests/svg/hittest/svg-tooltip.html:113
&gt; +      &lt;circle id=&quot;big_circle&quot; cx=&quot;80&quot; cy=&quot;80&quot; r=&quot;20&quot; fill=&quot;red&quot;&gt;

This markup is invalid because the value of the attribute id is not unique by &lt;http://www.w3.org/TR/SVG/struct.html#IDAttribute&gt;. The id &quot;big_circle&quot; was defined above (line 101).

&gt; LayoutTests/svg/hittest/svg-tooltip.html:117
&gt; +        &lt;rect id=&quot;lime_rect&quot; x=&quot;20&quot; y=&quot;20&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;lime&quot;/&gt;

Similarly, the id &quot;lime_rect&quot; is not unique as it was defined above (line 100).

&gt; LayoutTests/svg/hittest/svg-tooltip.html:127
&gt; +    &lt;use id=&quot;use_without_title&quot; xlink:href=&quot;#shape&quot; x=&quot;0&quot; y=&quot;240&quot; /&gt;

Nit: This is the only self-closing element that has a space character before the &apos;/&apos;. We should use a consistent style throughout the test.

&gt; LayoutTests/svg/hittest/svg-tooltip.html:128
&gt; +  &lt;/svg&gt;

(**) After &lt;/svg&gt;, I would code of the form (may not be correct):

&lt;script&gt;
function tooltipForElementByIdShouldBeEqualToString(id, expectedTooltip)
{
  shouldBeEqualToString(&apos;internals.toolTipFromElement(document.getElementById(&quot;&apos; + id + &apos;&quot;))&apos;, expectedTooltip);
}

description(&quot;This test ensures that the tooltip text for an SVG element is calculated correctly.&quot;);

if (!window.testRunner || !window.internals)
  testFailed(&quot;Test must be run in DumpRenderTree/WebKitTestRunner with support for window.internals.&quot;);
else {
  tooltipForElementByIdShouldBeEqualToString(&quot;main_svg&quot;, &quot;&quot;);
  tooltipForElementByIdShouldBeEqualToString(&quot;main_g&quot;, &quot;main g element&quot;);
  tooltipForElementByIdShouldBeEqualToString(&quot;yellow_rect&quot;, &quot;main g element&quot;);
  tooltipForElementByIdShouldBeEqualToString(&quot;small_circle&quot;, &quot;small circle!&quot;);
  tooltipForElementByIdShouldBeEqualToString(&quot;sub_g&quot;, &quot;main g element&quot;);
  tooltipForElementByIdShouldBeEqualToString(&quot;nested_circle&quot;, &quot;nested circle!&quot;);
  tooltipForElementByIdShouldBeEqualToString(&quot;use_with_title&quot;, &quot;use element!&quot;);
  // Add test for use_without_title, big_circle (child of &lt;g id=&quot;main_g&quot;&gt;; defined on line 113), and lime_rect (child of &lt;g id=&quot;sub_g&quot;&gt;; defined on line 117)
}
document.body.removeChild(document.getElementById(&quot;main_svg&quot;)); // Remove SVG subtree so as to make the result less cluttered when viewed in the browser.
&lt;/script&gt;

&gt; LayoutTests/svg/hittest/svg-tooltip.html:129
&gt; +  &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;

js-test-pre.js =&gt; js-test-post.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060739</commentid>
    <comment_count>9</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-12 18:11:37 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; Comment on attachment 244390 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=244390&amp;action=review
&gt; &gt; 
&gt; &gt; The change looks good and I&apos;m happy that you wrote a test. I have some
&gt; &gt; feedback on how we can make the test more straightforward to read and
&gt; &gt; identify the expected result of each sub-test.
&gt; &gt;
&gt; 
&gt; I changed the expected text file to include the word &quot;PASS&quot; only in case of
&gt; success. In case of failure, all failed elements with the actual and the
&gt; expected tooltips will be written instead.
&gt;  

This output is not useful. See my remark at the top of comment 8 for more details.

&gt; [...]
&gt; I changed the ChangeLog to explain the difference between firstWithin() and
&gt; the descendantsOfType&lt;SVGTitleElement&gt;(this).begin().
&gt; 

The updated ChangeLog description reads well.

&gt; &gt; &gt; LayoutTests/svg/hittest/svg-tooltip-expected.txt:4
&gt; &gt; &gt; +	parent id:	main_g
&gt; &gt; 
&gt; &gt; Although you write PASS or FAILED at the end of the results it&apos;s difficult
&gt; &gt; to make sense of what the respected result is for each of the sub-tests. See
&gt; &gt; my remake below about making use of js-test-pre.js. The convenience
&gt; &gt; functions in that JavaScript script can be used to make the output of this
&gt; &gt; test more understandable.
&gt; &gt; 
&gt; 
&gt; I could have used &quot;debug()&quot; to log the actual and the expected tooltips in
&gt; case of failure.
&gt; 

I suggest that we make use of the comparison functions in js-test-pre.js, including shouldBeEqualToString(). See my remark in comment 8 for more details and an example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060740</commentid>
    <comment_count>10</comment_count>
      <attachid>244471</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-12 18:16:19 -0800</bug_when>
    <thetext>Comment on attachment 244471
Patch

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

&gt; Source/WebCore/ChangeLog:28
&gt; +        (WebCore::Internals::toolTipFromElement):

Nit: Tooltip is one word. So, this method should be named, tooltipFromElement. This misspelling occurs throughout the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060741</commentid>
    <comment_count>11</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-12 18:22:37 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; It&apos;s unnecessary to call testRunner.dumpAsText() as js-test-pre.js and instead of
&gt; defining runTest() here and using the HTML onload attribute on &lt;body&gt; (line
&gt; 87) we should just inline the content of runTest(), and move all associated
&gt; logic, to a &lt;script&gt; placed before &lt;/body&gt;.

This should read:

It&apos;s unnecessary to call testRunner.dumpAsText() as js-test-pre.js does this for us. Additionally, instead of defining runTest() here and using the HTML onload attribute on &lt;body&gt; (line 87) we should just inline the content of runTest() and move all associated logic to a &lt;script&gt; placed before &lt;/body&gt;.

&gt; (**) After &lt;/svg&gt;, I would code of the form (may not be correct):

This should read:

&gt; (**) After &lt;/svg&gt;, I would include code of the form (may not be correct):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060745</commentid>
    <comment_count>12</comment_count>
      <attachid>244485</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-12 18:36:05 -0800</bug_when>
    <thetext>Created attachment 244485
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060746</commentid>
    <comment_count>13</comment_count>
      <attachid>244485</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-12 18:40:57 -0800</bug_when>
    <thetext>Comment on attachment 244485
Patch

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

r-. You didn&apos;t address my remarks in comment 8.

&gt; Source/WebCore/ChangeLog:30
&gt; +        Add a new internal function toolTipFromElement() which returns the tooltip text for a

Nit: toolTipFromElement =&gt; tooltipFromElement

(since tooltip is one word)

&gt; LayoutTests/svg/hittest/svg-tooltip-expected.txt:5
&gt; +PASS successfullyParsed is true
&gt; +
&gt; +TEST COMPLETE
&gt; +PASS
&gt; +

You didn&apos;t address my remarks in comment 8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061279</commentid>
    <comment_count>14</comment_count>
      <attachid>244629</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-14 12:51:50 -0800</bug_when>
    <thetext>Created attachment 244629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061283</commentid>
    <comment_count>15</comment_count>
      <attachid>244471</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-14 13:17:46 -0800</bug_when>
    <thetext>Comment on attachment 244471
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:28
&gt;&gt; +        (WebCore::Internals::toolTipFromElement):
&gt; 
&gt; Nit: Tooltip is one word. So, this method should be named, tooltipFromElement. This misspelling occurs throughout the patch.

The chrome.cpp has the function Chrome::setToolTip() and in it all the variables are named as if tooltip were two parts. Other examples are Settings::showsURLsInToolTips(), HitTestResult::spellingToolTip(), etc.  I was just trying to be consistent with the C++ code.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip-expected.txt:2
&gt;&gt; +
&gt; 
&gt; This output is not useful given that this test is testing tooltips, which are user-visible text. Such simplistic output would be reasonable for a test that verified a fix for a crash or assertion failure since the presence of any page content (&quot;PASS&quot;) indicates that we did not crash.

The test outputs &quot;PASS&quot; only if it passes. If it fails it outputs the mismatched actual and the expected tooltips.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:34
&gt;&gt; +    }
&gt; 
&gt; We should not be mimicking the C++ algorithm as a way to test this bug. Mimicking the C++ algorithm in JavaScript makes updating this test more fragile and error prone than having hardcoded string literals of the expected results because the algorithm in this function will need to be kept synchronized with the algorithm in WebCore. Computing the expected tooltip text instead of having hardcoded expected tooltip text also makes it time intensive for a person to verify the correctness of the expected result as they will need to execute this algorithm in there head (or run the test) to verify correctness.
&gt; 
&gt; I envision using hardcoded string literals for the expected tooltip text together with shouldBeEqualToString() (defined in js-test-pre.js) and the Internals method you added (window.internals.toolTipFromElement) to verify that the actual tooltip text is identical to the hardcoded string literal. You may also want to consider adding a window.internals.toolTipAtPoint() function that takes an (x, y) coordinate pair and returns the tooltip for the element at the specified point and/or expose a method to return the tooltip for a shadow DOM element such that we can write a test for the visible contents of the SVG &lt;use&gt; element (e.g. test that hovering over the clone of big_circle associated with &lt;use id=&quot;use_without_title&quot;&gt; displays the tooltip &quot;nested circle!&quot; - (see remark (*))). Notice that it is not sufficient to use document.elementFromPoint() for get a reference to such an element since it is not part of the user-visible DOM.
&gt; 
&gt; (*) We can get away with using internals.toolTipFromElement() on &lt;circle id=&quot;big_circle&quot;&gt; defined in &lt;defs&gt; to test this case, but it would be more representative to go through the hit-test machinery with a (x, y)-coordinate pair for this case and window.internals.toolTipAtPoint() would allow us to get the tooltip for other shadow DOM elements.

We talked in person about this issue and we agreed on keeping the mimicking approach since the scope of the fix has changed to include another fix for the rootmost SVG element since we were following the specs for this case. I had to test the case of inline SVG and embedded SVG and I had also to include a test for the stand-alone SVG case. In the stand-alone SVG case, js-test-pre.js can&apos;t be used.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:46
&gt;&gt; +      if (!titleElement &amp;&amp; toolTip.length == 0 || toolTip == titleElement.textContent)
&gt; 
&gt; Take element := document.getElementById(&quot;main_svg&quot;). Suppose there is a regression such that internals.toolTipFromElement(element) is equal to the empty string. Then a JavaScript type error will occur when we access titleElement.textContent (since titleElement == null). While the JavaScript error does indicate that the sub-test failed it causes this entire test to fail (i.e. we do not run any other sub-test) and the output of such an error is not very meaningful since it is a JavaScript error and a person will need to read the code to determine that internals.toolTipFromElement(element) returned the empty string.
&gt; 
&gt; Moreover, the first conjunct encodes a valid sub-test: the root &lt;svg&gt; element never has a tooltip. We should explicitly have such a sub test.

Fixed. Thanks for pointing this out.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:84
&gt;&gt; +     }
&gt; 
&gt; We&apos;re underutilizing the convenience functions in js-test-pre.js. We should use shouldBeEqualToString() to test a sub-test. Moreover, we should use description() to print a textual description of this test instead of putting the description of this test in an HTML comment (lines 4 - 10). It&apos;s unnecessary to call testRunner.dumpAsText() as js-test-pre.js and instead of defining runTest() here and using the HTML onload attribute on &lt;body&gt; (line 87) we should just inline the content of runTest(), and move all associated logic, to a &lt;script&gt; placed before &lt;/body&gt;. Then we can remove the HTML onload attribute on &lt;body&gt;. See my remark below (**) on how I would write this test in terms of shouldBeEqualToString() and description().

As mentioned above js-test-pre.js can&apos;t be used with the stand-alone case, so I was limited in using its functions.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:113
&gt;&gt; +      &lt;circle id=&quot;big_circle&quot; cx=&quot;80&quot; cy=&quot;80&quot; r=&quot;20&quot; fill=&quot;red&quot;&gt;
&gt; 
&gt; This markup is invalid because the value of the attribute id is not unique by &lt;http://www.w3.org/TR/SVG/struct.html#IDAttribute&gt;. The id &quot;big_circle&quot; was defined above (line 101).

Fixed. All the elements inside the &lt;defs&gt; section do not have ID&apos;s.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:117
&gt;&gt; +        &lt;rect id=&quot;lime_rect&quot; x=&quot;20&quot; y=&quot;20&quot; width=&quot;40&quot; height=&quot;40&quot; fill=&quot;lime&quot;/&gt;
&gt; 
&gt; Similarly, the id &quot;lime_rect&quot; is not unique as it was defined above (line 100).

Fixed

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:127
&gt;&gt; +    &lt;use id=&quot;use_without_title&quot; xlink:href=&quot;#shape&quot; x=&quot;0&quot; y=&quot;240&quot; /&gt;
&gt; 
&gt; Nit: This is the only self-closing element that has a space character before the &apos;/&apos;. We should use a consistent style throughout the test.

Fixed.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:128
&gt;&gt; +  &lt;/svg&gt;
&gt; 
&gt; (**) After &lt;/svg&gt;, I would code of the form (may not be correct):
&gt; 
&gt; &lt;script&gt;
&gt; function tooltipForElementByIdShouldBeEqualToString(id, expectedTooltip)
&gt; {
&gt;   shouldBeEqualToString(&apos;internals.toolTipFromElement(document.getElementById(&quot;&apos; + id + &apos;&quot;))&apos;, expectedTooltip);
&gt; }
&gt; 
&gt; description(&quot;This test ensures that the tooltip text for an SVG element is calculated correctly.&quot;);
&gt; 
&gt; if (!window.testRunner || !window.internals)
&gt;   testFailed(&quot;Test must be run in DumpRenderTree/WebKitTestRunner with support for window.internals.&quot;);
&gt; else {
&gt;   tooltipForElementByIdShouldBeEqualToString(&quot;main_svg&quot;, &quot;&quot;);
&gt;   tooltipForElementByIdShouldBeEqualToString(&quot;main_g&quot;, &quot;main g element&quot;);
&gt;   tooltipForElementByIdShouldBeEqualToString(&quot;yellow_rect&quot;, &quot;main g element&quot;);
&gt;   tooltipForElementByIdShouldBeEqualToString(&quot;small_circle&quot;, &quot;small circle!&quot;);
&gt;   tooltipForElementByIdShouldBeEqualToString(&quot;sub_g&quot;, &quot;main g element&quot;);
&gt;   tooltipForElementByIdShouldBeEqualToString(&quot;nested_circle&quot;, &quot;nested circle!&quot;);
&gt;   tooltipForElementByIdShouldBeEqualToString(&quot;use_with_title&quot;, &quot;use element!&quot;);
&gt;   // Add test for use_without_title, big_circle (child of &lt;g id=&quot;main_g&quot;&gt;; defined on line 113), and lime_rect (child of &lt;g id=&quot;sub_g&quot;&gt;; defined on line 117)
&gt; }
&gt; document.body.removeChild(document.getElementById(&quot;main_svg&quot;)); // Remove SVG subtree so as to make the result less cluttered when viewed in the browser.
&gt; &lt;/script&gt;

As mentioned above js-test-pre.js can&apos;t be used with the stand-alone case, so I was limited in using its functions.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip.html:129
&gt;&gt; +  &lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; 
&gt; js-test-pre.js =&gt; js-test-post.js

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061285</commentid>
    <comment_count>16</comment_count>
      <attachid>244485</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2015-01-14 13:24:24 -0800</bug_when>
    <thetext>Comment on attachment 244485
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:30
&gt;&gt; +        Add a new internal function toolTipFromElement() which returns the tooltip text for a
&gt; 
&gt; Nit: toolTipFromElement =&gt; tooltipFromElement
&gt; 
&gt; (since tooltip is one word)

I just wanted to be consistent with the C++ code which treats the word &apos;tooltip&apos; as if it were two words.

&gt;&gt; LayoutTests/svg/hittest/svg-tooltip-expected.txt:5
&gt;&gt; +
&gt; 
&gt; You didn&apos;t address my remarks in comment 8.

I did upload this patch before reading your comments on the previous patch. Sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061316</commentid>
    <comment_count>17</comment_count>
      <attachid>244629</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-01-14 14:50:27 -0800</bug_when>
    <thetext>Comment on attachment 244629
Patch

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

&gt; LayoutTests/svg/hittest/svg-standalone-tooltip.svg:25
&gt; +  &lt;!-- This title should only appear in the browser chrome and not as a tooltip --&gt;
&gt; +  &lt;title&gt;outermost svg&lt;/title&gt;

This file is OK as-is. For your information, we can test that this text is the document title by querying document.title in JavaScript (*). No need to make this change though before landing this patch.

(*) Obviously some care needs to be taken such that we only ensure document.title == &quot;outermost svg&quot; when this file is loaded as a standalone SVG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061370</commentid>
    <comment_count>18</comment_count>
      <attachid>244629</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 15:51:02 -0800</bug_when>
    <thetext>Comment on attachment 244629
Patch

Clearing flags on attachment: 244629

Committed r178459: &lt;http://trac.webkit.org/changeset/178459&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061371</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 15:51:06 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061402</commentid>
    <comment_count>20</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-14 16:38:38 -0800</bug_when>
    <thetext>This broke the Windows build:

     1&gt;WebCoreTestSupport.lib(Internals.obj) : error LNK2019: unresolved external symbol &quot;public: __thiscall WebCore::HitTestResult::HitTestResult(void)&quot; (??0HitTestResult@WebCore@@QAE@XZ) referenced in function &quot;public: class WTF::String __thiscall WebCore::Internals::toolTipFromElement(class WebCore::Element *,int &amp;)const &quot; (?toolTipFromElement@Internals@WebCore@@QBE?AVString@WTF@@PAVElement@2@AAH@Z)
     1&gt;WebCoreTestSupport.lib(Internals.obj) : error LNK2019: unresolved external symbol &quot;public: void __thiscall WebCore::HitTestResult::setInnerNode(class WebCore::Node *)&quot; (?setInnerNode@HitTestResult@WebCore@@QAEXPAVNode@2@@Z) referenced in function &quot;public: class WTF::String __thiscall WebCore::Internals::toolTipFromElement(class WebCore::Element *,int &amp;)const &quot; (?toolTipFromElement@Internals@WebCore@@QBE?AVString@WTF@@PAVElement@2@AAH@Z)
     1&gt;WebCoreTestSupport.lib(Internals.obj) : error LNK2019: unresolved external symbol &quot;public: class WTF::String __thiscall WebCore::HitTestResult::title(enum WebCore::TextDirection &amp;)const &quot; (?title@HitTestResult@WebCore@@QBE?AVString@WTF@@AAW4TextDirection@2@@Z) referenced in function &quot;public: class WTF::String __thiscall WebCore::Internals::toolTipFromElement(class WebCore::Element *,int &amp;)const &quot; (?toolTipFromElement@Internals@WebCore@@QBE?AVString@WTF@@PAVElement@2@AAH@Z)

We probably need declarations added to the Windows &quot;WebKitExports.def.in&quot; file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061443</commentid>
    <comment_count>21</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-01-14 18:16:00 -0800</bug_when>
    <thetext>Windows build fix landed in r178470.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244292</attachid>
            <date>2015-01-08 14:00:52 -0800</date>
            <delta_ts>2015-01-09 16:16:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139690-20150108140056.patch</filename>
            <type>text/plain</type>
            <size>1814</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE1LTAxLTA4ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIDcu
MSBwaWNrcyB0aGUgd3JvbmcgdGl0bGUgdG8gZGlzcGxheSBhcyBhIHRvb2x0aXAgb24gU1ZHIGVs
ZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyBhIHJlZ3Jlc3Npb24gZnJvbSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8xNTQ3NjkuIFRoZSBvcmlnaW5hbCBjb2RlCisgICAgICAgIHdhcyBjYWxsaW5nIFRyYXZlcnNh
bDxTVkdUaXRsZUVsZW1lbnQ+OjpmaXJzdFdpdGhpbih0aGlzKSkgd2hpY2ggaXMgdGhlIHNhbWUg
YXMgY2FsbGluZworICAgICAgICBmaXJzdENoaWxkKCksIHNvIHNob3dpbmcgdGhlIHRvb2x0aXAg
Zm9yIFNWRyB3YXMgd29ya2luZyBhcyBleHBlY3RlZC4gSW4gdGhlIGJsYW1lZAorICAgICAgICBy
ZXZpc2lvbiwgZmlyc3RXaXRoaW4oKSB3YXMgcmVwbGFjZWQgYnkgZGVzY2VuZGFudHNPZlR5cGUo
KSB3aGljaCByZXR1cm5zIGFsbCBkZXNjZW5kYW50cworICAgICAgICBTVkdUaXRsZUVsZW1lbnRz
IGV2ZW4gaWYgdGhleSBhcmUgbm90IGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBlbGVt
ZW50LiBUaGUgZml4IGlzCisgICAgICAgIHRvIHVzZSBjaGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVs
ZW1lbnQ+KCkgaW5zdGVhZC4KKworICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnRpdGxlKToKKwogMjAxNS0wMS0wOCAgQnJlbnQgRnVs
Z2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBVbnJldmlld2VkIGJ1
aWxkIGZpeCBhZnRlciByMTc4MTI0LgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAko
cmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NzgsNyArOTc4LDcgQEAgU3RyaW5nIFNWR0VsZW1lbnQ6OnRpdGxl
KCkgY29uc3QKIAogICAgIC8vIElmIHdlIGFyZW4ndCBhbiBpbnN0YW5jZSBpbiBhIDx1c2U+IG9y
IHRoZSA8dXNlPiB0aXRsZSB3YXMgbm90IGZvdW5kLCB0aGVuIGZpbmQgdGhlIGZpcnN0CiAgICAg
Ly8gPHRpdGxlPiBjaGlsZCBvZiB0aGlzIGVsZW1lbnQuCi0gICAgYXV0byBmaXJzdFRpdGxlID0g
ZGVzY2VuZGFudHNPZlR5cGU8U1ZHVGl0bGVFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKKyAgICBh
dXRvIGZpcnN0VGl0bGUgPSBjaGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVsZW1lbnQ+KCp0aGlzKS5m
aXJzdCgpOwogICAgIHJldHVybiBmaXJzdFRpdGxlID8gY29uc3RfY2FzdDxTVkdUaXRsZUVsZW1l
bnQqPihmaXJzdFRpdGxlKS0+aW5uZXJUZXh0KCkgOiBTdHJpbmcoKTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244387</attachid>
            <date>2015-01-09 16:16:51 -0800</date>
            <delta_ts>2015-01-09 16:50:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139690-20150109161656.patch</filename>
            <type>text/plain</type>
            <size>12994</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE1LTAxLTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIDcu
MSBwaWNrcyB0aGUgd3JvbmcgdGl0bGUgdG8gZGlzcGxheSBhcyBhIHRvb2x0aXAgb24gU1ZHIGVs
ZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyBhIHJlZ3Jlc3Npb24gZnJvbSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8xNTQ3NjkuIFRoZSBvcmlnaW5hbCBjb2RlCisgICAgICAgIHdhcyBjYWxsaW5nIFRyYXZlcnNh
bDxTVkdUaXRsZUVsZW1lbnQ+OjpmaXJzdFdpdGhpbih0aGlzKSkgd2hpY2ggaXMgdGhlIHNhbWUg
YXMgY2FsbGluZworICAgICAgICBmaXJzdENoaWxkKCksIHNvIHNob3dpbmcgdGhlIHRvb2x0aXAg
Zm9yIFNWRyB3YXMgd29ya2luZyBhcyBleHBlY3RlZC4gSW4gdGhlIGJsYW1lZAorICAgICAgICBy
ZXZpc2lvbiwgZmlyc3RXaXRoaW4oKSB3YXMgcmVwbGFjZWQgYnkgZGVzY2VuZGFudHNPZlR5cGUo
KSB3aGljaCByZXR1cm5zIGFsbCBkZXNjZW5kYW50cworICAgICAgICBTVkdUaXRsZUVsZW1lbnRz
IGV2ZW4gaWYgdGhleSBhcmUgbm90IGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBlbGVt
ZW50LiBUaGUgZml4IGlzCisgICAgICAgIHRvIHVzZSBjaGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVs
ZW1lbnQ+KCkgaW5zdGVhZC4KKworICAgICAgICBUZXN0OiBzdmcvaGl0dGVzdC9zdmctdG9vbHRp
cC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiByZW5kZXJpbmcv
SGl0VGVzdFJlc3VsdC5oOgorICAgICAgICBNYWtlIEhpdFRlc3RSZXN1bHQ6OnNldElubmVyTm9k
ZSBiZSBXRUJDT1JFX0VYUE9SVAorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojp0aXRsZSk6CisgICAgICAgIAorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6dG9vbFRpcEZyb21FbGVtZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKyAgICAgICAgQWRkIGEgbmV3IGludGVy
bmFsIGZ1bmN0aW9uIHRvb2xUaXBGcm9tRWxlbWVudCgpIHdoaWNoIHJldHVybnMgdGhlIHRvb2x0
aXAgdGV4dCBmb3IgYQorICAgICAgICBnaXZlbiBlbGVtZW50LgorCiAyMDE1LTAxLTA5ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIG1vcmUg
c3luYyBkYXRhYmFzZSBjb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc3
OTgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTMxMiw2ICszMTIsNyBAQCBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXAzc2V0RVJLTjNXVEY2
CiBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXA2cmVtb3ZlRU5TXzE0SFRUUEhlYWRlck5hbWVF
CiBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXBDMUV2CiBfX1pON1dlYkNvcmUxM0hUVFBIZWFk
ZXJNYXBEMUV2CitfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQxMnNldElubmVyTm9kZUVQTlNf
NE5vZGVFCiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQyMnNldFRvTm9uU2hhZG93QW5jZXN0
b3JFdgogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU18xMUxheW91dFBvaW50RQog
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU18xMUxheW91dFBvaW50RWpqamoKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gMTc3
OTgzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGhpdFRlc3RMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGl0VGVzdExvY2F0aW9u
OyB9CiAKLSAgICB2b2lkIHNldElubmVyTm9kZShOb2RlKik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRJbm5lck5vZGUoTm9kZSopOwogICAgIHZvaWQgc2V0SW5uZXJOb25TaGFyZWROb2Rl
KE5vZGUqKTsKICAgICB2b2lkIHNldFVSTEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgc2V0
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAko
cmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NzgsNyArOTc4LDcgQEAgU3RyaW5nIFNWR0VsZW1lbnQ6OnRpdGxl
KCkgY29uc3QKIAogICAgIC8vIElmIHdlIGFyZW4ndCBhbiBpbnN0YW5jZSBpbiBhIDx1c2U+IG9y
IHRoZSA8dXNlPiB0aXRsZSB3YXMgbm90IGZvdW5kLCB0aGVuIGZpbmQgdGhlIGZpcnN0CiAgICAg
Ly8gPHRpdGxlPiBjaGlsZCBvZiB0aGlzIGVsZW1lbnQuCi0gICAgYXV0byBmaXJzdFRpdGxlID0g
ZGVzY2VuZGFudHNPZlR5cGU8U1ZHVGl0bGVFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKKyAgICBh
dXRvIGZpcnN0VGl0bGUgPSBjaGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVsZW1lbnQ+KCp0aGlzKS5m
aXJzdCgpOwogICAgIHJldHVybiBmaXJzdFRpdGxlID8gY29uc3RfY2FzdDxTVkdUaXRsZUVsZW1l
bnQqPihmaXJzdFRpdGxlKS0+aW5uZXJUZXh0KCkgOiBTdHJpbmcoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDk5LDYg
KzIwOTksMTggQEAgU3RyaW5nIEludGVybmFsczo6bWFya2VyVGV4dEZvckxpc3RJdGVtKAogICAg
IHJldHVybiBXZWJDb3JlOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCk7CiB9CiAKK1N0
cmluZyBJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAoIWVsZW1lbnQpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9Cisg
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQ7CisgICAgcmVzdWx0LnNldElubmVyTm9kZShlbGVtZW50
KTsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcjsKKyAgICByZXR1cm4gcmVzdWx0LnRpdGxlKGRpcik7
Cit9CisKIFN0cmluZyBJbnRlcm5hbHM6OmdldEltYWdlU291cmNlVVJMKEVsZW1lbnQqIGVsZW1l
bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghZWxlbWVudCkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiAxNzc5ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNiArMjkwLDgg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShFbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOwogCisgICAgU3RyaW5nIHRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCiAgICAgdm9pZCBmb3JjZVJlbG9hZChib29sIGVu
ZFRvRW5kKTsKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNzc5ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw2ICsyNTYs
OCBAQCBlbnVtIFBhZ2VPdmVybGF5VHlwZSB7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBET01T
dHJpbmcgbWFya2VyVGV4dEZvckxpc3RJdGVtKEVsZW1lbnQgZWxlbWVudCk7CiAKKyAgICBbUmFp
c2VzRXhjZXB0aW9uXSBET01TdHJpbmcgdG9vbFRpcEZyb21FbGVtZW50KEVsZW1lbnQgZWxlbWVu
dCk7CisKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVCdWZmZXIoQXJyYXlC
dWZmZXIgYnVmZmVyKTsKICAgICBBcnJheUJ1ZmZlciBzZXJpYWxpemVPYmplY3QoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIG9iaik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIxMCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAx
LTA5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgU2FmYXJpIDcuMSBwaWNrcyB0aGUgd3JvbmcgdGl0bGUgdG8gZGlzcGxheSBhcyBhIHRvb2x0
aXAgb24gU1ZHIGVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBzdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWw6IEFkZGVkLgorICAgICAg
ICBFbnN1cmUgdGhhdCB0aGUgdG9vbHRpcCB0ZXh0IGZvciBTVkcgZWxlbWVudHMgaXMgY2FsY3Vs
YXRlZCBjb3JyZWN0bHkuIFRoZSB0ZXN0IG1pbWljcworICAgICAgICB3aGF0IHRoZSBDKysgY29k
ZSBkb2VzIGFuZCBjb21wYXJlcyBpdHMgY2FsY3VsYXRlZCB0b29sdGlwIHdpdGggd2hhdCB0aGUg
QysrIGNvZGUgcmV0dXJucy4KKwogMjAxNS0wMS0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJs
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZnRlciB1cGRhdGluZyB0ZXN0cyB0byB1c2Uga2Vy
bmluZywgbGlnYXR1cmVzLCBhbmQgcHJpbnRlciBmb250cywgc29tZSB0ZXN0cyBmYWlsCkluZGV4
OiBMYXlvdXRUZXN0cy9zdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKworcmVjdDoJKHBhcmVu
dCB0aXRsZSBmb3VuZCkKKwlwYXJlbnQgaWQ6CW1haW5fZworCWlkOgkJeWVsbG93X3JlY3QKKwl0
b29sIHRpcDoJeWVsbG93IHJlY3RhbmdsZSEKKwl0aXRsZSB0ZXh0Ogl5ZWxsb3cgcmVjdGFuZ2xl
IQorCitjaXJjbGU6CSh0aXRsZSBmb3VuZCkKKwlpZDoJCXNtYWxsX2NpcmNsZQorCXRvb2wgdGlw
OglzbWFsbCBjaXJjbGUhCisJdGl0bGUgdGV4dDoJc21hbGwgY2lyY2xlIQorCitjaXJjbGU6CSh0
aXRsZSBmb3VuZCkKKwlpZDoJCWJpZ19jaXJjbGUKKwl0b29sIHRpcDoJYmlnIGNpcmNsZSEKKwl0
aXRsZSB0ZXh0OgliaWcgY2lyY2xlIQorCityZWN0OgkocGFyZW50IHRpdGxlIGZvdW5kKQorCXBh
cmVudCBpZDoJbWFpbl9nCisJaWQ6CQlsaW1lX3JlY3QKKwl0b29sIHRpcDoJeWVsbG93IHJlY3Rh
bmdsZSEKKwl0aXRsZSB0ZXh0Ogl5ZWxsb3cgcmVjdGFuZ2xlIQorCitjaXJjbGU6CSh0aXRsZSBm
b3VuZCkKKwlpZDoJCW5lc3RlZF9jaXJjbGUKKwl0b29sIHRpcDoJbmVzdGVkIGNpcmNsZSEKKwl0
aXRsZSB0ZXh0OgluZXN0ZWQgY2lyY2xlIQorCitnOgkocGFyZW50IHRpdGxlIGZvdW5kKQorCXBh
cmVudCBpZDoJbWFpbl9nCisJaWQ6CQlzdWJfZworCXRvb2wgdGlwOgl5ZWxsb3cgcmVjdGFuZ2xl
IQorCXRpdGxlIHRleHQ6CXllbGxvdyByZWN0YW5nbGUhCisKK2c6CSh0aXRsZSBmb3VuZCkKKwlp
ZDoJCW1haW5fZworCXRvb2wgdGlwOgl5ZWxsb3cgcmVjdGFuZ2xlIQorCXRpdGxlIHRleHQ6CXll
bGxvdyByZWN0YW5nbGUhCisKK3VzZToJKHRpdGxlIGZvdW5kKQorCWlkOgkJdXNlX3dpdGhfdGl0
bGUKKwl0b29sIHRpcDoJdXNlIGVsZW1lbnQhCisJdGl0bGUgdGV4dDoJdXNlIGVsZW1lbnQhCisK
K3VzZToJKG5vIHRpdGxlIG9yIHBhcmVudCB0aXRsZSBmb3VuZCkKKwlpZDoJCXVzZV93aXRob3V0
X3RpdGxlCisJdG9vbCB0aXA6CQorCXRpdGxlIHRleHQ6CQorCitQQVNTCisKSW5kZXg6IExheW91
dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8IS0tCisgIFNhZmFyaSA3LjEg
cGlja3MgdGhlIHdyb25nIHRpdGxlIHRvIGRpc3BsYXkgYXMgYSB0b29sdGlwIG9uIFNWRyBlbGVt
ZW50LgorCisgIFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgdGhlIHRvb2x0aXAgdGV4dCBmb3IgU1ZH
IGVsZW1lbnRzIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LiBUaGUKKyAgdGVzdCBtaW1pY3Mgd2hh
dCB0aGUgQysrIGNvZGUgZG9lcyBhbmQgY29tcGFyZXMgaXRzIGNhbGN1bGF0ZWQgdG9vbHRpcCB3
aXRoIHdoYXQgdGhlIEMrKworICBjb2RlIHJldHVybnMuCisgIAorICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NjkwLgorLS0+Cis8aGVhZD4KKyAgPHNjcmlwdD4K
KyAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICB7CisgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2Fn
ZSArICdcbicpKTsKKyAgICB9CisKKyAgICAvLyBEdW1wcyBhbGwgdGhlIGluZm9ybWF0aW9uIGFi
b3V0IGFuIFNWRyBlbGVtZW50LCBpdHMgQysrIGNvZGUgZXhwZWN0ZWQgdG9vbHRpcCB0ZXh0Cisg
ICAgLy8gYW5kIHRoZSBTVkdUaXRsZUVsZW1lbnQgd2hvc2UgdGV4dCBpcyBzdXBwb3NlZCB0byBi
ZSB0aGUgdG9vbHRpcCB0ZXh0LgorICAgIGZ1bmN0aW9uIGR1bXBFbGVtZW50SW5mbyhlbGVtZW50
LCB0b29sVGlwLCB0aXRsZUVsZW1lbnQpCisgICAgeworICAgICAgaWYgKCF0aXRsZUVsZW1lbnQp
CisgICAgICAgIGxvZyhlbGVtZW50LnRhZ05hbWUgKyAiOlx0KG5vIHRpdGxlIG9yIHBhcmVudCB0
aXRsZSBmb3VuZCkiKTsKKyAgICAgIGVsc2UgaWYgKHRpdGxlRWxlbWVudC5wYXJlbnRFbGVtZW50
ID09IGVsZW1lbnQpCisgICAgICAgIGxvZyhlbGVtZW50LnRhZ05hbWUgKyAiOlx0KHRpdGxlIGZv
dW5kKSIpOworICAgICAgZWxzZSB7CisgICAgICAgIGxvZyhlbGVtZW50LnRhZ05hbWUgKyAiOlx0
KHBhcmVudCB0aXRsZSBmb3VuZCkiKTsKKyAgICAgICAgbG9nKCJcdHBhcmVudCBpZDpcdCIgKyB0
aXRsZUVsZW1lbnQucGFyZW50RWxlbWVudC5pZCk7CisgICAgICB9CisgICAgICAgIAorICAgICAg
bG9nKCJcdGlkOlx0XHQiICsgZWxlbWVudC5pZCk7CisgICAgICBsb2coIlx0dG9vbCB0aXA6XHQi
ICsgdG9vbFRpcCk7CisgICAgICBsb2coIlx0dGl0bGUgdGV4dDpcdCIgKyAodGl0bGVFbGVtZW50
ID8gdGl0bGVFbGVtZW50LnRleHRDb250ZW50IDogIiIpICsgIlxuIik7CisgICAgfQorICAgIAor
ICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IFNWR1RpdGxlRWxlbWVudCBjaGlsZCBvZiBhbiBlbGVt
ZW50IGlmIGFueSBleGlzdHMKKyAgICBmdW5jdGlvbiB0aXRsZUVsZW1lbnRGcm9tRWxlbWVudChl
bGVtZW50KQorICAgIHsKKyAgICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZE5vZGVz
OworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7
IGkrKykgeworICAgICAgICAgIGlmIChjaGlsZHJlbltpXS50YWdOYW1lID09ICJ0aXRsZSIpCisg
ICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5baV07CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8vIFZlcmlmaWVzIHRoZSB0b29sdGlwIHRl
eHQgZm9yIGFuIFNWRyBlbGVtZW50IGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzCisgICAgZnVuY3Rp
b24gdmVyaWZ5U1ZHVG9vbFRpcHMoZWxlbWVudCkKKyAgICB7CisgICAgICB2YXIgY2hpbGRyZW4g
PSBlbGVtZW50LmNoaWxkTm9kZXM7CisKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRy
ZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlICE9IDEp
CisgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgCisgICAgICAgIGlmIChjaGlsZHJlbltp
XS50YWdOYW1lID09ICJkZWZzIiB8fCBjaGlsZHJlbltpXS50YWdOYW1lID09ICJ0aXRsZSIpCisg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgCisgICAgICAgIC8vIFZlcmlmeSB0aGUgdG9v
bHRpcHMgZm9yIHRoaXMgY2hpbGQgZWxlbWVudAorICAgICAgICBpZiAoIXZlcmlmeVNWR1Rvb2xU
aXBzKGNoaWxkcmVuW2ldKSkKKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAg
ICAKKyAgICAgIC8vIEFsbCBjaGlsZHJlbiB3ZXJlIHZlcmlmaWVkLiBub3cgdmVyaWZ5IHRoZSB0
b29sdGlwIG9mIHRoZSBlbGVtZW50IGl0c2VsZiAgICAKKyAgICAgIHZhciB0b29sVGlwID0gaW50
ZXJuYWxzLnRvb2xUaXBGcm9tRWxlbWVudChlbGVtZW50KTsKKyAgICAgIAorICAgICAgLy8gbm8g
dG9vbHRpcCBmb3IgdGhlIHJvb3QgU1ZHIGVsZW1lbnQgICAgCisgICAgICBpZiAoZWxlbWVudC50
YWdOYW1lID09ICJzdmciKQorICAgICAgICByZXR1cm4gdG9vbFRpcC5sZW5ndGggPT0gMDsKKwor
ICAgICAgdmFyIHRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudEZyb21FbGVtZW50KGVsZW1lbnQp
OworICAgICAgCisgICAgICAvLyBUaGUgZWxlbWVudCBoYXMgYW4gU1ZHVGl0bGVFbGVtZW50IGNo
aWxkCisgICAgICBpZiAodGl0bGVFbGVtZW50KSB7CisgICAgICAgIGR1bXBFbGVtZW50SW5mbyhl
bGVtZW50LCB0b29sVGlwLCB0aXRsZUVsZW1lbnQpOworICAgICAgICByZXR1cm4gdG9vbFRpcCA9
PSB0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICB9CisKKyAgICAgIC8vIFNlYXJjaCB0
aGUgdHJlZSB1cHdhcmQgdGlsbCB3ZSBmaW5kIGEgcGFyZW50IHdpdGggYW4gU1ZHVGl0bGVFbGVt
ZW50IGNoaWxkCisgICAgICBmb3IgKHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7
IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LnBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgICAKKyAg
ICAgICAgLy8gTm8gdG9vbHRpcCBmb3IgdGhlIHJvb3QgU1ZHIGVsZW1lbnQgICAgCisgICAgICAg
IGlmIChwYXJlbnQudGFnTmFtZSA9PSAic3ZnIikKKyAgICAgICAgICBicmVhazsKKworICAgICAg
ICAvLyBDaGVjayBpZiB0aGUgcGFyZW50IGVsZW1lbnQgaGFzIGEgU1ZHVGl0bGVFbGVtZW50IGNo
aWxkCisgICAgICAgIHRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbWVudEZyb21FbGVtZW50KHBhcmVu
dCk7CisgICAgICAgIGlmICh0aXRsZUVsZW1lbnQpIHsKKyAgICAgICAgICBkdW1wRWxlbWVudElu
Zm8oZWxlbWVudCwgdG9vbFRpcCwgdGl0bGVFbGVtZW50KTsKKyAgICAgICAgICByZXR1cm4gdG9v
bFRpcCA9PSB0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQ7CisgICAgICAgIH0KKyAgICAgIH0KKwor
ICAgICAgLy8gTm8gU1ZHVGl0bGVFbGVtZW50IHdhcyBmb3VuZCBhcyBjaGlsZCBmb3IgdGhlIGVs
ZW1lbnQgb3IgZm9yIGl0cyBwYXJlbnRzCisgICAgICBkdW1wRWxlbWVudEluZm8oZWxlbWVudCwg
dG9vbFRpcCwgdGl0bGVFbGVtZW50KTsKKyAgICAgIHJldHVybiB0b29sVGlwLmxlbmd0aCA9PSAw
OworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICB7CisgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgICAgIGxvZyh2ZXJpZnlTVkdUb29sVGlwcyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgic3ZnIilbMF0pID8gIlBBU1MiIDogIkZBSUxFRCIpOworICAgICAgIH0KKyAgICAgfQorICA8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKyAgPHN2ZyB4bWxu
cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNTAwIiBoZWlnaHQ9IjUwMCIgaWQ9Im1haW5fc3ZnIj4K
KyAgICA8dGl0bGU+b3V0ZXJtb3N0IHN2ZzwvdGl0bGU+CisgICAgPGRlZnM+CisgICAgICA8ZyBp
ZD0ic2hhcGUiPgorICAgICAgICA8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0i
eWVsbG93Ii8+CisgICAgICAgIDxjaXJjbGUgY3g9IjEwIiBjeT0iMTAiIHI9IjEwIiBmaWxsPSJy
ZWQiPiAKKyAgICAgICAgICA8dGl0bGU+ZGVmIHNtYWxsIGNpcmNsZSE8L3RpdGxlPgorICAgICAg
ICA8L2NpcmNsZT4KKyAgICAgICAgPGNpcmNsZSBjeD0iODAiIGN5PSI4MCIgcj0iMjAiIGZpbGw9
InJlZCI+CisgICAgICAgICAgPHRpdGxlPmRlZiBiaWcgY2lyY2xlITwvdGl0bGU+CisgICAgICAg
IDwvY2lyY2xlPgorICAgICAgICA8Zz4KKyAgICAgICAgICA8cmVjdCBpZD0ibGltZV9yZWN0IiB4
PSIyMCIgeT0iMjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibGltZSIvPgorICAgICAg
ICAgIDxjaXJjbGUgaWQ9ImJpZ19jaXJjbGUiIGN4PSI0MCIgY3k9IjQwIiByPSIxMCIgZmlsbD0i
cmVkIj4KKyAgICAgICAgICAgIDx0aXRsZT5uZXN0ZWQgY2lyY2xlITwvdGl0bGU+CisgICAgICAg
ICAgPC9jaXJjbGU+CisgICAgICAgIDwvZz4KKyAgICAgICAgPHRpdGxlPmRlZiB5ZWxsb3cgcmVj
dGFuZ2xlITwvdGl0bGU+CisgICAgICA8L2c+CisgICAgPC9kZWZzPgorICAgIDxnIGlkPSJtYWlu
X2ciPgorICAgICAgPHJlY3QgaWQ9InllbGxvd19yZWN0IiB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEw
MCIgZmlsbD0ieWVsbG93Ii8+CisgICAgICA8Y2lyY2xlIGlkPSJzbWFsbF9jaXJjbGUiIGN4PSIx
MCIgY3k9IjEwIiByPSIxMCIgZmlsbD0icmVkIj4gCisgICAgICAgIDx0aXRsZT5zbWFsbCBjaXJj
bGUhPC90aXRsZT4KKyAgICAgIDwvY2lyY2xlPgorICAgICAgPGNpcmNsZSBpZD0iYmlnX2NpcmNs
ZSIgY3g9IjgwIiBjeT0iODAiIHI9IjIwIiBmaWxsPSJyZWQiPgorICAgICAgICA8dGl0bGU+Ymln
IGNpcmNsZSE8L3RpdGxlPgorICAgICAgPC9jaXJjbGU+CisgICAgICA8ZyBpZD0ic3ViX2ciPgor
ICAgICAgICA8cmVjdCBpZD0ibGltZV9yZWN0IiB4PSIyMCIgeT0iMjAiIHdpZHRoPSI0MCIgaGVp
Z2h0PSI0MCIgZmlsbD0ibGltZSIvPgorICAgICAgICA8Y2lyY2xlIGlkPSJuZXN0ZWRfY2lyY2xl
IiBjeD0iNDAiIGN5PSI0MCIgcj0iMTAiIGZpbGw9InJlZCI+CisgICAgICAgICAgPHRpdGxlPm5l
c3RlZCBjaXJjbGUhPC90aXRsZT4KKyAgICAgICAgPC9jaXJjbGU+CisgICAgICA8L2c+CisgICAg
ICA8dGl0bGU+eWVsbG93IHJlY3RhbmdsZSE8L3RpdGxlPgorICAgIDwvZz4KKyAgICA8dXNlIGlk
PSJ1c2Vfd2l0aF90aXRsZSIgeGxpbms6aHJlZj0iI3NoYXBlIiB4PSIwIiB5PSIxMjAiPgorICAg
ICAgPHRpdGxlPnVzZSBlbGVtZW50ITwvdGl0bGU+CisgICAgPC91c2U+CisgICAgPHVzZSBpZD0i
dXNlX3dpdGhvdXRfdGl0bGUiIHhsaW5rOmhyZWY9IiNzaGFwZSIgeD0iMCIgeT0iMjQwIiAvPgor
ICA8L3N2Zz4KKyAgPHByZSBpZD0ibG9nIj48YnI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244390</attachid>
            <date>2015-01-09 16:50:53 -0800</date>
            <delta_ts>2015-01-12 15:22:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139690-20150109165058.patch</filename>
            <type>text/plain</type>
            <size>13076</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBACisyMDE1LTAxLTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgU2FmYXJpIDcu
MSBwaWNrcyB0aGUgd3JvbmcgdGl0bGUgdG8gZGlzcGxheSBhcyBhIHRvb2x0aXAgb24gU1ZHIGVs
ZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VGhpcyBpcyBhIHJlZ3Jlc3Npb24gZnJvbSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNl
dC8xNTQ3NjkuIFRoZSBvcmlnaW5hbCBjb2RlCisgICAgICAgIHdhcyBjYWxsaW5nIFRyYXZlcnNh
bDxTVkdUaXRsZUVsZW1lbnQ+OjpmaXJzdFdpdGhpbih0aGlzKSkgd2hpY2ggaXMgdGhlIHNhbWUg
YXMgY2FsbGluZworICAgICAgICBmaXJzdENoaWxkKCksIHNvIHNob3dpbmcgdGhlIHRvb2x0aXAg
Zm9yIFNWRyB3YXMgd29ya2luZyBhcyBleHBlY3RlZC4gSW4gdGhlIGJsYW1lZAorICAgICAgICBy
ZXZpc2lvbiwgZmlyc3RXaXRoaW4oKSB3YXMgcmVwbGFjZWQgYnkgZGVzY2VuZGFudHNPZlR5cGUo
KSB3aGljaCByZXR1cm5zIGFsbCBkZXNjZW5kYW50cworICAgICAgICBTVkdUaXRsZUVsZW1lbnRz
IGV2ZW4gaWYgdGhleSBhcmUgbm90IGRpcmVjdCBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBlbGVt
ZW50LiBUaGUgZml4IGlzCisgICAgICAgIHRvIHVzZSBjaGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVs
ZW1lbnQ+KCkgaW5zdGVhZC4KKworICAgICAgICBUZXN0OiBzdmcvaGl0dGVzdC9zdmctdG9vbHRp
cC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgKiByZW5kZXJpbmcv
SGl0VGVzdFJlc3VsdC5oOgorICAgICAgICBNYWtlIEhpdFRlc3RSZXN1bHQ6OnNldElubmVyTm9k
ZSBiZSBXRUJDT1JFX0VYUE9SVAorICAgICAgICAKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50Ojp0aXRsZSk6CisgICAgICAgIAorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6dG9vbFRpcEZyb21FbGVtZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5oOgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKyAgICAgICAgQWRkIGEgbmV3IGludGVy
bmFsIGZ1bmN0aW9uIHRvb2xUaXBGcm9tRWxlbWVudCgpIHdoaWNoIHJldHVybnMgdGhlIHRvb2x0
aXAgdGV4dCBmb3IgYQorICAgICAgICBnaXZlbiBlbGVtZW50LgorCiAyMDE1LTAxLTA5ICBBbmRl
cnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIG1vcmUg
c3luYyBkYXRhYmFzZSBjb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTc3
OTgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTMxMiw2ICszMTIsNyBAQCBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXAzc2V0RVJLTjNXVEY2
CiBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXA2cmVtb3ZlRU5TXzE0SFRUUEhlYWRlck5hbWVF
CiBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXBDMUV2CiBfX1pON1dlYkNvcmUxM0hUVFBIZWFk
ZXJNYXBEMUV2CitfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQxMnNldElubmVyTm9kZUVQTlNf
NE5vZGVFCiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQyMnNldFRvTm9uU2hhZG93QW5jZXN0
b3JFdgogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU18xMUxheW91dFBvaW50RQog
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU18xMUxheW91dFBvaW50RWpqamoKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkocmV2aXNpb24gMTc3
OTgzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBIaXRUZXN0TG9j
YXRpb24mIGhpdFRlc3RMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGl0VGVzdExvY2F0aW9u
OyB9CiAKLSAgICB2b2lkIHNldElubmVyTm9kZShOb2RlKik7CisgICAgV0VCQ09SRV9FWFBPUlQg
dm9pZCBzZXRJbm5lck5vZGUoTm9kZSopOwogICAgIHZvaWQgc2V0SW5uZXJOb25TaGFyZWROb2Rl
KE5vZGUqKTsKICAgICB2b2lkIHNldFVSTEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZvaWQgc2V0
U2Nyb2xsYmFyKFNjcm9sbGJhciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAko
cmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NzgsNyArOTc4LDcgQEAgU3RyaW5nIFNWR0VsZW1lbnQ6OnRpdGxl
KCkgY29uc3QKIAogICAgIC8vIElmIHdlIGFyZW4ndCBhbiBpbnN0YW5jZSBpbiBhIDx1c2U+IG9y
IHRoZSA8dXNlPiB0aXRsZSB3YXMgbm90IGZvdW5kLCB0aGVuIGZpbmQgdGhlIGZpcnN0CiAgICAg
Ly8gPHRpdGxlPiBjaGlsZCBvZiB0aGlzIGVsZW1lbnQuCi0gICAgYXV0byBmaXJzdFRpdGxlID0g
ZGVzY2VuZGFudHNPZlR5cGU8U1ZHVGl0bGVFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKKyAgICBh
dXRvIGZpcnN0VGl0bGUgPSBjaGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVsZW1lbnQ+KCp0aGlzKS5m
aXJzdCgpOwogICAgIHJldHVybiBmaXJzdFRpdGxlID8gY29uc3RfY2FzdDxTVkdUaXRsZUVsZW1l
bnQqPihmaXJzdFRpdGxlKS0+aW5uZXJUZXh0KCkgOiBTdHJpbmcoKTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDk5LDYg
KzIwOTksMTggQEAgU3RyaW5nIEludGVybmFsczo6bWFya2VyVGV4dEZvckxpc3RJdGVtKAogICAg
IHJldHVybiBXZWJDb3JlOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oZWxlbWVudCk7CiB9CiAKK1N0
cmluZyBJbnRlcm5hbHM6OnRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50KiBlbGVtZW50LCBFeGNl
cHRpb25Db2RlJiBlYykgY29uc3QKK3sKKyAgICBpZiAoIWVsZW1lbnQpIHsKKyAgICAgICAgZWMg
PSBJTlZBTElEX0FDQ0VTU19FUlI7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9Cisg
ICAgSGl0VGVzdFJlc3VsdCByZXN1bHQ7CisgICAgcmVzdWx0LnNldElubmVyTm9kZShlbGVtZW50
KTsKKyAgICBUZXh0RGlyZWN0aW9uIGRpcjsKKyAgICByZXR1cm4gcmVzdWx0LnRpdGxlKGRpcik7
Cit9CisKIFN0cmluZyBJbnRlcm5hbHM6OmdldEltYWdlU291cmNlVVJMKEVsZW1lbnQqIGVsZW1l
bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghZWxlbWVudCkgewpJbmRleDogU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCShyZXZpc2lvbiAxNzc5ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTAsNiArMjkwLDgg
QEAgcHVibGljOgogCiAgICAgU3RyaW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShFbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOwogCisgICAgU3RyaW5nIHRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworCiAgICAgdm9pZCBmb3JjZVJlbG9hZChib29sIGVu
ZFRvRW5kKTsKIAogI2lmIEVOQUJMRShFTkNSWVBURURfTUVESUFfVjIpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCShyZXZpc2lvbiAxNzc5ODMpCisrKyBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw2ICsyNTYs
OCBAQCBlbnVtIFBhZ2VPdmVybGF5VHlwZSB7CiAKICAgICBbUmFpc2VzRXhjZXB0aW9uXSBET01T
dHJpbmcgbWFya2VyVGV4dEZvckxpc3RJdGVtKEVsZW1lbnQgZWxlbWVudCk7CiAKKyAgICBbUmFp
c2VzRXhjZXB0aW9uXSBET01TdHJpbmcgdG9vbFRpcEZyb21FbGVtZW50KEVsZW1lbnQgZWxlbWVu
dCk7CisKICAgICBTZXJpYWxpemVkU2NyaXB0VmFsdWUgZGVzZXJpYWxpemVCdWZmZXIoQXJyYXlC
dWZmZXIgYnVmZmVyKTsKICAgICBBcnJheUJ1ZmZlciBzZXJpYWxpemVPYmplY3QoU2VyaWFsaXpl
ZFNjcmlwdFZhbHVlIG9iaik7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIxMCkKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTAx
LTA5ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAg
ICAgU2FmYXJpIDcuMSBwaWNrcyB0aGUgd3JvbmcgdGl0bGUgdG8gZGlzcGxheSBhcyBhIHRvb2x0
aXAgb24gU1ZHIGVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBzdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWw6IEFkZGVkLgorICAgICAg
ICBFbnN1cmUgdGhhdCB0aGUgdG9vbHRpcCB0ZXh0IGZvciBTVkcgZWxlbWVudHMgaXMgY2FsY3Vs
YXRlZCBjb3JyZWN0bHkuIFRoZSB0ZXN0IG1pbWljcworICAgICAgICB3aGF0IHRoZSBDKysgY29k
ZSBkb2VzIGFuZCBjb21wYXJlcyBpdHMgY2FsY3VsYXRlZCB0b29sdGlwIHdpdGggd2hhdCB0aGUg
QysrIGNvZGUgcmV0dXJucy4KKwogMjAxNS0wMS0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJs
c29uQGFwcGxlLmNvbT4KIAogICAgICAgICBBZnRlciB1cGRhdGluZyB0ZXN0cyB0byB1c2Uga2Vy
bmluZywgbGlnYXR1cmVzLCBhbmQgcHJpbnRlciBmb250cywgc29tZSB0ZXN0cyBmYWlsCkluZGV4
OiBMYXlvdXRUZXN0cy9zdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKworcmVjdDoKKwlyZXN1
bHQ6CQkncGFyZW50IHRpdGxlIGZvdW5kJworCXBhcmVudCBpZDoJbWFpbl9nCisJaWQ6CQl5ZWxs
b3dfcmVjdAorCXRvb2wgdGlwOgltYWluIGcgZWxlbWVudAorCXRpdGxlIHRleHQ6CW1haW4gZyBl
bGVtZW50CisKK2NpcmNsZToKKwlyZXN1bHQ6CQkndGl0bGUgZm91bmQnCisJaWQ6CQlzbWFsbF9j
aXJjbGUKKwl0b29sIHRpcDoJc21hbGwgY2lyY2xlIQorCXRpdGxlIHRleHQ6CXNtYWxsIGNpcmNs
ZSEKKworY2lyY2xlOgorCXJlc3VsdDoJCSd0aXRsZSBmb3VuZCcKKwlpZDoJCWJpZ19jaXJjbGUK
Kwl0b29sIHRpcDoJYmlnIGNpcmNsZSEKKwl0aXRsZSB0ZXh0OgliaWcgY2lyY2xlIQorCityZWN0
OgorCXJlc3VsdDoJCSdwYXJlbnQgdGl0bGUgZm91bmQnCisJcGFyZW50IGlkOgltYWluX2cKKwlp
ZDoJCWxpbWVfcmVjdAorCXRvb2wgdGlwOgltYWluIGcgZWxlbWVudAorCXRpdGxlIHRleHQ6CW1h
aW4gZyBlbGVtZW50CisKK2NpcmNsZToKKwlyZXN1bHQ6CQkndGl0bGUgZm91bmQnCisJaWQ6CQlu
ZXN0ZWRfY2lyY2xlCisJdG9vbCB0aXA6CW5lc3RlZCBjaXJjbGUhCisJdGl0bGUgdGV4dDoJbmVz
dGVkIGNpcmNsZSEKKworZzoKKwlyZXN1bHQ6CQkncGFyZW50IHRpdGxlIGZvdW5kJworCXBhcmVu
dCBpZDoJbWFpbl9nCisJaWQ6CQlzdWJfZworCXRvb2wgdGlwOgltYWluIGcgZWxlbWVudAorCXRp
dGxlIHRleHQ6CW1haW4gZyBlbGVtZW50CisKK2c6CisJcmVzdWx0OgkJJ3RpdGxlIGZvdW5kJwor
CWlkOgkJbWFpbl9nCisJdG9vbCB0aXA6CW1haW4gZyBlbGVtZW50CisJdGl0bGUgdGV4dDoJbWFp
biBnIGVsZW1lbnQKKwordXNlOgorCXJlc3VsdDoJCSd0aXRsZSBmb3VuZCcKKwlpZDoJCXVzZV93
aXRoX3RpdGxlCisJdG9vbCB0aXA6CXVzZSBlbGVtZW50IQorCXRpdGxlIHRleHQ6CXVzZSBlbGVt
ZW50IQorCit1c2U6CisJcmVzdWx0OgkJJ25vIHRpdGxlIG9yIHBhcmVudCB0aXRsZSBmb3VuZCcK
KwlpZDoJCXVzZV93aXRob3V0X3RpdGxlCisJdG9vbCB0aXA6CQorCXRpdGxlIHRleHQ6CQorCitQ
QVNTCisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
IS0tCisgIFNhZmFyaSA3LjEgcGlja3MgdGhlIHdyb25nIHRpdGxlIHRvIGRpc3BsYXkgYXMgYSB0
b29sdGlwIG9uIFNWRyBlbGVtZW50LgorCisgIFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgdGhlIHRv
b2x0aXAgdGV4dCBmb3IgU1ZHIGVsZW1lbnRzIGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LiBUaGUK
KyAgdGVzdCBtaW1pY3Mgd2hhdCB0aGUgQysrIGNvZGUgZG9lcyBhbmQgY29tcGFyZXMgaXRzIGNh
bGN1bGF0ZWQgdG9vbHRpcCB3aXRoIHdoYXQgdGhlIEMrKworICBjb2RlIHJldHVybnMuCisgIAor
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NjkwLgorLS0+Cis8
aGVhZD4KKyAgPHNjcmlwdD4KKyAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICB7CisgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobWVzc2FnZSArICdcbicpKTsKKyAgICB9CisKKyAgICAvLyBEdW1wcyBhbGwg
dGhlIGluZm9ybWF0aW9uIGFib3V0IGFuIFNWRyBlbGVtZW50LCBpdHMgQysrIGNvZGUgZXhwZWN0
ZWQgdG9vbHRpcCB0ZXh0CisgICAgLy8gYW5kIHRoZSBTVkdUaXRsZUVsZW1lbnQgd2hvc2UgdGV4
dCBpcyBzdXBwb3NlZCB0byBiZSB0aGUgdG9vbHRpcCB0ZXh0LgorICAgIGZ1bmN0aW9uIGR1bXBF
bGVtZW50SW5mbyhlbGVtZW50LCB0b29sVGlwLCB0aXRsZUVsZW1lbnQpCisgICAgeworICAgICAg
bG9nKGVsZW1lbnQudGFnTmFtZSArICI6Iik7CisgICAgICBpZiAoIXRpdGxlRWxlbWVudCkKKyAg
ICAgICAgbG9nKCJcdHJlc3VsdDpcdFx0IiArICInbm8gdGl0bGUgb3IgcGFyZW50IHRpdGxlIGZv
dW5kJyIpOworICAgICAgZWxzZSBpZiAodGl0bGVFbGVtZW50LnBhcmVudEVsZW1lbnQgPT0gZWxl
bWVudCkKKyAgICAgICAgbG9nKCJcdHJlc3VsdDpcdFx0IiArICIndGl0bGUgZm91bmQnIik7Cisg
ICAgICBlbHNlIHsKKyAgICAgICAgbG9nKCJcdHJlc3VsdDpcdFx0IiArICIncGFyZW50IHRpdGxl
IGZvdW5kJyIpOworICAgICAgICBsb2coIlx0cGFyZW50IGlkOlx0IiArIHRpdGxlRWxlbWVudC5w
YXJlbnRFbGVtZW50LmlkKTsKKyAgICAgIH0KKyAgICAgICAgCisgICAgICBsb2coIlx0aWQ6XHRc
dCIgKyBlbGVtZW50LmlkKTsKKyAgICAgIGxvZygiXHR0b29sIHRpcDpcdCIgKyB0b29sVGlwKTsK
KyAgICAgIGxvZygiXHR0aXRsZSB0ZXh0Olx0IiArICh0aXRsZUVsZW1lbnQgPyB0aXRsZUVsZW1l
bnQudGV4dENvbnRlbnQgOiAiIikgKyAiXG4iKTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJu
cyB0aGUgZmlyc3QgU1ZHVGl0bGVFbGVtZW50IGNoaWxkIG9mIGFuIGVsZW1lbnQgaWYgYW55IGV4
aXN0cworICAgIGZ1bmN0aW9uIHRpdGxlRWxlbWVudEZyb21FbGVtZW50KGVsZW1lbnQpCisgICAg
eworICAgICAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZE5vZGVzOworICAgICAgICAKKyAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
aWYgKGNoaWxkcmVuW2ldLnRhZ05hbWUgPT0gInRpdGxlIikKKyAgICAgICAgICByZXR1cm4gY2hp
bGRyZW5baV07CisgICAgICB9CisgICAgICAgIAorICAgICAgcmV0dXJuIG51bGw7CisgICAgfQor
CisgICAgLy8gVmVyaWZpZXMgdGhlIHRvb2x0aXAgdGV4dCBmb3IgYW4gU1ZHIGVsZW1lbnQgYW5k
IGFsbCBpdHMgZGVzY2VuZGFudHMKKyAgICBmdW5jdGlvbiB2ZXJpZnlTVkdUb29sVGlwcyhlbGVt
ZW50KQorICAgIHsKKyAgICAgIHZhciBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGROb2RlczsKKwor
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAg
ICBpZiAoY2hpbGRyZW5baV0ubm9kZVR5cGUgIT0gMSkKKyAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldLnRhZ05hbWUgPT0gImRlZnMiIHx8IGNo
aWxkcmVuW2ldLnRhZ05hbWUgPT0gInRpdGxlIikKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAKKyAgICAgICAgLy8gVmVyaWZ5IHRoZSB0b29sdGlwcyBmb3IgdGhpcyBjaGlsZCBlbGVt
ZW50CisgICAgICAgIGlmICghdmVyaWZ5U1ZHVG9vbFRpcHMoY2hpbGRyZW5baV0pKQorICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgLy8gQWxsIGNoaWxkcmVu
IHdlcmUgdmVyaWZpZWQuIG5vdyB2ZXJpZnkgdGhlIHRvb2x0aXAgb2YgdGhlIGVsZW1lbnQgaXRz
ZWxmICAgIAorICAgICAgdmFyIHRvb2xUaXAgPSBpbnRlcm5hbHMudG9vbFRpcEZyb21FbGVtZW50
KGVsZW1lbnQpOworICAgICAgCisgICAgICAvLyBubyB0b29sdGlwIGZvciB0aGUgcm9vdCBTVkcg
ZWxlbWVudCAgICAKKyAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT0gInN2ZyIpCisgICAgICAg
IHJldHVybiB0b29sVGlwLmxlbmd0aCA9PSAwOworCisgICAgICB2YXIgdGl0bGVFbGVtZW50ID0g
dGl0bGVFbGVtZW50RnJvbUVsZW1lbnQoZWxlbWVudCk7CisgICAgICAKKyAgICAgIC8vIFRoZSBl
bGVtZW50IGhhcyBhbiBTVkdUaXRsZUVsZW1lbnQgY2hpbGQKKyAgICAgIGlmICh0aXRsZUVsZW1l
bnQpIHsKKyAgICAgICAgZHVtcEVsZW1lbnRJbmZvKGVsZW1lbnQsIHRvb2xUaXAsIHRpdGxlRWxl
bWVudCk7CisgICAgICAgIHJldHVybiB0b29sVGlwID09IHRpdGxlRWxlbWVudC50ZXh0Q29udGVu
dDsKKyAgICAgIH0KKworICAgICAgLy8gU2VhcmNoIHRoZSB0cmVlIHVwd2FyZCB0aWxsIHdlIGZp
bmQgYSBwYXJlbnQgd2l0aCBhbiBTVkdUaXRsZUVsZW1lbnQgY2hpbGQKKyAgICAgIGZvciAodmFy
IHBhcmVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudDsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQu
cGFyZW50RWxlbWVudCkgeworICAgICAgICAgIAorICAgICAgICAvLyBObyB0b29sdGlwIGZvciB0
aGUgcm9vdCBTVkcgZWxlbWVudCAgICAKKyAgICAgICAgaWYgKHBhcmVudC50YWdOYW1lID09ICJz
dmciKQorICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwYXJlbnQg
ZWxlbWVudCBoYXMgYSBTVkdUaXRsZUVsZW1lbnQgY2hpbGQKKyAgICAgICAgdGl0bGVFbGVtZW50
ID0gdGl0bGVFbGVtZW50RnJvbUVsZW1lbnQocGFyZW50KTsKKyAgICAgICAgaWYgKHRpdGxlRWxl
bWVudCkgeworICAgICAgICAgIGR1bXBFbGVtZW50SW5mbyhlbGVtZW50LCB0b29sVGlwLCB0aXRs
ZUVsZW1lbnQpOworICAgICAgICAgIHJldHVybiB0b29sVGlwID09IHRpdGxlRWxlbWVudC50ZXh0
Q29udGVudDsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICAvLyBObyBTVkdUaXRsZUVsZW1l
bnQgd2FzIGZvdW5kIGFzIGNoaWxkIGZvciB0aGUgZWxlbWVudCBvciBmb3IgaXRzIHBhcmVudHMK
KyAgICAgIGR1bXBFbGVtZW50SW5mbyhlbGVtZW50LCB0b29sVGlwLCB0aXRsZUVsZW1lbnQpOwor
ICAgICAgcmV0dXJuIHRvb2xUaXAubGVuZ3RoID09IDA7CisgICAgfQorICAgIAorICAgIGZ1bmN0
aW9uIHJ1blRlc3QoKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAg
ICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgbG9nKHZlcmlmeVNWR1Rvb2xU
aXBzKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXSwgMCkgPyAiUEFTUyIg
OiAiRkFJTEVEIik7CisgICAgICAgfQorICAgICB9CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJydW5UZXN0KCkiPgorICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8y
MDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRo
PSI1MDAiIGhlaWdodD0iNTAwIiBpZD0ibWFpbl9zdmciPgorICAgIDx0aXRsZT5vdXRlcm1vc3Qg
c3ZnPC90aXRsZT4KKyAgICA8ZGVmcz4KKyAgICAgIDxnIGlkPSJzaGFwZSI+CisgICAgICAgIDxy
ZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBmaWxsPSJ5ZWxsb3ciLz4KKyAgICAgICAgPGNp
cmNsZSBjeD0iMTAiIGN5PSIxMCIgcj0iMTAiIGZpbGw9InJlZCI+IAorICAgICAgICAgIDx0aXRs
ZT5kZWYgc21hbGwgY2lyY2xlITwvdGl0bGU+CisgICAgICAgIDwvY2lyY2xlPgorICAgICAgICA8
Y2lyY2xlIGN4PSI4MCIgY3k9IjgwIiByPSIyMCIgZmlsbD0icmVkIj4KKyAgICAgICAgICA8dGl0
bGU+ZGVmIGJpZyBjaXJjbGUhPC90aXRsZT4KKyAgICAgICAgPC9jaXJjbGU+CisgICAgICAgIDxn
PgorICAgICAgICAgIDxyZWN0IGlkPSJsaW1lX3JlY3QiIHg9IjIwIiB5PSIyMCIgd2lkdGg9IjQw
IiBoZWlnaHQ9IjQwIiBmaWxsPSJsaW1lIi8+CisgICAgICAgICAgPGNpcmNsZSBpZD0iYmlnX2Np
cmNsZSIgY3g9IjQwIiBjeT0iNDAiIHI9IjEwIiBmaWxsPSJyZWQiPgorICAgICAgICAgICAgPHRp
dGxlPm5lc3RlZCBjaXJjbGUhPC90aXRsZT4KKyAgICAgICAgICA8L2NpcmNsZT4KKyAgICAgICAg
PC9nPgorICAgICAgICA8dGl0bGU+ZGVmIGcgZWxlbWVudCE8L3RpdGxlPgorICAgICAgPC9nPgor
ICAgIDwvZGVmcz4KKyAgICA8ZyBpZD0ibWFpbl9nIj4KKyAgICAgIDxyZWN0IGlkPSJ5ZWxsb3df
cmVjdCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9InllbGxvdyIvPgorICAgICAgPGNp
cmNsZSBpZD0ic21hbGxfY2lyY2xlIiBjeD0iMTAiIGN5PSIxMCIgcj0iMTAiIGZpbGw9InJlZCI+
IAorICAgICAgICA8dGl0bGU+c21hbGwgY2lyY2xlITwvdGl0bGU+CisgICAgICA8L2NpcmNsZT4K
KyAgICAgIDxjaXJjbGUgaWQ9ImJpZ19jaXJjbGUiIGN4PSI4MCIgY3k9IjgwIiByPSIyMCIgZmls
bD0icmVkIj4KKyAgICAgICAgPHRpdGxlPmJpZyBjaXJjbGUhPC90aXRsZT4KKyAgICAgIDwvY2ly
Y2xlPgorICAgICAgPGcgaWQ9InN1Yl9nIj4KKyAgICAgICAgPHJlY3QgaWQ9ImxpbWVfcmVjdCIg
eD0iMjAiIHk9IjIwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIGZpbGw9ImxpbWUiLz4KKyAgICAg
ICAgPGNpcmNsZSBpZD0ibmVzdGVkX2NpcmNsZSIgY3g9IjQwIiBjeT0iNDAiIHI9IjEwIiBmaWxs
PSJyZWQiPgorICAgICAgICAgIDx0aXRsZT5uZXN0ZWQgY2lyY2xlITwvdGl0bGU+CisgICAgICAg
IDwvY2lyY2xlPgorICAgICAgPC9nPgorICAgICAgPHRpdGxlPm1haW4gZyBlbGVtZW50PC90aXRs
ZT4KKyAgICA8L2c+CisgICAgPHVzZSBpZD0idXNlX3dpdGhfdGl0bGUiIHhsaW5rOmhyZWY9IiNz
aGFwZSIgeD0iMCIgeT0iMTIwIj4KKyAgICAgIDx0aXRsZT51c2UgZWxlbWVudCE8L3RpdGxlPgor
ICAgIDwvdXNlPgorICAgIDx1c2UgaWQ9InVzZV93aXRob3V0X3RpdGxlIiB4bGluazpocmVmPSIj
c2hhcGUiIHg9IjAiIHk9IjI0MCIgLz4KKyAgPC9zdmc+CisgIDxwcmUgaWQ9ImxvZyI+PGJyPjwv
cHJlPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244471</attachid>
            <date>2015-01-12 15:22:38 -0800</date>
            <delta_ts>2015-01-12 18:36:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139690-20150112152243.patch</filename>
            <type>text/plain</type>
            <size>11196</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBACisyMDE1LTAxLTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lP
TiAocjE1NDc2OSk6IFdyb25nIDx0aXRsZT4gdGFrZW4gYXMgYSB0b29sdGlwIGZvciBTVkcgZWxl
bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
OTY5MC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGlzIGEgcmVncmVzc2lvbiBmcm9tIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0
LzE1NDc2OS4gVGhlIG9yaWdpbmFsIGNvZGUKKyAgICAgICAgd2FzIGNhbGxpbmcgVHJhdmVyc2Fs
PFNWR1RpdGxlRWxlbWVudD46OmZpcnN0V2l0aGluKHRoaXMpKSB3aGljaCByZXR1cm5zIHRoZSBm
aXJzdAorICAgICAgICBkaXJlY3QgU1ZHVGl0bGVFbGVtZW50IGNoaWxkIG9mIGFuIGVsZW1lbnQu
IFRyYXZlcnNhbDxTVkdUaXRsZUVsZW1lbnQ+OjpmaXJzdFdpdGhpbigpCisgICAgICAgIHdhcyBy
ZXBsYWNlZCBpbiB0aGUgYmxhbWVkIHJldmlzaW9uIGJ5IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR1Rp
dGxlRWxlbWVudD4gd2hpY2ggcmV0dXJucworICAgICAgICBhbGwgZGVzY2VuZGFudHMgU1ZHVGl0
bGVFbGVtZW50cy4gVGhlbiBpdCB3YXMgZ2V0dGluZyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGVz
ZQorICAgICAgICBkZXNjZW5kYW50cyB3aGljaCBtYXkgbm90IGJlIGFuIGltbWVkaWF0ZSBjaGls
ZCBvZiB0aGUgZWxlbWVudC4gCisgICAgICAgIAorICAgICAgICBUaGUgZml4IGlzIHRvIHVzZSBj
aGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVsZW1lbnQ+KCkgaW5zdGVhZC4gSXQgcmV0dXJucyB0aGUg
aW1tZWRpYXRlCisgICAgICAgIFNWR1RpdGxlRWxlbWVudCBjaGlsZHJlbiBvbmx5IG9mIGFuIGVs
ZW1lbnQuCisKKyAgICAgICAgVGVzdDogc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAuaHRtbAorCisg
ICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuaDoKKyAgICAgICAgTWFrZSBIaXRUZXN0UmVzdWx0OjpzZXRJbm5lck5vZGUgYmUgV0VCQ09S
RV9FWFBPUlQKKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvb2xUaXBG
cm9tRWxlbWVudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5pZGw6CisgICAgICAgIEFkZCBhIG5ldyBpbnRlcm5hbCBmdW5jdGlv
biB0b29sVGlwRnJvbUVsZW1lbnQoKSB3aGljaCByZXR1cm5zIHRoZSB0b29sdGlwIHRleHQgZm9y
IGEKKyAgICAgICAgZ2l2ZW4gZWxlbWVudC4KKwogMjAxNS0wMS0wOSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBtb3JlIHN5bmMgZGF0YWJh
c2UgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3Nzk4MykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEy
LDcgQEAgX19aTjdXZWJDb3JlMTNIVFRQSGVhZGVyTWFwM3NldEVSS04zV1RGNgogX19aTjdXZWJD
b3JlMTNIVFRQSGVhZGVyTWFwNnJlbW92ZUVOU18xNEhUVFBIZWFkZXJOYW1lRQogX19aTjdXZWJD
b3JlMTNIVFRQSGVhZGVyTWFwQzFFdgogX19aTjdXZWJDb3JlMTNIVFRQSGVhZGVyTWFwRDFFdgor
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTJzZXRJbm5lck5vZGVFUE5TXzROb2RlRQogX19a
TjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MjJzZXRUb05vblNoYWRvd0FuY2VzdG9yRXYKIF9fWk43
V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfMTFMYXlvdXRQb2ludEUKIF9fWk43V2ViQ29y
ZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfMTFMYXlvdXRQb2ludEVqampqCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHJldmlzaW9uIDE3Nzk4MykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRU
ZXN0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hpdFRlc3RMb2NhdGlvbjsgfQogCi0gICAg
dm9pZCBzZXRJbm5lck5vZGUoTm9kZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW5u
ZXJOb2RlKE5vZGUqKTsKICAgICB2b2lkIHNldElubmVyTm9uU2hhcmVkTm9kZShOb2RlKik7CiAg
ICAgdm9pZCBzZXRVUkxFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHNldFNjcm9sbGJhcihT
Y3JvbGxiYXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3
Nzk4MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTc4LDcgKzk3OCw3IEBAIFN0cmluZyBTVkdFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CiAK
ICAgICAvLyBJZiB3ZSBhcmVuJ3QgYW4gaW5zdGFuY2UgaW4gYSA8dXNlPiBvciB0aGUgPHVzZT4g
dGl0bGUgd2FzIG5vdCBmb3VuZCwgdGhlbiBmaW5kIHRoZSBmaXJzdAogICAgIC8vIDx0aXRsZT4g
Y2hpbGQgb2YgdGhpcyBlbGVtZW50LgotICAgIGF1dG8gZmlyc3RUaXRsZSA9IGRlc2NlbmRhbnRz
T2ZUeXBlPFNWR1RpdGxlRWxlbWVudD4oKnRoaXMpLmZpcnN0KCk7CisgICAgYXV0byBmaXJzdFRp
dGxlID0gY2hpbGRyZW5PZlR5cGU8U1ZHVGl0bGVFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKICAg
ICByZXR1cm4gZmlyc3RUaXRsZSA/IGNvbnN0X2Nhc3Q8U1ZHVGl0bGVFbGVtZW50Kj4oZmlyc3RU
aXRsZSktPmlubmVyVGV4dCgpIDogU3RyaW5nKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE3Nzk4MykKKysrIFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5OSw2ICsyMDk5LDE4IEBA
IFN0cmluZyBJbnRlcm5hbHM6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgKICAgICByZXR1cm4gV2Vi
Q29yZTo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpOwogfQogCitTdHJpbmcgSW50ZXJu
YWxzOjp0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0Cit7CisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0OworICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoZWxlbWVudCk7CisgICAgVGV4
dERpcmVjdGlvbiBkaXI7CisgICAgcmV0dXJuIHJlc3VsdC50aXRsZShkaXIpOworfQorCiBTdHJp
bmcgSW50ZXJuYWxzOjpnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoIWVsZW1lbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw4IEBAIHB1YmxpYzoK
IAogICAgIFN0cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKIAorICAgIFN0cmluZyB0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCosIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKKwogICAgIHZvaWQgZm9yY2VSZWxvYWQoYm9vbCBlbmRUb0VuZCk7CiAK
ICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiArMjU2LDggQEAgZW51bSBQ
YWdlT3ZlcmxheVR5cGUgewogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIG1hcmtl
clRleHRGb3JMaXN0SXRlbShFbGVtZW50IGVsZW1lbnQpOwogCisgICAgW1JhaXNlc0V4Y2VwdGlv
bl0gRE9NU3RyaW5nIHRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOworCiAgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplQnVmZmVyKEFycmF5QnVmZmVyIGJ1ZmZl
cik7CiAgICAgQXJyYXlCdWZmZXIgc2VyaWFsaXplT2JqZWN0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSBvYmopOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzgyMTApCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wMS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJ
T04gKHIxNTQ3NjkpOiBXcm9uZyA8dGl0bGU+IHRha2VuIGFzIGEgdG9vbHRpcCBmb3IgU1ZHIGVs
ZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWw6IEFkZGVkLgorICAgICAgICBFbnN1cmUgdGhh
dCB0aGUgdG9vbHRpcCB0ZXh0IGZvciBTVkcgZWxlbWVudHMgaXMgY2FsY3VsYXRlZCBjb3JyZWN0
bHkuIFRoZSB0ZXN0IG1pbWljcworICAgICAgICB3aGF0IHRoZSBDKysgY29kZSBkb2VzIGFuZCBj
b21wYXJlcyBpdHMgY2FsY3VsYXRlZCB0b29sdGlwIHdpdGggd2hhdCB0aGUgQysrIGNvZGUgcmV0
dXJucy4KKwogMjAxNS0wMS0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZnRlciB1cGRhdGluZyB0ZXN0cyB0byB1c2Uga2VybmluZywgbGlnYXR1
cmVzLCBhbmQgcHJpbnRlciBmb250cywgc29tZSB0ZXN0cyBmYWlsCkluZGV4OiBMYXlvdXRUZXN0
cy9zdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMiBAQAorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9z
dmcvaGl0dGVzdC9zdmctdG9vbHRpcC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2
Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9z
dmcvaGl0dGVzdC9zdmctdG9vbHRpcC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMx
IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPCEtLQorICBSRUdSRVNTSU9OIChyMTU0NzY5
KTogV3JvbmcgPHRpdGxlPiB0YWtlbiBhcyBhIHRvb2x0aXAgZm9yIFNWRyBlbGVtZW50LgorCisg
IFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgdGhlIHRvb2x0aXAgdGV4dCBmb3IgU1ZHIGVsZW1lbnRz
IGlzIGNhbGN1bGF0ZWQgY29ycmVjdGx5LiBUaGUKKyAgdGVzdCBtaW1pY3Mgd2hhdCB0aGUgQysr
IGNvZGUgZG9lcyBhbmQgY29tcGFyZXMgaXRzIGNhbGN1bGF0ZWQgdG9vbHRpcCB3aXRoIHdoYXQg
dGhlIEMrKworICBjb2RlIHJldHVybnMuCisgIAorICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTM5NjkwLgorLS0+Cis8aGVhZD4KKyAgPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+CisgIDxzY3JpcHQ+ICAgIAorICAg
IC8vIFNlYXJjaGVzIHRoZSB0cmVlIGVsZW1lbnRzIHVwd2FyZCB0aWxsIGl0IGZpbmRzIGFuIGVs
ZW1lbnQgYW4gU1ZHVGl0bGVFbGVtZW50IGNoaWxkCisgICAgZnVuY3Rpb24gdGl0bGVFbGVtZW50
RnJvbUVsZW1lbnRVcHdhcmQoZWxlbWVudCkKKyAgICB7CisgICAgICBmb3IgKDsgZWxlbWVudDsg
ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgCisg
ICAgICAgIC8vIE5vIHRvb2x0aXAgZm9yIHRoZSByb290IFNWRyBlbGVtZW50ICAgIAorICAgICAg
ICBpZiAoZWxlbWVudC50YWdOYW1lID09ICJzdmciKQorICAgICAgICAgIGJyZWFrOworCisgICAg
ICAgIHZhciBjaGlsZHJlbiA9IGVsZW1lbnQuY2hpbGROb2RlczsKKworICAgICAgICAvLyBTZWFy
Y2ggaW1tZWRpYXRlIGNoaWxkcmVuIGFuZCBpZiBhbnkgb2YgdGhlbSBpcyBhIHRpdGxlIGVsZW1l
bnQgcmV0dXJuIGl0CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICBpZiAoY2hpbGRyZW5baV0udGFnTmFtZSA9PSAidGl0bGUiKQor
ICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuW2ldOworICAgICAgICB9CisgICAgICB9CisgICAg
ICAKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIC8vIFZlcmlmaWVzIHRoZSB0b29s
dGlwIHRleHQgb2YgYW4gU1ZHIGVsZW1lbnQgCisgICAgZnVuY3Rpb24gdmVyaWZ5RWxlbWVudFRv
b2xUaXAoZWxlbWVudCkKKyAgICB7CisgICAgICB2YXIgdG9vbFRpcCA9IGludGVybmFscy50b29s
VGlwRnJvbUVsZW1lbnQoZWxlbWVudCk7CisgICAgICB2YXIgdGl0bGVFbGVtZW50ID0gbnVsbDsK
KworICAgICAgLy8gbm8gdG9vbHRpcCBmb3IgdGhlIHJvb3QgU1ZHIGVsZW1lbnQgICAgCisgICAg
ICBpZiAoZWxlbWVudC50YWdOYW1lICE9ICJzdmciKQorICAgICAgICB0aXRsZUVsZW1lbnQgPSB0
aXRsZUVsZW1lbnRGcm9tRWxlbWVudFVwd2FyZChlbGVtZW50KTsKKworICAgICAgaWYgKCF0aXRs
ZUVsZW1lbnQgJiYgdG9vbFRpcC5sZW5ndGggPT0gMCB8fCB0b29sVGlwID09IHRpdGxlRWxlbWVu
dC50ZXh0Q29udGVudCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgLy8g
SWYgdGhlIEMrKyBjb2RlIGV4cGVjdGVkIHRvb2x0aXAgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNh
bGN1bGF0ZWQgdG9vbHRpcCwgbG9nCisgICAgICAvLyB0aGVtIHRvIHRoZSBhY3R1YWwgcmVzdWx0
IGZpbGUuCisgICAgICBkZWJ1ZyhlbGVtZW50LnRhZ05hbWUgKyAiOiIpOworICAgICAgZGVidWco
Ilx0aWQ6XHRcdCIgKyBlbGVtZW50LmlkKTsKKyAgICAgIGRlYnVnKCJcdGFjdHVhbDpcdFx0XCci
ICsgdG9vbFRpcCArICJcJyIpOworICAgICAgZGVidWcoIlx0ZXhwZWN0ZWQ6XHRcJyIgKyAodGl0
bGVFbGVtZW50ID8gdGl0bGVFbGVtZW50LnRleHRDb250ZW50IDogIiIpICsgIlwnXG4iKTsKKyAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBWZXJpZmllcyB0aGUgdG9vbHRpcCB0
ZXh0IGZvciBhbiBTVkcgZWxlbWVudCBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cworICAgIGZ1bmN0
aW9uIHZlcmlmeUVsZW1lbnRUcmVlVG9vbFRpcHMoZWxlbWVudCkKKyAgICB7CisgICAgICB2YXIg
Y2hpbGRyZW4gPSBlbGVtZW50LmNoaWxkTm9kZXM7CisgICAgICB2YXIgcmVzdWx0ID0gdmVyaWZ5
RWxlbWVudFRvb2xUaXAoZWxlbWVudCk7CisKKyAgICAgIC8vIFZlcmlmeSB0aGUgdG9vbHRpcHMg
b2YgdGhlIGNoaWxkcmVuIGVsZW1lbnRzCisgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxk
cmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSAhPSAx
KQorICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIAorICAgICAgICBpZiAoY2hpbGRyZW5b
aV0udGFnTmFtZSA9PSAiZGVmcyIgfHwgY2hpbGRyZW5baV0udGFnTmFtZSA9PSAidGl0bGUiKQor
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIAorICAgICAgICByZXN1bHQgJj0gdmVyaWZ5
RWxlbWVudFRyZWVUb29sVGlwcyhjaGlsZHJlbltpXSk7CisgICAgICB9CisgICAgICAKKyAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQorICAg
IHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgZGVidWcodmVyaWZ5RWxlbWVudFRyZWVUb29sVGlwcyhkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0sIDApID8gIlBBU1MiIDogIkZBSUxF
RCIpOworICAgICAgIH0KKyAgICAgfQorICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdCgpIj4KKyAgPHN2ZyB3aWR0aD0iNTAwIiBoZWlnaHQ9IjUwMCIgaWQ9Im1haW5f
c3ZnIj4KKyAgICA8dGl0bGU+b3V0ZXJtb3N0IHN2ZzwvdGl0bGU+CisgICAgPGRlZnM+CisgICAg
ICA8ZyBpZD0ic2hhcGUiPgorICAgICAgICA8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIg
ZmlsbD0ieWVsbG93Ii8+CisgICAgICAgIDxjaXJjbGUgY3g9IjEwIiBjeT0iMTAiIHI9IjEwIiBm
aWxsPSJyZWQiPiAKKyAgICAgICAgICA8dGl0bGU+ZGVmIHNtYWxsIGNpcmNsZSE8L3RpdGxlPgor
ICAgICAgICA8L2NpcmNsZT4KKyAgICAgICAgPGNpcmNsZSBjeD0iODAiIGN5PSI4MCIgcj0iMjAi
IGZpbGw9InJlZCI+CisgICAgICAgICAgPHRpdGxlPmRlZiBiaWcgY2lyY2xlITwvdGl0bGU+Cisg
ICAgICAgIDwvY2lyY2xlPgorICAgICAgICA8Zz4KKyAgICAgICAgICA8cmVjdCBpZD0ibGltZV9y
ZWN0IiB4PSIyMCIgeT0iMjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibGltZSIvPgor
ICAgICAgICAgIDxjaXJjbGUgaWQ9ImJpZ19jaXJjbGUiIGN4PSI0MCIgY3k9IjQwIiByPSIxMCIg
ZmlsbD0icmVkIj4KKyAgICAgICAgICAgIDx0aXRsZT5uZXN0ZWQgY2lyY2xlITwvdGl0bGU+Cisg
ICAgICAgICAgPC9jaXJjbGU+CisgICAgICAgIDwvZz4KKyAgICAgICAgPHRpdGxlPmRlZiBnIGVs
ZW1lbnQhPC90aXRsZT4KKyAgICAgIDwvZz4KKyAgICA8L2RlZnM+CisgICAgPGcgaWQ9Im1haW5f
ZyI+CisgICAgICA8cmVjdCBpZD0ieWVsbG93X3JlY3QiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAw
IiBmaWxsPSJ5ZWxsb3ciLz4KKyAgICAgIDxjaXJjbGUgaWQ9InNtYWxsX2NpcmNsZSIgY3g9IjEw
IiBjeT0iMTAiIHI9IjEwIiBmaWxsPSJyZWQiPiAKKyAgICAgICAgPHRpdGxlPnNtYWxsIGNpcmNs
ZSE8L3RpdGxlPgorICAgICAgPC9jaXJjbGU+CisgICAgICA8Y2lyY2xlIGlkPSJiaWdfY2lyY2xl
IiBjeD0iODAiIGN5PSI4MCIgcj0iMjAiIGZpbGw9InJlZCI+CisgICAgICAgIDx0aXRsZT5iaWcg
Y2lyY2xlITwvdGl0bGU+CisgICAgICA8L2NpcmNsZT4KKyAgICAgIDxnIGlkPSJzdWJfZyI+Cisg
ICAgICAgIDxyZWN0IGlkPSJsaW1lX3JlY3QiIHg9IjIwIiB5PSIyMCIgd2lkdGg9IjQwIiBoZWln
aHQ9IjQwIiBmaWxsPSJsaW1lIi8+CisgICAgICAgIDxjaXJjbGUgaWQ9Im5lc3RlZF9jaXJjbGUi
IGN4PSI0MCIgY3k9IjQwIiByPSIxMCIgZmlsbD0icmVkIj4KKyAgICAgICAgICA8dGl0bGU+bmVz
dGVkIGNpcmNsZSE8L3RpdGxlPgorICAgICAgICA8L2NpcmNsZT4KKyAgICAgIDwvZz4KKyAgICAg
IDx0aXRsZT5tYWluIGcgZWxlbWVudDwvdGl0bGU+CisgICAgPC9nPgorICAgIDx1c2UgaWQ9InVz
ZV93aXRoX3RpdGxlIiB4bGluazpocmVmPSIjc2hhcGUiIHg9IjAiIHk9IjEyMCI+CisgICAgICA8
dGl0bGU+dXNlIGVsZW1lbnQhPC90aXRsZT4KKyAgICA8L3VzZT4KKyAgICA8dXNlIGlkPSJ1c2Vf
d2l0aG91dF90aXRsZSIgeGxpbms6aHJlZj0iI3NoYXBlIiB4PSIwIiB5PSIyNDAiIC8+CisgIDwv
c3ZnPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244485</attachid>
            <date>2015-01-12 18:36:05 -0800</date>
            <delta_ts>2015-01-14 12:51:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139690-20150112183610.patch</filename>
            <type>text/plain</type>
            <size>11190</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE1LTAxLTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lP
TiAocjE1NDc2OSk6IFdyb25nIDx0aXRsZT4gdGFrZW4gYXMgYSB0b29sdGlwIGZvciBTVkcgZWxl
bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
OTY5MC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBC
ZWZvcmUgcjE1NDc2OSwgd2Ugd2VyZSBjYWxsaW5nIFRyYXZlcnNhbDxTVkdUaXRsZUVsZW1lbnQ+
OjpmaXJzdFdpdGhpbigpLCB3aGljaCByZXR1cm5zCisgICAgICAgIHRoZSBmaXJzdCBpbW1lZGlh
dGUgU1ZHVGl0bGVFbGVtZW50IGNoaWxkLiBJbiByMTU0NzY5LCBUcmF2ZXJzYWw8U1ZHVGl0bGVF
bGVtZW50Pjo6Zmlyc3RXaXRoaW4oKQorICAgICAgICB3YXMgcmVwbGFjZWQgYnkgZGVzY2VuZGFu
dHNPZlR5cGU8U1ZHVGl0bGVFbGVtZW50PiB3aGljaCByZXR1cm5zIGFsbCBkZXNjZW5kYW50cyBT
VkdUaXRsZUVsZW1lbnRzLgorICAgICAgICBUaGVuIHdlIHdlcmUgZ2V0dGluZyB0aGUgZmlyc3Qg
ZWxlbWVudCBvZiB0aGVzZSBkZXNjZW5kYW50cyB3aGljaCBtYXkgbm90IGJlIGFuIGltbWVkaWF0
ZQorICAgICAgICBjaGlsZCBvZiB0aGUgZWxlbWVudC4gQW5kIHRoaXMgd2FzIHRoZSByZWFzb24g
b2YgdGhpcyBidWcuCisgICAgICAgIAorICAgICAgICBUaGUgZml4IGlzIHRvIHVzZSBjaGlsZHJl
bk9mVHlwZTxTVkdUaXRsZUVsZW1lbnQ+KCkgd2hpY2ggaXQgcmV0dXJucyB0aGUgYSBsaXN0IG9m
IHRoZQorICAgICAgICBpbW1lZGlhdGUgU1ZHVGl0bGVFbGVtZW50IGNoaWxkcmVuIG9mIGFuIGVs
ZW1lbnQuCisKKyAgICAgICAgVGVzdDogc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAuaHRtbAorCisg
ICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuaDoKKyAgICAgICAgTWFrZSBIaXRUZXN0UmVzdWx0OjpzZXRJbm5lck5vZGUgYmUgV0VCQ09S
RV9FWFBPUlQKKyAgICAgICAgCisgICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6dGl0bGUpOgorICAgICAgICAKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRvb2xUaXBG
cm9tRWxlbWVudCk6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5pZGw6CisgICAgICAgIEFkZCBhIG5ldyBpbnRlcm5hbCBmdW5jdGlv
biB0b29sVGlwRnJvbUVsZW1lbnQoKSB3aGljaCByZXR1cm5zIHRoZSB0b29sdGlwIHRleHQgZm9y
IGEKKyAgICAgICAgZ2l2ZW4gZWxlbWVudC4KKwogMjAxNS0wMS0wOSAgQW5kZXJzIENhcmxzc29u
ICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBtb3JlIHN5bmMgZGF0YWJh
c2UgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE3Nzk4MykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEy
LDcgQEAgX19aTjdXZWJDb3JlMTNIVFRQSGVhZGVyTWFwM3NldEVSS04zV1RGNgogX19aTjdXZWJD
b3JlMTNIVFRQSGVhZGVyTWFwNnJlbW92ZUVOU18xNEhUVFBIZWFkZXJOYW1lRQogX19aTjdXZWJD
b3JlMTNIVFRQSGVhZGVyTWFwQzFFdgogX19aTjdXZWJDb3JlMTNIVFRQSGVhZGVyTWFwRDFFdgor
X19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MTJzZXRJbm5lck5vZGVFUE5TXzROb2RlRQogX19a
TjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0MjJzZXRUb05vblNoYWRvd0FuY2VzdG9yRXYKIF9fWk43
V2ViQ29yZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfMTFMYXlvdXRQb2ludEUKIF9fWk43V2ViQ29y
ZTEzSGl0VGVzdFJlc3VsdEMxRVJLTlNfMTFMYXlvdXRQb2ludEVqampqCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHJldmlzaW9uIDE3Nzk4MykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDcgKzg2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBoaXRU
ZXN0TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2hpdFRlc3RMb2NhdGlvbjsgfQogCi0gICAg
dm9pZCBzZXRJbm5lck5vZGUoTm9kZSopOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW5u
ZXJOb2RlKE5vZGUqKTsKICAgICB2b2lkIHNldElubmVyTm9uU2hhcmVkTm9kZShOb2RlKik7CiAg
ICAgdm9pZCBzZXRVUkxFbGVtZW50KEVsZW1lbnQqKTsKICAgICB2b2lkIHNldFNjcm9sbGJhcihT
Y3JvbGxiYXIqKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE3
Nzk4MykKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTc4LDcgKzk3OCw3IEBAIFN0cmluZyBTVkdFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CiAK
ICAgICAvLyBJZiB3ZSBhcmVuJ3QgYW4gaW5zdGFuY2UgaW4gYSA8dXNlPiBvciB0aGUgPHVzZT4g
dGl0bGUgd2FzIG5vdCBmb3VuZCwgdGhlbiBmaW5kIHRoZSBmaXJzdAogICAgIC8vIDx0aXRsZT4g
Y2hpbGQgb2YgdGhpcyBlbGVtZW50LgotICAgIGF1dG8gZmlyc3RUaXRsZSA9IGRlc2NlbmRhbnRz
T2ZUeXBlPFNWR1RpdGxlRWxlbWVudD4oKnRoaXMpLmZpcnN0KCk7CisgICAgYXV0byBmaXJzdFRp
dGxlID0gY2hpbGRyZW5PZlR5cGU8U1ZHVGl0bGVFbGVtZW50PigqdGhpcykuZmlyc3QoKTsKICAg
ICByZXR1cm4gZmlyc3RUaXRsZSA/IGNvbnN0X2Nhc3Q8U1ZHVGl0bGVFbGVtZW50Kj4oZmlyc3RU
aXRsZSktPmlubmVyVGV4dCgpIDogU3RyaW5nKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE3Nzk4MykKKysrIFNvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5OSw2ICsyMDk5LDE4IEBA
IFN0cmluZyBJbnRlcm5hbHM6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgKICAgICByZXR1cm4gV2Vi
Q29yZTo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpOwogfQogCitTdHJpbmcgSW50ZXJu
YWxzOjp0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpIGNvbnN0Cit7CisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9B
Q0NFU1NfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIEhpdFRlc3RS
ZXN1bHQgcmVzdWx0OworICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoZWxlbWVudCk7CisgICAgVGV4
dERpcmVjdGlvbiBkaXI7CisgICAgcmV0dXJuIHJlc3VsdC50aXRsZShkaXIpOworfQorCiBTdHJp
bmcgSW50ZXJuYWxzOjpnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50KiBlbGVtZW50LCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoIWVsZW1lbnQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw4IEBAIHB1YmxpYzoK
IAogICAgIFN0cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCosIEV4Y2VwdGlvbkNv
ZGUmKTsKIAorICAgIFN0cmluZyB0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCosIEV4Y2VwdGlv
bkNvZGUmKSBjb25zdDsKKwogICAgIHZvaWQgZm9yY2VSZWxvYWQoYm9vbCBlbmRUb0VuZCk7CiAK
ICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpJbmRleDogU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiArMjU2LDggQEAgZW51bSBQ
YWdlT3ZlcmxheVR5cGUgewogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIG1hcmtl
clRleHRGb3JMaXN0SXRlbShFbGVtZW50IGVsZW1lbnQpOwogCisgICAgW1JhaXNlc0V4Y2VwdGlv
bl0gRE9NU3RyaW5nIHRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOworCiAgICAg
U2VyaWFsaXplZFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplQnVmZmVyKEFycmF5QnVmZmVyIGJ1ZmZl
cik7CiAgICAgQXJyYXlCdWZmZXIgc2VyaWFsaXplT2JqZWN0KFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZSBvYmopOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzgyMTApCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNS0wMS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFJFR1JFU1NJ
T04gKHIxNTQ3NjkpOiBXcm9uZyA8dGl0bGU+IHRha2VuIGFzIGEgdG9vbHRpcCBmb3IgU1ZHIGVs
ZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Mzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN2Zy9oaXR0ZXN0L3N2Zy10b29sdGlwLmh0bWw6IEFkZGVkLgorICAgICAgICBFbnN1cmUgdGhh
dCB0aGUgdG9vbHRpcCB0ZXh0IGZvciBTVkcgZWxlbWVudHMgaXMgY2FsY3VsYXRlZCBjb3JyZWN0
bHkuIFRoZSB0ZXN0IG1pbWljcworICAgICAgICB3aGF0IHRoZSBDKysgY29kZSBkb2VzIGFuZCBj
b21wYXJlcyBpdHMgY2FsY3VsYXRlZCB0b29sdGlwIHdpdGggd2hhdCB0aGUgQysrIGNvZGUgcmV0
dXJucy4KKwogMjAxNS0wMS0wOSAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBZnRlciB1cGRhdGluZyB0ZXN0cyB0byB1c2Uga2VybmluZywgbGlnYXR1
cmVzLCBhbmQgcHJpbnRlciBmb250cywgc29tZSB0ZXN0cyBmYWlsCkluZGV4OiBMYXlvdXRUZXN0
cy9zdmcvaGl0dGVzdC9zdmctdG9vbHRpcC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLXRvb2x0aXAtZXhwZWN0ZWQudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNSBAQAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9oaXR0
ZXN0L3N2Zy10b29sdGlwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2hpdHRl
c3Qvc3ZnLXRvb2x0aXAuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9oaXR0
ZXN0L3N2Zy10b29sdGlwLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8IS0tCisgIFJFR1JFU1NJT04gKHIxNTQ3NjkpOiBXcm9u
ZyA8dGl0bGU+IHRha2VuIGFzIGEgdG9vbHRpcCBmb3IgU1ZHIGVsZW1lbnQuCisKKyAgVGhpcyB0
ZXN0IGVuc3VyZXMgdGhhdCB0aGUgdG9vbHRpcCB0ZXh0IGZvciBTVkcgZWxlbWVudHMgaXMgY2Fs
Y3VsYXRlZCBjb3JyZWN0bHkuIFRoZQorICB0ZXN0IG1pbWljcyB3aGF0IHRoZSBDKysgY29kZSBk
b2VzIGFuZCBjb21wYXJlcyBpdHMgY2FsY3VsYXRlZCB0b29sdGlwIHdpdGggd2hhdCB0aGUgQysr
CisgIGNvZGUgcmV0dXJucy4KKyAgCisgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzk2OTAuCistLT4KKzxoZWFkPgorICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKyAgPHNjcmlwdD4gICAgCisgICAgLy8gU2Vh
cmNoZXMgdGhlIHRyZWUgZWxlbWVudHMgdXB3YXJkIHRpbGwgaXQgZmluZHMgYW4gZWxlbWVudCBh
biBTVkdUaXRsZUVsZW1lbnQgY2hpbGQKKyAgICBmdW5jdGlvbiB0aXRsZUVsZW1lbnRGcm9tRWxl
bWVudFVwd2FyZChlbGVtZW50KQorICAgIHsKKyAgICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50
ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
Ly8gTm8gdG9vbHRpcCBmb3IgdGhlIHJvb3QgU1ZHIGVsZW1lbnQgICAgCisgICAgICAgIGlmIChl
bGVtZW50LnRhZ05hbWUgPT0gInN2ZyIpCisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgdmFy
IGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZE5vZGVzOworCisgICAgICAgIC8vIFNlYXJjaCBpbW1l
ZGlhdGUgY2hpbGRyZW4gYW5kIGlmIGFueSBvZiB0aGVtIGlzIGEgdGl0bGUgZWxlbWVudCByZXR1
cm4gaXQKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykg
eworICAgICAgICAgIGlmIChjaGlsZHJlbltpXS50YWdOYW1lID09ICJ0aXRsZSIpCisgICAgICAg
ICAgICByZXR1cm4gY2hpbGRyZW5baV07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAorICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgLy8gVmVyaWZpZXMgdGhlIHRvb2x0aXAgdGV4
dCBvZiBhbiBTVkcgZWxlbWVudCAKKyAgICBmdW5jdGlvbiB2ZXJpZnlFbGVtZW50VG9vbFRpcChl
bGVtZW50KQorICAgIHsKKyAgICAgIHZhciB0b29sVGlwID0gaW50ZXJuYWxzLnRvb2xUaXBGcm9t
RWxlbWVudChlbGVtZW50KTsKKyAgICAgIHZhciB0aXRsZUVsZW1lbnQgPSBudWxsOworCisgICAg
ICAvLyBubyB0b29sdGlwIGZvciB0aGUgcm9vdCBTVkcgZWxlbWVudCAgICAKKyAgICAgIGlmIChl
bGVtZW50LnRhZ05hbWUgIT0gInN2ZyIpCisgICAgICAgIHRpdGxlRWxlbWVudCA9IHRpdGxlRWxl
bWVudEZyb21FbGVtZW50VXB3YXJkKGVsZW1lbnQpOworCisgICAgICBpZiAoIXRpdGxlRWxlbWVu
dCAmJiB0b29sVGlwLmxlbmd0aCA9PSAwIHx8IHRvb2xUaXAgPT0gdGl0bGVFbGVtZW50LnRleHRD
b250ZW50KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAvLyBJZiB0aGUg
QysrIGNvZGUgZXhwZWN0ZWQgdG9vbHRpcCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgY2FsY3VsYXRl
ZCB0b29sdGlwLCBsb2cKKyAgICAgIC8vIHRoZW0gdG8gdGhlIGFjdHVhbCByZXN1bHQgZmlsZS4K
KyAgICAgIGRlYnVnKGVsZW1lbnQudGFnTmFtZSArICI6Iik7CisgICAgICBkZWJ1ZygiXHRpZDpc
dFx0IiArIGVsZW1lbnQuaWQpOworICAgICAgZGVidWcoIlx0YWN0dWFsOlx0XHRcJyIgKyB0b29s
VGlwICsgIlwnIik7CisgICAgICBkZWJ1ZygiXHRleHBlY3RlZDpcdFwnIiArICh0aXRsZUVsZW1l
bnQgPyB0aXRsZUVsZW1lbnQudGV4dENvbnRlbnQgOiAiIikgKyAiXCdcbiIpOworICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlmaWVzIHRoZSB0b29sdGlwIHRleHQgZm9y
IGFuIFNWRyBlbGVtZW50IGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzCisgICAgZnVuY3Rpb24gdmVy
aWZ5RWxlbWVudFRyZWVUb29sVGlwcyhlbGVtZW50KQorICAgIHsKKyAgICAgIHZhciBjaGlsZHJl
biA9IGVsZW1lbnQuY2hpbGROb2RlczsKKyAgICAgIHZhciByZXN1bHQgPSB2ZXJpZnlFbGVtZW50
VG9vbFRpcChlbGVtZW50KTsKKworICAgICAgLy8gVmVyaWZ5IHRoZSB0b29sdGlwcyBvZiB0aGUg
Y2hpbGRyZW4gZWxlbWVudHMKKyAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGNoaWxkcmVuW2ldLm5vZGVUeXBlICE9IDEpCisgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgCisgICAgICAgIGlmIChjaGlsZHJlbltpXS50YWdO
YW1lID09ICJkZWZzIiB8fCBjaGlsZHJlbltpXS50YWdOYW1lID09ICJ0aXRsZSIpCisgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgCisgICAgICAgIHJlc3VsdCAmPSB2ZXJpZnlFbGVtZW50
VHJlZVRvb2xUaXBzKGNoaWxkcmVuW2ldKTsKKyAgICAgIH0KKyAgICAgIAorICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgeworICAg
ICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICBkZWJ1Zyh2ZXJpZnlFbGVtZW50VHJlZVRvb2xUaXBzKGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXSwgMCkgPyAiUEFTUyIgOiAiRkFJTEVEIik7Cisg
ICAgICAgfQorICAgICB9CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0KCkiPgorICA8c3ZnIHdpZHRoPSI1MDAiIGhlaWdodD0iNTAwIiBpZD0ibWFpbl9zdmciPgor
ICAgIDx0aXRsZT5vdXRlcm1vc3Qgc3ZnPC90aXRsZT4KKyAgICA8ZGVmcz4KKyAgICAgIDxnIGlk
PSJzaGFwZSI+CisgICAgICAgIDxyZWN0IHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBmaWxsPSJ5
ZWxsb3ciLz4KKyAgICAgICAgPGNpcmNsZSBjeD0iMTAiIGN5PSIxMCIgcj0iMTAiIGZpbGw9InJl
ZCI+IAorICAgICAgICAgIDx0aXRsZT5kZWYgc21hbGwgY2lyY2xlITwvdGl0bGU+CisgICAgICAg
IDwvY2lyY2xlPgorICAgICAgICA8Y2lyY2xlIGN4PSI4MCIgY3k9IjgwIiByPSIyMCIgZmlsbD0i
cmVkIj4KKyAgICAgICAgICA8dGl0bGU+ZGVmIGJpZyBjaXJjbGUhPC90aXRsZT4KKyAgICAgICAg
PC9jaXJjbGU+CisgICAgICAgIDxnPgorICAgICAgICAgIDxyZWN0IGlkPSJsaW1lX3JlY3QiIHg9
IjIwIiB5PSIyMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBmaWxsPSJsaW1lIi8+CisgICAgICAg
ICAgPGNpcmNsZSBpZD0iYmlnX2NpcmNsZSIgY3g9IjQwIiBjeT0iNDAiIHI9IjEwIiBmaWxsPSJy
ZWQiPgorICAgICAgICAgICAgPHRpdGxlPm5lc3RlZCBjaXJjbGUhPC90aXRsZT4KKyAgICAgICAg
ICA8L2NpcmNsZT4KKyAgICAgICAgPC9nPgorICAgICAgICA8dGl0bGU+ZGVmIGcgZWxlbWVudCE8
L3RpdGxlPgorICAgICAgPC9nPgorICAgIDwvZGVmcz4KKyAgICA8ZyBpZD0ibWFpbl9nIj4KKyAg
ICAgIDxyZWN0IGlkPSJ5ZWxsb3dfcmVjdCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9
InllbGxvdyIvPgorICAgICAgPGNpcmNsZSBpZD0ic21hbGxfY2lyY2xlIiBjeD0iMTAiIGN5PSIx
MCIgcj0iMTAiIGZpbGw9InJlZCI+IAorICAgICAgICA8dGl0bGU+c21hbGwgY2lyY2xlITwvdGl0
bGU+CisgICAgICA8L2NpcmNsZT4KKyAgICAgIDxjaXJjbGUgaWQ9ImJpZ19jaXJjbGUiIGN4PSI4
MCIgY3k9IjgwIiByPSIyMCIgZmlsbD0icmVkIj4KKyAgICAgICAgPHRpdGxlPmJpZyBjaXJjbGUh
PC90aXRsZT4KKyAgICAgIDwvY2lyY2xlPgorICAgICAgPGcgaWQ9InN1Yl9nIj4KKyAgICAgICAg
PHJlY3QgaWQ9ImxpbWVfcmVjdCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAi
IGZpbGw9ImxpbWUiLz4KKyAgICAgICAgPGNpcmNsZSBpZD0ibmVzdGVkX2NpcmNsZSIgY3g9IjQw
IiBjeT0iNDAiIHI9IjEwIiBmaWxsPSJyZWQiPgorICAgICAgICAgIDx0aXRsZT5uZXN0ZWQgY2ly
Y2xlITwvdGl0bGU+CisgICAgICAgIDwvY2lyY2xlPgorICAgICAgPC9nPgorICAgICAgPHRpdGxl
Pm1haW4gZyBlbGVtZW50PC90aXRsZT4KKyAgICA8L2c+CisgICAgPHVzZSBpZD0idXNlX3dpdGhf
dGl0bGUiIHhsaW5rOmhyZWY9IiNzaGFwZSIgeD0iMCIgeT0iMTIwIj4KKyAgICAgIDx0aXRsZT51
c2UgZWxlbWVudCE8L3RpdGxlPgorICAgIDwvdXNlPgorICAgIDx1c2UgaWQ9InVzZV93aXRob3V0
X3RpdGxlIiB4bGluazpocmVmPSIjc2hhcGUiIHg9IjAiIHk9IjI0MCIgLz4KKyAgPC9zdmc+Cisg
IDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244629</attachid>
            <date>2015-01-14 12:51:50 -0800</date>
            <delta_ts>2015-01-14 15:51:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-139690-20150114125156.patch</filename>
            <type>text/plain</type>
            <size>21047</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODIxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBACisyMDE1LTAxLTEzICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgUkVHUkVTU0lP
TiAocjE1NDc2OSk6IFdyb25nIDx0aXRsZT4gdGFrZW4gYXMgYSB0b29sdGlwIGZvciBTVkcgZWxl
bWVudC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEz
OTY5MC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBC
ZWZvcmUgcjE1NDc2OSwgd2Ugd2VyZSBjYWxsaW5nIFRyYXZlcnNhbDxTVkdUaXRsZUVsZW1lbnQ+
OjpmaXJzdFdpdGhpbigpLCB3aGljaCByZXR1cm5zCisgICAgICAgIHRoZSBmaXJzdCBpbW1lZGlh
dGUgU1ZHVGl0bGVFbGVtZW50IGNoaWxkLiBJbiByMTU0NzY5LCBUcmF2ZXJzYWw8U1ZHVGl0bGVF
bGVtZW50Pjo6Zmlyc3RXaXRoaW4oKQorICAgICAgICB3YXMgcmVwbGFjZWQgYnkgZGVzY2VuZGFu
dHNPZlR5cGU8U1ZHVGl0bGVFbGVtZW50PiB3aGljaCByZXR1cm5zIGFsbCBkZXNjZW5kYW50cyBT
VkdUaXRsZUVsZW1lbnRzLgorICAgICAgICBUaGVuIHdlIHdlcmUgcmV0dXJuaW5nIHRoZSBmaXJz
dCBlbGVtZW50IG9mIHRoZXNlIGRlc2NlbmRhbnRzLCB3aGljaCBtYXkgbm90IGJlIGFuIGltbWVk
aWF0ZQorICAgICAgICBjaGlsZCBvZiB0aGUgZWxlbWVudCwgYXMgdGhlIHRpdGxlIG9mIHRoZSBT
VkdFbGVtZW50LiBUaGlzIHdhcyB0aGUgcmVhc29uIG9mIHRoaXMgYnVnLiBUaGUKKyAgICAgICAg
Zml4IGlzIHRvIHVzZSBjaGlsZHJlbk9mVHlwZTxTVkdUaXRsZUVsZW1lbnQ+KCkgaW5zdGVhZCwg
d2hpY2ggcmV0dXJucyB0aGUgaW1tZWRpYXRlIFNWR1RpdGxlRWxlbWVudAorICAgICAgICBjaGls
ZHJlbiBvZiBhbiBTVkdFbGVtZW50LgorCisgICAgICAgIEFsc28gd2Ugd2VyZSBub3QgZm9sbG93
aW5nIGV4YWN0bHkgdGhlIHNwZWNzIGZvciB0aGUgcm9vdG1vc3QgU1ZHIGVsZW1lbnQncyB0aXRs
ZSB2YWx1ZS4KKyAgICAgICAgQWNjb3JkaW5nIHRvIHRoZSBXM0Mgc3BlY3MsIGZvciBzdGFuZC1h
bG9uZSBTVkcgZG9jdW1lbnRzIG9ubHksIHRoZSByb290bW9zdCBTVkcgZWxlbWVudAorICAgICAg
ICBzaG91bGQgbm90IHJldHVybiBhIHRpdGxlLiBCdXQgd2Ugd2VyZSBub3QgcmV0dXJuaW5nIGEg
dGl0bGUgZm9yIHRoZSByb290bW9zdCBTVkcgZWxlbWVudAorICAgICAgICBhbHdheXMuIFRoZSBm
aXggaXMgdG8gcmV0dXJuIGEgZW1wdHkgdGl0bGUgZm9yIHRoZSByb290bW9zdCBTVkcgZWxlbWVu
dCBvbmx5IGlmIHRvcERvY3VtZW50KCkKKyAgICAgICAgb2YgdGhlIGVsZW1lbnQgaXNTVkdEb2N1
bWVudCgpLgorICAgICAgICAKKyAgICAgICAgTk9URTogVGhlIG1haW4gU1ZHIHNwZWNzIGh0dHA6
Ly93d3cudzMub3JnL1RSL1NWRy9pbnRlcmFjdC5odG1sI2hpdC10ZXN0aW5nIChXM0MgUmVjb21t
ZW5kYXRpb24KKyAgICAgICAgMTYgQXVndXN0IDIwMTEpIGFuZCBodHRwOi8vd3d3LnczLm9yZy9U
Ui9TVkcvc3RydWN0Lmh0bWwjRGVzY3JpcHRpb25BbmRUaXRsZUVsZW1lbnRzIChXM0MKKyAgICAg
ICAgUmVjb21tZW5kYXRpb24gMTYgQXVndXN0IDIwMTEpIGRvIG5vdCBzYXkgaG93IHRoZSB0b29s
dGlwIG9mIGFuIFNWRyBlbGVtZW50IGlzIGNhbGN1bGF0ZWQuIEJ1dAorICAgICAgICB0aGUgU1ZH
IHRpbnkgc3BlY3MgaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHVGlueTEyL3N0cnVjdC5odG1sI3Vp
VGl0bGVEZXNjQmVoYXZpb3IgKFczQworICAgICAgICBSZWNvbW1lbmRhdGlvbiAyMiBEZWNlbWJl
ciAyMDA4KSBob3dldmVyIGV4cGxhaW5zIHdlbGwgdGhlIHRvb2x0aXAgY2FsY3VsYXRpb24gZm9y
IHRoZSBlbWJlZGRlZAorICAgICAgICBhbmQgdGhlIHN0YW5kLWFsb25lIFNWRyBjYXNlcy4gQW5k
IGl0IHNlZW1zIHRoaXMgd2hhdCB3ZSBzaG91bGQgcmVseSBvbi4KKworICAgICAgICBUZXN0OiBz
dmcvaGl0dGVzdC9zdmctc3RhbmRhbG9uZS10b29sdGlwLnN2ZworICAgICAgICAgICAgICBzdmcv
aGl0dGVzdC9zdmctZW1iZWRkZWQtdG9vbHRpcC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLmV4
cC5pbjoKKyAgICAgICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5oOgorICAgICAgICBNYWtl
IEhpdFRlc3RSZXN1bHQ6OnNldElubmVyTm9kZSBiZSBXRUJDT1JFX0VYUE9SVAorICAgICAgICAK
KyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVt
ZW50Ojp0aXRsZSk6CisgICAgICAgIFJlcGxhY2UgZGVzY2VuZGFudHNPZlR5cGU8U1ZHVGl0bGVF
bGVtZW50PigpIGJ5IGNoaWxkcmVuT2ZUeXBlPFNWR1RpdGxlRWxlbWVudD4oKS4KKyAgICAgICAg
Rml4IHRoZSB0aXRsZSB2YWx1ZSBvZiB0aGUgcm9vdG1vc3QgU1ZHIGVsZW1lbnQuCisgICAgICAg
IAorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6dG9vbFRpcEZyb21FbGVtZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
cy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKyAgICAgICAgQWRkIGEgbmV3
IGludGVybmFsIGZ1bmN0aW9uIHRvb2xUaXBGcm9tRWxlbWVudCgpIHdoaWNoIHJldHVybnMgdGhl
IHRvb2x0aXAgdGV4dCBmb3IgYQorICAgICAgICBnaXZlbiBlbGVtZW50LgorCiAyMDE1LTAxLTA5
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3Zl
IG1vcmUgc3luYyBkYXRhYmFzZSBjb2RlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4
cC5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNp
b24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29w
eSkKQEAgLTMxMiw2ICszMTIsNyBAQCBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXAzc2V0RVJL
TjNXVEY2CiBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXA2cmVtb3ZlRU5TXzE0SFRUUEhlYWRl
ck5hbWVFCiBfX1pON1dlYkNvcmUxM0hUVFBIZWFkZXJNYXBDMUV2CiBfX1pON1dlYkNvcmUxM0hU
VFBIZWFkZXJNYXBEMUV2CitfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQxMnNldElubmVyTm9k
ZUVQTlNfNE5vZGVFCiBfX1pON1dlYkNvcmUxM0hpdFRlc3RSZXN1bHQyMnNldFRvTm9uU2hhZG93
QW5jZXN0b3JFdgogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU18xMUxheW91dFBv
aW50RQogX19aTjdXZWJDb3JlMTNIaXRUZXN0UmVzdWx0QzFFUktOU18xMUxheW91dFBvaW50RWpq
amoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAkocmV2aXNp
b24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBIaXRU
ZXN0TG9jYXRpb24mIGhpdFRlc3RMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGl0VGVzdExv
Y2F0aW9uOyB9CiAKLSAgICB2b2lkIHNldElubmVyTm9kZShOb2RlKik7CisgICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBzZXRJbm5lck5vZGUoTm9kZSopOwogICAgIHZvaWQgc2V0SW5uZXJOb25TaGFy
ZWROb2RlKE5vZGUqKTsKICAgICB2b2lkIHNldFVSTEVsZW1lbnQoRWxlbWVudCopOwogICAgIHZv
aWQgc2V0U2Nyb2xsYmFyKFNjcm9sbGJhciopOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTQsOSArOTU0LDEwIEBAIGJvb2wgU1ZHRWxlbWVudDo6
ZmlsdGVyT3V0QW5pbWF0YWJsZUF0dHIKIAogU3RyaW5nIFNWR0VsZW1lbnQ6OnRpdGxlKCkgY29u
c3QKIHsKLSAgICAvLyBBY2NvcmRpbmcgdG8gc3BlYywgd2Ugc2hvdWxkIG5vdCByZXR1cm4gdGl0
bGVzIHdoZW4gaG92ZXJpbmcgb3ZlciByb290IDxzdmc+IGVsZW1lbnRzICh0aG9zZQotICAgIC8v
IDx0aXRsZT4gZWxlbWVudHMgYXJlIHRoZSB0aXRsZSBvZiB0aGUgZG9jdW1lbnQsIG5vdCBhIHRv
b2x0aXApIHNvIHdlIGluc3RhbnRseSByZXR1cm4uCi0gICAgaWYgKGlzT3V0ZXJtb3N0U1ZHU1ZH
RWxlbWVudCgpKQorICAgIC8vIEFjY29yZGluZyB0byBzcGVjLCBmb3Igc3RhbmQtYWxvbmUgU1ZH
IGRvY3VtZW50cyB3ZSBzaG91bGQgbm90IHJldHVybiBhIHRpdGxlIHdoZW4KKyAgICAvLyBob3Zl
cmluZyBvdmVyIHRoZSByb290bW9zdCBTVkcgZWxlbWVudCAodGhlIGZpcnN0IDx0aXRsZT4gZWxl
bWVudCBpcyB0aGUgdGl0bGUgb2YKKyAgICAvLyB0aGUgZG9jdW1lbnQsIG5vdCBhIHRvb2x0aXAp
IHNvIHdlIGluc3RhbnRseSByZXR1cm4uCisgICAgaWYgKGlzT3V0ZXJtb3N0U1ZHU1ZHRWxlbWVu
dCgpICYmIGRvY3VtZW50KCkudG9wRG9jdW1lbnQoKS5pc1NWR0RvY3VtZW50KCkpCiAgICAgICAg
IHJldHVybiBTdHJpbmcoKTsKIAogICAgIC8vIFdhbGsgdXAgdGhlIHRyZWUsIHRvIGZpbmQgb3V0
IHdoZXRoZXIgd2UncmUgaW5zaWRlIGEgPHVzZT4gc2hhZG93IHRyZWUsIHRvIGZpbmQgdGhlIHJp
Z2h0IHRpdGxlLgpAQCAtOTc4LDcgKzk3OSw3IEBAIFN0cmluZyBTVkdFbGVtZW50Ojp0aXRsZSgp
IGNvbnN0CiAKICAgICAvLyBJZiB3ZSBhcmVuJ3QgYW4gaW5zdGFuY2UgaW4gYSA8dXNlPiBvciB0
aGUgPHVzZT4gdGl0bGUgd2FzIG5vdCBmb3VuZCwgdGhlbiBmaW5kIHRoZSBmaXJzdAogICAgIC8v
IDx0aXRsZT4gY2hpbGQgb2YgdGhpcyBlbGVtZW50LgotICAgIGF1dG8gZmlyc3RUaXRsZSA9IGRl
c2NlbmRhbnRzT2ZUeXBlPFNWR1RpdGxlRWxlbWVudD4oKnRoaXMpLmZpcnN0KCk7CisgICAgYXV0
byBmaXJzdFRpdGxlID0gY2hpbGRyZW5PZlR5cGU8U1ZHVGl0bGVFbGVtZW50PigqdGhpcykuZmly
c3QoKTsKICAgICByZXR1cm4gZmlyc3RUaXRsZSA/IGNvbnN0X2Nhc3Q8U1ZHVGl0bGVFbGVtZW50
Kj4oZmlyc3RUaXRsZSktPmlubmVyVGV4dCgpIDogU3RyaW5nKCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHJldmlzaW9uIDE3Nzk4MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5OSw2ICsy
MDk5LDE4IEBAIFN0cmluZyBJbnRlcm5hbHM6Om1hcmtlclRleHRGb3JMaXN0SXRlbSgKICAgICBy
ZXR1cm4gV2ViQ29yZTo6bWFya2VyVGV4dEZvckxpc3RJdGVtKGVsZW1lbnQpOwogfQogCitTdHJp
bmcgSW50ZXJuYWxzOjp0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwgRXhjZXB0
aW9uQ29kZSYgZWMpIGNvbnN0Cit7CisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICAgIGVjID0g
SU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAg
IEhpdFRlc3RSZXN1bHQgcmVzdWx0OworICAgIHJlc3VsdC5zZXRJbm5lck5vZGUoZWxlbWVudCk7
CisgICAgVGV4dERpcmVjdGlvbiBkaXI7CisgICAgcmV0dXJuIHJlc3VsdC50aXRsZShkaXIpOwor
fQorCiBTdHJpbmcgSW50ZXJuYWxzOjpnZXRJbWFnZVNvdXJjZVVSTChFbGVtZW50KiBlbGVtZW50
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWVsZW1lbnQpIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw4IEBA
IHB1YmxpYzoKIAogICAgIFN0cmluZyBtYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKIAorICAgIFN0cmluZyB0b29sVGlwRnJvbUVsZW1lbnQoRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKwogICAgIHZvaWQgZm9yY2VSZWxvYWQoYm9vbCBlbmRU
b0VuZCk7CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpJbmRleDogU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkocmV2aXNpb24gMTc3OTgzKQorKysgU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNiArMjU2LDgg
QEAgZW51bSBQYWdlT3ZlcmxheVR5cGUgewogCiAgICAgW1JhaXNlc0V4Y2VwdGlvbl0gRE9NU3Ry
aW5nIG1hcmtlclRleHRGb3JMaXN0SXRlbShFbGVtZW50IGVsZW1lbnQpOwogCisgICAgW1JhaXNl
c0V4Y2VwdGlvbl0gRE9NU3RyaW5nIHRvb2xUaXBGcm9tRWxlbWVudChFbGVtZW50IGVsZW1lbnQp
OworCiAgICAgU2VyaWFsaXplZFNjcmlwdFZhbHVlIGRlc2VyaWFsaXplQnVmZmVyKEFycmF5QnVm
ZmVyIGJ1ZmZlcik7CiAgICAgQXJyYXlCdWZmZXIgc2VyaWFsaXplT2JqZWN0KFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSBvYmopOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzg0MDcpCisrKyBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxNS0wMS0x
MyAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAg
IFJFR1JFU1NJT04gKHIxNTQ3NjkpOiBXcm9uZyA8dGl0bGU+IHRha2VuIGFzIGEgdG9vbHRpcCBm
b3IgU1ZHIGVsZW1lbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzk2OTAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBzdmcvaGl0dGVzdC9yZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIHN2Zy9o
aXR0ZXN0L3Jlc291cmNlcy9zdmctdG9vbHRpcC5zdmc6IEFkZGVkLgorICAgICAgICBTaGFyZWQg
cmVzb3VyY2VzIHRvIGJlIHVzZWQgYnkgdGhlIHRlc3RzLgorCisgICAgICAgICogc3ZnL2hpdHRl
c3QvcmVzb3VyY2VzL3N2Zy10b29sdGlwLmpzOiBBZGRlZC4KKyAgICAgICAgVGhpcyBjb2RlIG1p
bWljcyB0aGUgQysrIHRvb2x0aXAgY2FsY3VsYXRpb24gYW5kIGNvbXBhcmVzIGl0cyByZXN1bHQg
d2l0aCB3aGF0IHRoZSBDKysKKyAgICAgICAgY29kZSByZXR1cm5zLgorICAgICAgICAKKyAgICAg
ICAgKiBzdmcvaGl0dGVzdC9zdmctZW1iZWRkZWQtdG9vbHRpcC1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIHN2Zy9oaXR0ZXN0L3N2Zy1lbWJlZGRlZC10b29sdGlwLmh0bWw6IEFkZGVk
LgorICAgICAgICBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSB0b29sdGlwIHRleHQgZm9yIFNW
RyBlbGVtZW50cyBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseSB3aGVuCisgICAgICAgIHRoZSBTVkcg
aXMgZW1iZWRkZWQgaW4gYW4gSFRNTCBlaXRoZXIgdGhyb3VnaCBpbmxpbmUgPHN2Zz4gdGFnIG9y
IHRocm91Z2ggYW4gPGVtYmVkPgorICAgICAgICB0YWcuIEluIGJvdGggY2FzZXMsIHRoZSByb290
bW9zdCBTVkcgZWxlbWVudCBzaG91bGQgcmV0dXJuIHRoZSBTVkcgZG9jdW1lbnQgdGl0bGUuCisg
ICAgICAgIAorICAgICAgICAqIHN2Zy9oaXR0ZXN0L3N2Zy1zdGFuZGFsb25lLXRvb2x0aXAtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBzdmcvaGl0dGVzdC9zdmctc3RhbmRhbG9uZS10
b29sdGlwLnN2ZzogQWRkZWQuCisgICAgICAgIFRoaXMgdGVzdCBlbnN1cmVzIHRoYXQgZm9yIHN0
YW5kLWFsb25lIFNWRyBkb2N1bWVudHMsIHRoZSB0b29sdGlwIHRleHQgZm9yIFNWRyBlbGVtZW50
cworICAgICAgICBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4gSW4gdGhpcyBjYXNlLCB0aGUgcm9v
dG1vc3QgU1ZHIGVsZW1lbnQgc2hvdWxkIG5vdCByZXR1cm4gYQorICAgICAgICB0aXRsZSBzaW5j
ZSB0aGUgU1ZHIGRvY3VtZW50IHRpdGxlIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBicm93c2Vy
IGNocm9tZS4KKwogMjAxNS0wMS0xMyAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBbV2luXSBVbnJldmlld2VkIHRlc3QgZ2FyZGVuaW5nLgpJbmRleDogTGF5
b3V0VGVzdHMvc3ZnL2hpdHRlc3Qvc3ZnLWVtYmVkZGVkLXRvb2x0aXAtZXhwZWN0ZWQudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy1lbWJlZGRlZC10b29sdGlw
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2
Zy1lbWJlZGRlZC10b29sdGlwLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDggQEAKKyAgCisKK1ZlcmlmeWluZyB0aGUgaW5saW5lIFNWRzoKK1BBU1MKKworVmVyaWZ5aW5n
IHRoZSBlbWJlZGRlZCBTVkc6CitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0
L3N2Zy1lbWJlZGRlZC10b29sdGlwLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvc3Zn
L2hpdHRlc3Qvc3ZnLWVtYmVkZGVkLXRvb2x0aXAuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy1lbWJlZGRlZC10b29sdGlwLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzwhLS0KKyAgICBS
RUdSRVNTSU9OIChyMTU0NzY5KTogV3JvbmcgPHRpdGxlPiB0YWtlbiBhcyBhIHRvb2x0aXAgZm9y
IFNWRyBlbGVtZW50LgorICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzk2OTAuCisKKyAgICBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSB0b29sdGlwIHRleHQg
Zm9yIFNWRyBlbGVtZW50cyBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4KKyAgICBJdCBjb3ZlcnMg
dGhlIGNhc2Ugd2hlbiBhbiBTVkcgaXMgZW1iZWRkZWQgaW4gYW4gSFRNTCBlaXRoZXIgdGhyb3Vn
aCBhbiBpbmxpbmUKKyAgICA8c3ZnPiB0YWcgb3IgdGhyb3VnaCBhbiA8ZW1iZWQ+IHRhZy4KKy0t
PgorPGhlYWQ+CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvc3ZnLXRvb2x0aXAuanMiPjwvc2Ny
aXB0PgorICA8c2NyaXB0PgorICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAgIHsKKyAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVUZXh0Tm9kZShtZXNzYWdlICsgJ1xuJykpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1blRl
c3QoKQorICAgIHsKKyAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICB0ZXN0
UnVubmVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAvLyBWZXJpZnkgdGhlIGlubGluZSA8c3Zn
PiBjYXNlCisgICAgICAgIGxvZygiVmVyaWZ5aW5nIHRoZSBpbmxpbmUgU1ZHOiIpOworICAgICAg
ICBsb2codmVyaWZ5RWxlbWVudFRyZWVUb29sVGlwcyhkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgic3ZnIilbMF0pID8gIlBBU1MiIDogIiIpOworCisgICAgICAgIC8vIFZlcmlmeSB0aGUg
PGVtYmVkPiBTVkcgY2FzZQorICAgICAgICBsb2coIlxuVmVyaWZ5aW5nIHRoZSBlbWJlZGRlZCBT
Vkc6Iik7CisgICAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVt
YmVkSWQiKTsKKyAgICAgICAgdmFyIFNWR0RvY21lbnQgPSBlbGVtZW50LmdldFNWR0RvY3VtZW50
KCk7CisgICAgICAgIGxvZyh2ZXJpZnlFbGVtZW50VHJlZVRvb2xUaXBzKFNWR0RvY21lbnQucm9v
dEVsZW1lbnQsIDApID8gIlBBU1MiIDogIiIpOworICAgICAgfQorICAgIH0KKyAgPC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CisgICAgCisgIDwhLS0gSW5saW5l
IFNWRyAtLT4KKyAgPHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjQwMCIgaWQ9Im1haW5fc3ZnIj4K
KyAgICA8dGl0bGU+b3V0ZXJtb3N0IHN2ZzwvdGl0bGU+CisgICAgPGRlZnM+CisgICAgICA8ZyBp
ZD0ic2hhcGUiPgorICAgICAgICA8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0i
eWVsbG93Ii8+CisgICAgICAgIDxjaXJjbGUgY3g9IjEwIiBjeT0iMTAiIHI9IjEwIiBmaWxsPSJy
ZWQiPiAKKyAgICAgICAgICA8dGl0bGU+ZGVmIHNtYWxsIGNpcmNsZSE8L3RpdGxlPgorICAgICAg
ICA8L2NpcmNsZT4KKyAgICAgICAgPGNpcmNsZSBjeD0iODAiIGN5PSI4MCIgcj0iMjAiIGZpbGw9
InJlZCI+CisgICAgICAgICAgPHRpdGxlPmRlZiBiaWcgY2lyY2xlITwvdGl0bGU+CisgICAgICAg
IDwvY2lyY2xlPgorICAgICAgICA8Zz4KKyAgICAgICAgICA8cmVjdCB4PSIyMCIgeT0iMjAiIHdp
ZHRoPSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibGltZSIvPgorICAgICAgICAgIDxjaXJjbGUgY3g9
IjQwIiBjeT0iNDAiIHI9IjEwIiBmaWxsPSJyZWQiPgorICAgICAgICAgICAgPHRpdGxlPm5lc3Rl
ZCBjaXJjbGUhPC90aXRsZT4KKyAgICAgICAgICA8L2NpcmNsZT4KKyAgICAgICAgPC9nPgorICAg
ICAgICA8dGl0bGU+ZGVmIGcgZWxlbWVudCE8L3RpdGxlPgorICAgICAgPC9nPgorICAgIDwvZGVm
cz4KKyAgICAKKyAgICA8ZyBpZD0ibWFpbl9nIj4KKyAgICAgIDxyZWN0IGlkPSJ5ZWxsb3dfcmVj
dCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9InllbGxvdyIvPgorICAgICAgPGNpcmNs
ZSBpZD0ic21hbGxfY2lyY2xlIiBjeD0iMTAiIGN5PSIxMCIgcj0iMTAiIGZpbGw9InJlZCI+IAor
ICAgICAgICA8dGl0bGU+c21hbGwgY2lyY2xlITwvdGl0bGU+CisgICAgICA8L2NpcmNsZT4KKyAg
ICAgIDxjaXJjbGUgaWQ9ImJpZ19jaXJjbGUiIGN4PSI4MCIgY3k9IjgwIiByPSIyMCIgZmlsbD0i
cmVkIj4KKyAgICAgICAgPHRpdGxlPmJpZyBjaXJjbGUhPC90aXRsZT4KKyAgICAgIDwvY2lyY2xl
PgorICAgICAgPGcgaWQ9InN1Yl9nIj4KKyAgICAgICAgPHJlY3QgaWQ9ImxpbWVfcmVjdCIgeD0i
MjAiIHk9IjIwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIGZpbGw9ImxpbWUiLz4KKyAgICAgICAg
PGNpcmNsZSBpZD0ibmVzdGVkX2NpcmNsZSIgY3g9IjQwIiBjeT0iNDAiIHI9IjEwIiBmaWxsPSJy
ZWQiPgorICAgICAgICAgIDx0aXRsZT5uZXN0ZWQgY2lyY2xlITwvdGl0bGU+CisgICAgICAgIDwv
Y2lyY2xlPgorICAgICAgPC9nPgorICAgICAgPHRpdGxlPm1haW4gZyBlbGVtZW50PC90aXRsZT4K
KyAgICA8L2c+CisgICAgCisgICAgPCEtLSA8dXNlPiBlbGVtZW50IHNob3VsZCByZXR1cm4gdGhl
IGZpcnN0IDx0aXRsZT4gZWxlbWVudCBjaGlsZCBpZiBpdCBleGlzdHMgLS0+CisgICAgPHVzZSBp
ZD0idXNlX3dpdGhfdGl0bGUiIHhsaW5rOmhyZWY9IiNzaGFwZSIgeD0iMCIgeT0iMTIwIj4KKyAg
ICAgIDx0aXRsZT51c2UgZWxlbWVudCE8L3RpdGxlPgorICAgIDwvdXNlPgorICAgIDx1c2UgaWQ9
InVzZV93aXRob3V0X3RpdGxlIiB4bGluazpocmVmPSIjc2hhcGUiIHg9IjAiIHk9IjI0MCIvPgor
ICA8L3N2Zz4KKworICA8IS0tIEVtYmVkZGVkIFNWRyAtLT4KKyAgPGVtYmVkIGlkPSJlbWJlZElk
IiBzcmM9InJlc291cmNlcy9zdmctdG9vbHRpcC5zdmciPgorCisgIDwhLS0gRm9yIGxvZ2dpbmcg
dGhlIHRlc3QgcmVzdWx0cyAtLT4gICAgICAKKyAgPHByZSBpZD0ibG9nIj48YnI+PC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9zdmcvaGl0dGVzdC9zdmctc3RhbmRh
bG9uZS10b29sdGlwLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdmcv
aGl0dGVzdC9zdmctc3RhbmRhbG9uZS10b29sdGlwLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy1zdGFuZGFsb25lLXRvb2x0aXAtZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMyBAQAorVmVyaWZ5aW5nIHRoZSBTVkcg
ZG9jdW1lbnQ6CitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3N2Zy1zdGFu
ZGFsb25lLXRvb2x0aXAuc3ZnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0
L3N2Zy1zdGFuZGFsb25lLXRvb2x0aXAuc3ZnCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
c3ZnL2hpdHRlc3Qvc3ZnLXN0YW5kYWxvbmUtdG9vbHRpcC5zdmcJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MSBAQAorPHN2ZworICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIKKyAgICB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIKKyAgICB3
aWR0aD0iMjAwIiBoZWlnaHQ9IjQwMCIKKyAgICBpZD0ibWFpbl9zdmciPgorCisgIDwhLS0KKyAg
ICAgIFJFR1JFU1NJT04gKHIxNTQ3NjkpOiBXcm9uZyA8dGl0bGU+IHRha2VuIGFzIGEgdG9vbHRp
cCBmb3IgU1ZHIGVsZW1lbnQuCisgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM5NjkwLgorCisgICAgICBUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHRoZSB0b29s
dGlwIHRleHQgZm9yIFNWRyBlbGVtZW50cyBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4KKyAgICAg
IEl0IGNvdmVycyB0aGUgc3RhbmQtYWxpbmUgU1ZHIGNhc2UuCisgIC0tPgorICAgIAorICA8c2Ny
aXB0IHhsaW5rOmhyZWY9InJlc291cmNlcy9zdmctdG9vbHRpcC5qcyI+PC9zY3JpcHQ+CisgIDxz
Y3JpcHQ+CisgICAgZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCisgICAgeworICAgICAgdmFyIGVsZW1l
bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIik7CisgICAgICBlbGVtZW50LnRleHRD
b250ZW50ID0gZWxlbWVudC50ZXh0Q29udGVudCArIG1lc3NhZ2UgKyAiXG4iOworICAgIH0KKyAg
PC9zY3JpcHQ+CisKKyAgPCEtLSBUaGlzIHRpdGxlIHNob3VsZCBvbmx5IGFwcGVhciBpbiB0aGUg
YnJvd3NlciBjaHJvbWUgYW5kIG5vdCBhcyBhIHRvb2x0aXAgLS0+CisgIDx0aXRsZT5vdXRlcm1v
c3Qgc3ZnPC90aXRsZT4KKyAgCisgIDxkZWZzPgorICAgIDxnIGlkPSJzaGFwZSI+CisgICAgICA8
cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ieWVsbG93Ii8+CisgICAgICA8Y2ly
Y2xlIGN4PSIxMCIgY3k9IjEwIiByPSIxMCIgZmlsbD0icmVkIj4gCisgICAgICAgIDx0aXRsZT5k
ZWYgc21hbGwgY2lyY2xlITwvdGl0bGU+CisgICAgICA8L2NpcmNsZT4KKyAgICAgIDxjaXJjbGUg
Y3g9IjgwIiBjeT0iODAiIHI9IjIwIiBmaWxsPSJyZWQiPgorICAgICAgICA8dGl0bGU+ZGVmIGJp
ZyBjaXJjbGUhPC90aXRsZT4KKyAgICAgIDwvY2lyY2xlPgorICAgICAgPGc+CisgICAgICAgIDxy
ZWN0IHg9IjIwIiB5PSIyMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiBmaWxsPSJsaW1lIi8+Cisg
ICAgICAgIDxjaXJjbGUgY3g9IjQwIiBjeT0iNDAiIHI9IjEwIiBmaWxsPSJyZWQiPgorICAgICAg
ICAgIDx0aXRsZT5uZXN0ZWQgY2lyY2xlITwvdGl0bGU+CisgICAgICAgIDwvY2lyY2xlPgorICAg
ICAgPC9nPgorICAgICAgPHRpdGxlPmRlZiBnIGVsZW1lbnQhPC90aXRsZT4KKyAgICA8L2c+Cisg
IDwvZGVmcz4KKyAgCisgIDxnIGlkPSJtYWluX2ciPgorICAgIDxyZWN0IGlkPSJ5ZWxsb3dfcmVj
dCIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiIGZpbGw9InllbGxvdyIvPgorICAgIDxjaXJjbGUg
aWQ9InNtYWxsX2NpcmNsZSIgY3g9IjEwIiBjeT0iMTAiIHI9IjEwIiBmaWxsPSJyZWQiPiAKKyAg
ICAgIDx0aXRsZT5zbWFsbCBjaXJjbGUhPC90aXRsZT4KKyAgICA8L2NpcmNsZT4KKyAgICA8Y2ly
Y2xlIGlkPSJiaWdfY2lyY2xlIiBjeD0iODAiIGN5PSI4MCIgcj0iMjAiIGZpbGw9InJlZCI+Cisg
ICAgICA8dGl0bGU+YmlnIGNpcmNsZSE8L3RpdGxlPgorICAgIDwvY2lyY2xlPgorICAgIDxnIGlk
PSJzdWJfZyI+CisgICAgICA8cmVjdCBpZD0ibGltZV9yZWN0IiB4PSIyMCIgeT0iMjAiIHdpZHRo
PSI0MCIgaGVpZ2h0PSI0MCIgZmlsbD0ibGltZSIvPgorICAgICAgPGNpcmNsZSBpZD0ibmVzdGVk
X2NpcmNsZSIgY3g9IjQwIiBjeT0iNDAiIHI9IjEwIiBmaWxsPSJyZWQiPgorICAgICAgICA8dGl0
bGU+bmVzdGVkIGNpcmNsZSE8L3RpdGxlPgorICAgICAgPC9jaXJjbGU+CisgICAgPC9nPgorICAg
IDx0aXRsZT5tYWluIGcgZWxlbWVudDwvdGl0bGU+CisgIDwvZz4KKworICA8IS0tIDx1c2U+IGVs
ZW1lbnQgc2hvdWxkIHJldHVybiB0aGUgZmlyc3QgPHRpdGxlPiBlbGVtZW50ICBjaGlsZCBpZiBp
dCBleGlzdHMgLS0+CisgIDx1c2UgaWQ9InVzZV93aXRoX3RpdGxlIiB4bGluazpocmVmPSIjc2hh
cGUiIHg9IjAiIHk9IjEyMCI+CisgICAgPHRpdGxlPnVzZSBlbGVtZW50ITwvdGl0bGU+CisgIDwv
dXNlPgorICA8dXNlIGlkPSJ1c2Vfd2l0aG91dF90aXRsZSIgeGxpbms6aHJlZj0iI3NoYXBlIiB4
PSIwIiB5PSIyNDAiLz4KKworICA8IS0tIEZvciBsb2dnaW5nIHRoZSB0ZXN0IHJlc3VsdHMgLS0+
CisgIDxmb3JlaWduT2JqZWN0PgorICAgIDxwcmUgaWQ9ImxvZyIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiPjwvcHJlPgorICA8L2ZvcmVpZ25PYmplY3Q+CisgIAorICA8c2Ny
aXB0PgorICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KCk7CisgICAgICBsb2coIlZlcmlmeWluZyB0aGUgU1ZHIGRvY3VtZW50OiIpOworICAg
ICAgbG9nKHZlcmlmeUVsZW1lbnRUcmVlVG9vbFRpcHMoZG9jdW1lbnQucm9vdEVsZW1lbnQpID8g
IlBBU1MiIDogIiIpOworICAgIH0KKyAgPC9zY3JpcHQ+Cis8L3N2Zz4KSW5kZXg6IExheW91dFRl
c3RzL3N2Zy9oaXR0ZXN0L3Jlc291cmNlcy9zdmctdG9vbHRpcC5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9zdmcvaGl0dGVzdC9yZXNvdXJjZXMvc3ZnLXRvb2x0aXAuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9zdmcvaGl0dGVzdC9yZXNvdXJjZXMvc3ZnLXRvb2x0aXAuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLy8KKy8vIFJFR1JFU1NJT04gKHIxNTQ3
NjkpOiBXcm9uZyA8dGl0bGU+IHRha2VuIGFzIGEgdG9vbHRpcCBmb3IgU1ZHIGVsZW1lbnQuCisv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM5NjkwLgorLy8KKy8v
IFRoaXMgY29kZSBtaW1pY3MgdGhlIEMrKyBjb2RlIGZvciBjYWxjdWxhdGluZyB0aGUgdG9vbHRp
cCB0ZXh0IGZvciBhbiBTVkcgZWxlbWVudC4gCisvLyBJdCBhbHNvIHZlcmlmaWVzIHRoZSB0b29s
dGlwIHRleHQgZm9yIGFuIFNWRyBlbGVtZW50IGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLiBJZgor
Ly8gbWlzbWF0Y2hlcyBhcmUgZm91bmQsIGl0IGxvZ3MgdGhlbSBieSBjYWxsaW5nIHRoZSBmdW5j
dGlvbiAibG9nKCkiIHdoaWNoIHNob3VsZAorLy8gYmUgZGVmaW5lZCBieSB0aGUgdGVzdC4KKy8v
CisKKy8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlbGVtZW50IGNhbiByZXR1cm4gYSB0aXRsZSBvciBu
b3QKK2Z1bmN0aW9uIGNhblJldHVyblRpdGxlKGVsZW1lbnQpCit7CisgIGlmICghZWxlbWVudCB8
fCBlbGVtZW50LnRhZ05hbWUgPT0gInN2ZyIgJiYgZWxlbWVudC5vd25lckRvY3VtZW50IGluc3Rh
bmNlb2YgU1ZHRG9jdW1lbnQpCisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIFNlYXJjaGVzIHRoZSB0cmVlIGVsZW1lbnRzIHVwd2FyZCB0aWxsIGl0IGZpbmRz
IGFuIFNWR1RpdGxlRWxlbWVudCBjaGlsZAorZnVuY3Rpb24gdGl0bGVFbGVtZW50RnJvbUVsZW1l
bnRVcHdhcmQoZWxlbWVudCkKK3sKKyAgZm9yICg7IGNhblJldHVyblRpdGxlKGVsZW1lbnQpOyBl
bGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7CisKKyAgICAgIHZhciBjaGlsZHJlbiA9
IGVsZW1lbnQuY2hpbGROb2RlczsKKworICAgICAgLy8gU2VhcmNoIGltbWVkaWF0ZSBjaGlsZHJl
biBhbmQgaWYgYW55IG9mIHRoZW0gaXMgYSB0aXRsZSBlbGVtZW50IHJldHVybiBpdAorICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAgICAgICBpZiAo
Y2hpbGRyZW5baV0udGFnTmFtZSA9PSAidGl0bGUiKQorICAgICAgICAgIHJldHVybiBjaGlsZHJl
bltpXTsKKyAgICAgIH0KKyAgfQorICAgICAgICAKKyAgcmV0dXJuIG51bGw7Cit9CisKKy8vIFJl
dHVybnMgdGhlIHN0cmluZyBvZiB0aGUgU1ZHVGl0bGVFbGVtZW50IGNoaWxkIGlmIGl0IGV4aXN0
cyBpbiB0aGUgZWxlbWVudCdzCisvLyBjaGlsZHJlbiBsaXN0IG9yIGluIGl0cyBwYXJlbnQncyBj
aGlsZHJlbiBsaXN0LgorZnVuY3Rpb24gdGl0bGVGcm9tRWxlbWVudFVwd2FyZChlbGVtZW50KQor
eworICAgIHZhciB0aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW1lbnRGcm9tRWxlbWVudFVwd2FyZChl
bGVtZW50KTsKKyAgICByZXR1cm4gIXRpdGxlRWxlbWVudCA/ICIiIDogdGl0bGVFbGVtZW50LnRl
eHRDb250ZW50OworfQorCisvLyBWZXJpZmllcyB0aGUgdG9vbHRpcCB0ZXh0IG9mIGFuIFNWRyBl
bGVtZW50IAorZnVuY3Rpb24gdmVyaWZ5RWxlbWVudFRvb2xUaXAoZWxlbWVudCkKK3sKKyAgdmFy
IGFjdHVhbCA9IGludGVybmFscy50b29sVGlwRnJvbUVsZW1lbnQoZWxlbWVudCk7CisgIHZhciBl
eHBlY3RlZCA9IHRpdGxlRnJvbUVsZW1lbnRVcHdhcmQoZWxlbWVudCk7CisKKyAgaWYgKGFjdHVh
bCA9PSBleHBlY3RlZCkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgLy8gSWYgdGhlIEMrKyBj
b2RlIGV4cGVjdGVkIHRvb2x0aXAgaXMgZGlmZmVyZW50IGZyb20gdGhlIGNhbGN1bGF0ZWQgdG9v
bHRpcCwgbG9nCisgIC8vIHRoZW0gdG8gdGhlIGFjdHVhbCByZXN1bHQgZmlsZS4KKyAgbG9nKGVs
ZW1lbnQudGFnTmFtZSArICI6Iik7CisgIGxvZygiXHRpZDpcdFx0IiArIGVsZW1lbnQuaWQpOwor
ICBsb2coIlx0YWN0dWFsOlx0XHQnIiArIGFjdHVhbCArICInIik7CisgIGxvZygiXHRleHBlY3Rl
ZDpcdCciICsgZXhwZWN0ZWQgKyAiJ1xuIik7CisgIHJldHVybiBmYWxzZTsKK30KKworLy8gVmVy
aWZpZXMgdGhlIHRvb2x0aXAgdGV4dCBmb3IgYW4gU1ZHIGVsZW1lbnQgYW5kIGFsbCBpdHMgZGVz
Y2VuZGFudHMKK2Z1bmN0aW9uIHZlcmlmeUVsZW1lbnRUcmVlVG9vbFRpcHMoZWxlbWVudCkKK3sK
KyAgdmFyIGNoaWxkcmVuID0gZWxlbWVudC5jaGlsZE5vZGVzOworICB2YXIgcmVzdWx0ID0gdmVy
aWZ5RWxlbWVudFRvb2xUaXAoZWxlbWVudCk7CisKKyAgLy8gVmVyaWZ5IHRoZSB0b29sdGlwcyBv
ZiB0aGUgY2hpbGRyZW4gZWxlbWVudHMKKyAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5s
ZW5ndGg7IGkrKykgeworICAgIGlmIChjaGlsZHJlbltpXS5ub2RlVHlwZSAhPSBkb2N1bWVudC5F
TEVNRU5UX05PREUpCisgICAgICBjb250aW51ZTsKKyAgICAgIAorICAgIGlmIChjaGlsZHJlbltp
XS50YWdOYW1lID09ICJkZWZzIiB8fCBjaGlsZHJlbltpXS50YWdOYW1lID09ICJ0aXRsZSIpCisg
ICAgICBjb250aW51ZTsKKyAgICAgIAorICAgIHJlc3VsdCAmPSB2ZXJpZnlFbGVtZW50VHJlZVRv
b2xUaXBzKGNoaWxkcmVuW2ldKTsKKyAgfQorICAKKyAgcmV0dXJuIHJlc3VsdDsKK30KSW5kZXg6
IExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3Jlc291cmNlcy9zdmctdG9vbHRpcC5zdmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvc3ZnL2hpdHRlc3QvcmVzb3VyY2VzL3N2Zy10b29sdGlwLnN2
ZwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3N2Zy9oaXR0ZXN0L3Jlc291cmNlcy9zdmct
dG9vbHRpcC5zdmcJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorPHN2ZworICAgIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKKyAgICB4bWxuczp4bGluaz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94bGluayIKKyAgICB3aWR0aD0iMjAwIiBoZWlnaHQ9IjQwMCIKKyAg
ICBpZD0ibWFpbl9zdmciPgorICAgIAorICA8IS0tCisgICAgICBSRUdSRVNTSU9OIChyMTU0NzY5
KTogV3JvbmcgPHRpdGxlPiB0YWtlbiBhcyBhIHRvb2x0aXAgZm9yIFNWRyBlbGVtZW50LgorICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzOTY5MC4KKworICAg
ICAgVGhpcyBTVkcgaXMgaW5jbHVkZWQgaW4gdGhlIHRlc3Qgc3ZnLWVtYmVkZGVkLXRvb2x0aXAu
aHRtbCBpbiBhbiA8ZW1iZWQ+IGVsZW1lbnQuCisgICAgICBUaGUgZ29hbCBpcyB0byB0ZXN0IHRo
ZSBlbGVtZW50cycgdGl0bGVzIG9mIGFuIGVtYmVkZGVkIFNWRy4KKyAgLS0+CisKKyAgPCEtLSBU
aGlzIGlzIHRoZSB0b29sdGlwIG9mIHRoZSByb290bW9zdCBTVkcgZWxlbWVudCB3aGVuIHRoZSBT
VkcgaXMgZW1iZWRkZWQgaW4gYW4gSFRNTCAtLT4KKyAgPHRpdGxlPm91dGVybW9zdCBzdmc8L3Rp
dGxlPgorICAKKyAgPGRlZnM+CisgICAgPGcgaWQ9InNoYXBlIj4KKyAgICAgIDxyZWN0IHdpZHRo
PSIxMDAiIGhlaWdodD0iMTAwIiBmaWxsPSJ5ZWxsb3ciLz4KKyAgICAgIDxjaXJjbGUgY3g9IjEw
IiBjeT0iMTAiIHI9IjEwIiBmaWxsPSJyZWQiPiAKKyAgICAgICAgPHRpdGxlPmRlZiBzbWFsbCBj
aXJjbGUhPC90aXRsZT4KKyAgICAgIDwvY2lyY2xlPgorICAgICAgPGNpcmNsZSBjeD0iODAiIGN5
PSI4MCIgcj0iMjAiIGZpbGw9InJlZCI+CisgICAgICAgIDx0aXRsZT5kZWYgYmlnIGNpcmNsZSE8
L3RpdGxlPgorICAgICAgPC9jaXJjbGU+CisgICAgICA8Zz4KKyAgICAgICAgPHJlY3QgeD0iMjAi
IHk9IjIwIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIGZpbGw9ImxpbWUiLz4KKyAgICAgICAgPGNp
cmNsZSBjeD0iNDAiIGN5PSI0MCIgcj0iMTAiIGZpbGw9InJlZCI+CisgICAgICAgICAgPHRpdGxl
Pm5lc3RlZCBjaXJjbGUhPC90aXRsZT4KKyAgICAgICAgPC9jaXJjbGU+CisgICAgICA8L2c+Cisg
ICAgICA8dGl0bGU+ZGVmIGcgZWxlbWVudCE8L3RpdGxlPgorICAgIDwvZz4KKyAgPC9kZWZzPgor
ICAKKyAgPGcgaWQ9Im1haW5fZyI+CisgICAgPHJlY3QgaWQ9InllbGxvd19yZWN0IiB3aWR0aD0i
MTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0ieWVsbG93Ii8+CisgICAgPGNpcmNsZSBpZD0ic21hbGxf
Y2lyY2xlIiBjeD0iMTAiIGN5PSIxMCIgcj0iMTAiIGZpbGw9InJlZCI+IAorICAgICAgPHRpdGxl
PnNtYWxsIGNpcmNsZSE8L3RpdGxlPgorICAgIDwvY2lyY2xlPgorICAgIDxjaXJjbGUgaWQ9ImJp
Z19jaXJjbGUiIGN4PSI4MCIgY3k9IjgwIiByPSIyMCIgZmlsbD0icmVkIj4KKyAgICAgIDx0aXRs
ZT5iaWcgY2lyY2xlITwvdGl0bGU+CisgICAgPC9jaXJjbGU+CisgICAgPGcgaWQ9InN1Yl9nIj4K
KyAgICAgIDxyZWN0IGlkPSJsaW1lX3JlY3QiIHg9IjIwIiB5PSIyMCIgd2lkdGg9IjQwIiBoZWln
aHQ9IjQwIiBmaWxsPSJsaW1lIi8+CisgICAgICA8Y2lyY2xlIGlkPSJuZXN0ZWRfY2lyY2xlIiBj
eD0iNDAiIGN5PSI0MCIgcj0iMTAiIGZpbGw9InJlZCI+CisgICAgICAgIDx0aXRsZT5uZXN0ZWQg
Y2lyY2xlITwvdGl0bGU+CisgICAgICA8L2NpcmNsZT4KKyAgICA8L2c+CisgICAgPHRpdGxlPm1h
aW4gZyBlbGVtZW50PC90aXRsZT4KKyAgPC9nPgorCisgIDwhLS0gPHVzZT4gZWxlbWVudCBzaG91
bGQgcmV0dXJuIHRoZSBmaXJzdCA8dGl0bGU+IGVsZW1lbnQgY2hpbGQgaWYgaXQgZXhpc3RzIC0t
PiAgCisgIDx1c2UgaWQ9InVzZV93aXRoX3RpdGxlIiB4bGluazpocmVmPSIjc2hhcGUiIHg9IjAi
IHk9IjEyMCI+CisgICAgPHRpdGxlPnVzZSBlbGVtZW50ITwvdGl0bGU+CisgIDwvdXNlPgorICA8
dXNlIGlkPSJ1c2Vfd2l0aG91dF90aXRsZSIgeGxpbms6aHJlZj0iI3NoYXBlIiB4PSIwIiB5PSIy
NDAiLz4KKzwvc3ZnPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>