<?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>106811</bug_id>
          
          <creation_ts>2013-01-14 10:59:00 -0800</creation_ts>
          <short_desc>Web Inspector: Add iframe option to inspectedWindow.eval() extension API</short_desc>
          <delta_ts>2013-03-19 07:15:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>106926</dependson>
    
    <dependson>108846</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="johnjbarton">johnjbarton</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>caseq</cc>
    
    <cc>dglazkov</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rniwa</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>806470</commentid>
    <comment_count>0</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-14 10:59:00 -0800</bug_when>
    <thetext>The extension API function inspectedWindow.eval() allows tooling extensions to gather data from the web page, critical to many extensions. Currently extensions cannot access data from iframes however, limiting extensions to simple web pages.

By adding another option to the existing API, iframes can be supported. Here is example code from a test case. First we get the full URL from inspectedWindow.getResources:
var iframeSrc = document.querySelector(&apos;iframe&apos;).getAttribute(&apos;src&apos;);
    var url;
    webInspector.inspectedWindow.getResources(function(resources){
        resources.foreach(function(resource){
            if (resource.url.indexOf(iframeSrc) !== -1) {
                url = resource.url;
            }
        });
    });

Then we extract the origin:

    var segments = url.split(&apos;/&apos;); // http://a.b.c:xxx/path
    var origin = segments[0] + &apos;//&apos; + segments[1];

And use these in the option to eval:
    var options = {
        frame: {
            url: url,
            securityOrigin: origin
        }
    }
    webInspector.inspectedWindow.eval(&quot;window.location.pathname&quot;, options, callbackAndNextTest(extension_onEval, nextTest));

contentScript contexts could be accessed using their securityOrigin.

Patch ready</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806737</commentid>
    <comment_count>1</comment_count>
      <attachid>182649</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-14 16:21:11 -0800</bug_when>
    <thetext>Created attachment 182649
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806850</commentid>
    <comment_count>2</comment_count>
      <attachid>182649</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-14 18:06:30 -0800</bug_when>
    <thetext>Comment on attachment 182649
Patch

Attachment 182649 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/15870739

New failing tests:
inspector/extensions/extensions-eval.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806897</commentid>
    <comment_count>3</comment_count>
      <attachid>182649</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-14 19:12:41 -0800</bug_when>
    <thetext>Comment on attachment 182649
Patch

Attachment 182649 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15874693

New failing tests:
inspector/extensions/extensions-eval.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806915</commentid>
    <comment_count>4</comment_count>
      <attachid>182649</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-14 19:49:29 -0800</bug_when>
    <thetext>Comment on attachment 182649
Patch

Attachment 182649 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15872718

New failing tests:
inspector/extensions/extensions-eval.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808048</commentid>
    <comment_count>5</comment_count>
      <attachid>182649</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-01-15 22:16:15 -0800</bug_when>
    <thetext>Comment on attachment 182649
Patch

Attachment 182649 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/15913117

New failing tests:
inspector/extensions/extensions-eval.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808147</commentid>
    <comment_count>6</comment_count>
      <attachid>182649</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-01-16 01:22:13 -0800</bug_when>
    <thetext>Comment on attachment 182649
Patch

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

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:801
&gt; +            } else if (options.frame &amp;&amp; typeof options.frame === &quot;object&quot; &amp;&amp; options.frame.url &amp;&amp; options.frame.securityOrigin) {

can we support options.frame and options.useContentScriptContext at the same time? I can imagine this may be useful.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:810
&gt; +                            context = contextLists[i].contextBySecurityOrigin(options.frame.securityOrigin);    

So this will allow an extension to evaluate in content script of other extensions. This may be a bit more than we would like to allow now. How about just using frame.url and handling useContentScriptContext.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:816
&gt; +                    callback(errorMessage);

this should not be necessary, if you return an error status, the caller will invoke callback.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:817
&gt; +                    return this._status.E_FAILED(errorMessage);

I think E_NOTFOUND is more appropriate here, E_FAILED is too generic.

&gt; LayoutTests/inspector/extensions/extensions-eval-expected.txt:19
&gt; +log: Extension server error: Operation failed: No context with URL: &quot;file:///work/chromium/src/third_party/WebKit/LayoutTests/inspector/extensions/resources/extensions-frame-eval.html&quot; and origin &quot;bogus&quot;

Well.. That&apos;s not going to ever pass on the bots :)

&gt; LayoutTests/inspector/extensions/extensions-eval.html:49
&gt; +function extension_testZEvalInIFrame(nextTest) {

Z?

&gt; LayoutTests/inspector/extensions/extensions-eval.html:50
&gt; +    var iframeSrc = &apos;resources/extensions-frame-eval.html&apos;;

I think a good test would be to try something cross-origin -- i.e. move it under http tests and use http://127.0.0.1:8000/ as on origin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808488</commentid>
    <comment_count>7</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-16 10:10:43 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 182649 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=182649&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:801
&gt; &gt; +            } else if (options.frame &amp;&amp; typeof options.frame === &quot;object&quot; &amp;&amp; options.frame.url &amp;&amp; options.frame.securityOrigin) {
&gt; 
&gt; can we support options.frame and options.useContentScriptContext at the same time? I can imagine this may be useful.

Yes, good idea.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:810
&gt; &gt; +                            context = contextLists[i].contextBySecurityOrigin(options.frame.securityOrigin);    
&gt; 
&gt; So this will allow an extension to evaluate in content script of other extensions. This may be a bit more than we would like to allow now. How about just using frame.url and handling useContentScriptContext.

It allows a devtools extension to evaluate in the context of another browser extension. Two browser extensions are &apos;peers&apos;: they have equivalent possible permissions and powers. Allowing browser extensions to operate on other browser extensions could lead to confusing interference. 

Devtools extensions are not peers of browser extensions: they are explicitly -- by the specific user opening devtools -- granted extra power -- eg the ability to eval() directly into the context of web page. Shouldn&apos;t devtools extensions should be able to eval() into browser extensions just like devtools can?

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:816
&gt; &gt; +                    callback(errorMessage);
&gt; 
&gt; this should not be necessary, if you return an error status, the caller will invoke callback.
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:817
&gt; &gt; +                    return this._status.E_FAILED(errorMessage);
&gt; 
&gt; I think E_NOTFOUND is more appropriate here, E_FAILED is too generic.

Actually the opposite was my experience: I started with E_NOTFOUND but I could not figure out what to do with an error message like &apos;Not found &quot;http://localhost:9696&quot;&apos;. I realize that E_NOTFOUND makes better documentation in the source code but the resulting error message is not as good for the extension author.

&gt; 
&gt; &gt; LayoutTests/inspector/extensions/extensions-eval-expected.txt:19
&gt; &gt; +log: Extension server error: Operation failed: No context with URL: &quot;file:///work/chromium/src/third_party/WebKit/LayoutTests/inspector/extensions/resources/extensions-frame-eval.html&quot; and origin &quot;bogus&quot;
&gt; 
&gt; Well.. That&apos;s not going to ever pass on the bots :)

It would if everyone switched to my file system layout ;-)  Too much cut and paste I can see.

&gt; 
&gt; &gt; LayoutTests/inspector/extensions/extensions-eval.html:49
&gt; &gt; +function extension_testZEvalInIFrame(nextTest) {
&gt; 
&gt; Z?

For some reason the test issues tests.sort() and I wanted this test to run last.

&gt; 
&gt; &gt; LayoutTests/inspector/extensions/extensions-eval.html:50
&gt; &gt; +    var iframeSrc = &apos;resources/extensions-frame-eval.html&apos;;
&gt; 
&gt; I think a good test would be to try something cross-origin -- i.e. move it under http tests and use http://127.0.0.1:8000/ as on origin.

Sure.

Let me know about the other issues here and I will resubmit the patch.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808827</commentid>
    <comment_count>8</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-16 16:34:20 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:816
&gt; &gt; +                    callback(errorMessage);
&gt; 
&gt; this should not be necessary, if you return an error status, the caller will invoke callback.
&gt; 
That turned out to be a good hint...
&gt; 
&gt; &gt; LayoutTests/inspector/extensions/extensions-eval.html:49
&gt; &gt; +function extension_testZEvalInIFrame(nextTest) {
&gt; 
&gt; Z?

These two issues were related. ExtensionServer.js was not correctly propagating errors it detected before sending the request to the debug server because the caller for evaluate() in this case, _onEvaluateOnInspectedPage(), was not invoking the callback.  That allowed the test driver to launch nextTest() on both the main-line and async callback line, which resulted in duplicate test entries that I was trying to hackaround with Z (so the test case that issued dupes was last and there were no more tests to dupe).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808828</commentid>
    <comment_count>9</comment_count>
      <attachid>183058</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-16 16:34:35 -0800</bug_when>
    <thetext>Created attachment 183058
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808830</commentid>
    <comment_count>10</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-16 16:37:44 -0800</bug_when>
    <thetext>Ok this patch has all of the things you asked for *except* it still includes options.frame.securityOrigin which I argued for in comment 7.

This patch will need to be rebased after bug 106926 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809315</commentid>
    <comment_count>11</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-01-17 07:11:13 -0800</bug_when>
    <thetext>
&gt; 
&gt; Devtools extensions are not peers of browser extensions: they are explicitly -- by the specific user opening devtools -- granted extra power -- eg the ability to eval() directly into the context of web page. Shouldn&apos;t devtools extensions should be able to eval() into browser extensions just like devtools can?
&gt; 

Well, we did not enable this originally, but this was perhaps just overcautiousness. I discussed this again with Pavel, and the consensus was -- let&apos;s do it!

&gt; &gt; 
&gt; &gt; I think E_NOTFOUND is more appropriate here, E_FAILED is too generic.
&gt; 
&gt; Actually the opposite was my experience: I started with E_NOTFOUND but I could not figure out what to do with an error message like &apos;Not found &quot;http://localhost:9696&quot;&apos;. I realize that E_NOTFOUND makes better documentation in the source code but the resulting error message is not as good for the extension author.

My primary design goal for error reporting was making the errors easy to process programmatically and (at least in theory) possible to localize. So aside from a the last resort, catch-all E_FAILED that allows arbitrary text, other errors don&apos;t expect user-friendly text as parameters. So I&apos;d suggest the following options:
- return E_NOTFOUND for frame if you did not find frame, E_NOTFOUND for context if you did not find context within the frame; optionally, add a console.warn() if you feel extension authors may be confused;
- introduce specific error code for the situation, along with verbose error message;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>809321</commentid>
    <comment_count>12</comment_count>
      <attachid>183058</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-01-17 07:18:07 -0800</bug_when>
    <thetext>Comment on attachment 183058
Patch

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

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:798
&gt; +            if (options[&quot;useContentScriptContext&quot;] === true) {

we use to check for just options[&quot;useContentScriptContext&quot;]

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:801
&gt; +                frameSecurityOrigin = options.frame.securityOrigin;

Let&apos;s put securityOrigin on the top level of options. It&apos;s orthogonal to frame, you can also use it for top frame, i.e. without frame selector.
Also, flat options object will be easier to document. So I suggest three options on the top level:

- useContentScriptContext
- scriptExecutionContext (maps to your frame.securityOrigin; either overrides useContentScriptContext or mutually exclusive with it)
- frameURL (maps to frame.url)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817936</commentid>
    <comment_count>13</comment_count>
      <attachid>185025</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-28 11:53:41 -0800</bug_when>
    <thetext>Created attachment 185025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>817938</commentid>
    <comment_count>14</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-28 11:56:14 -0800</bug_when>
    <thetext>Rebased and addressed the review in comment 12 so I think this should be ready to go</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819023</commentid>
    <comment_count>15</comment_count>
      <attachid>185025</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-01-29 09:40:43 -0800</bug_when>
    <thetext>Comment on attachment 185025
Patch

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

&gt; Source/WebCore/ChangeLog:91
&gt;          (WebCore::RenderBox::exclusionShapeOutsideInfo): Ditto.
&gt;  
&gt; +        * inspector/front-end/ExtensionServer.js:

Looks like a merge error.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:348
&gt; +        var status = this.evaluate(message.expression, true, true, message.evaluateOptions, port._extensionOrigin, callback.bind(this));
&gt; +        if (status) {
&gt; +            callback.call(this, &quot;Extension server error: &quot; + String.vsprintf(status.description, status.details));
&gt; +        }

Why is this necessary? I don&apos;t think this will pass type validation by closure compiler.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:794
&gt; +            } else if (options.scriptExecutionContext) {

Please drop redundant braces.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:797
&gt; +            var url;

Redundant?

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:803
&gt; +                    if (contextLists[i].url === url) {

I would expect options.frameURL to be used to resolve frame (perhaps with the help of ResourceTreeModel), then use contextByFrameAndSecurityOrigin()

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:804
&gt; +                        if (!contextSecurityOrigin || contextSecurityOrigin &amp;&amp; url.indexOf(contextSecurityOrigin) === 0) { 

if you choose to iterate over context list, the frame URL should be compared against the URL of the frame the context belongs to, not against the security origin.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:816
&gt; +            } else if (contextSecurityOrigin) {

This starts to look a bit complicated. I would suggest something like:
var frame = options.frameURL ? resolveURLToFrame(options.frameURL) : WebInspector.resourceTreeModel.mainFrame;
if (!frame)
    return this._status.E_NOTFOUND(options.frameURL || &quot;&lt;top&gt;&quot;)
if (contextSecurityOrigin) {
    context = WebInspector.runtimeModel.contextByFrameAndSecurityOrigin(frame, contextSecurityOrigin);
    if (!context)
         return this._status.E_NOTFOUND(contextSecurityOrigin)
}

&gt; LayoutTests/ChangeLog:108
&gt; +        * http/tests/inspector/extensions-eval-expected.txt: Renamed from LayoutTests/inspector/extensions/extensions-eval-expected.txt.
&gt; +        * http/tests/inspector/extensions-eval.html: Renamed from LayoutTests/inspector/extensions/extensions-eval.html.
&gt; +        * http/tests/inspector/resources/extensions-frame-eval.html: Added.

Merge error?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819193</commentid>
    <comment_count>16</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-29 12:23:15 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 185025 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185025&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:91
&gt; &gt;          (WebCore::RenderBox::exclusionShapeOutsideInfo): Ditto.
&gt; &gt;  
&gt; &gt; +        * inspector/front-end/ExtensionServer.js:
&gt; 
&gt; Looks like a merge error.

I don&apos;t really understand the ChangeLog entry gets created by webkit-patch upload. I&apos;ll try to get it to start over.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:348
&gt; &gt; +        var status = this.evaluate(message.expression, true, true, message.evaluateOptions, port._extensionOrigin, callback.bind(this));
&gt; &gt; +        if (status) {
&gt; &gt; +            callback.call(this, &quot;Extension server error: &quot; + String.vsprintf(status.description, status.details));
&gt; &gt; +        }
&gt; 
&gt; Why is this necessary? 

On error, this.evaluate() doe not callback() but returns errors, eg 
   return this._status.E_NOTFOUND(contextSecurityOrigin);
If the caller does not process the return value, these error messages are lost, and the callback never fires.

&gt; I don&apos;t think this will pass type validation by closure compiler.

I corrected the type signature of the callback.

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:794
&gt; &gt; +            } else if (options.scriptExecutionContext) {
&gt; 
&gt; Please drop redundant braces.

done

&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:797
&gt; &gt; +            var url;
&gt; 
&gt; Redundant?
yup

The next patch is quite different for the rest of the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>819205</commentid>
    <comment_count>17</comment_count>
      <attachid>185286</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-29 12:32:29 -0800</bug_when>
    <thetext>Created attachment 185286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820206</commentid>
    <comment_count>18</comment_count>
      <attachid>185286</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-01-30 07:48:34 -0800</bug_when>
    <thetext>Comment on attachment 185286
Patch

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

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:348
&gt; +        var status = this.evaluate(message.expression, true, true, message.evaluateOptions, port._extensionOrigin, callback.bind(this));
&gt; +        if (status) {
&gt; +            callback.call(this, &quot;Extension server error: &quot; + String.vsprintf(status.description, status.details));
&gt; +        }

I still think this should not be necessary: the convention is that if the error condition is immediately detect by a handler, the handler returns the error and then ExtensionServer::_onmessage will dispatch the error to the client callback.

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:795
&gt; +                WebInspector.resourceTreeModel.forAllFrames(function(frame) {

Can we just resturn frames array from ResourceTreeModel. I think it would require fewer callbacks and make code more readable.

&gt; LayoutTests/http/tests/inspector/extensions-eval.html:54
&gt; +function extension_testEvalInIFrame(nextTest) {

Can you instead move it into a separate test file, like we do extensions-eval-content-script? Or, perhaps, just add it to the latter and move it to http?
Also, { needs to be on the next line.

&gt; LayoutTests/http/tests/inspector/extensions-eval.html:55
&gt; +    var options = extension_options();

I&apos;d rather inline both options and loc for better readability, i.e.
var options = {
...
}
eval(&quot;window.location.pathname&quot;, options, callbacnAndNextTest(...));

&gt; LayoutTests/http/tests/inspector/extensions-eval.html:75
&gt; +    var segments = url.split(&apos;/&apos;); // http://a.b.c:xxx/path
&gt; +    var origin = segments[0] + &apos;//&apos; + segments[2];

I think just hard-coding it would make it more readable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>820232</commentid>
    <comment_count>19</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-01-30 08:49:27 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 185286 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185286&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:348
&gt; &gt; +        var status = this.evaluate(message.expression, true, true, message.evaluateOptions, port._extensionOrigin, callback.bind(this));
&gt; &gt; +        if (status) {
&gt; &gt; +            callback.call(this, &quot;Extension server error: &quot; + String.vsprintf(status.description, status.details));
&gt; &gt; +        }
&gt; 
&gt; I still think this should not be necessary: the convention is that if the error condition is immediately detect by a handler, the handler returns the error and then ExtensionServer::_onmessage will dispatch the error to the client callback.

But without this change the handler never sees the error condition! If evaluate() returns say, E_NOTFOUND, and we ignore the return value (as without this patch) how can _onMessage dispatch an error to the client? It does not even see the error. 

Maybe you prefer a different solution, but I could not get my code to work without some change here.


&gt; 
&gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:795
&gt; &gt; +                WebInspector.resourceTreeModel.forAllFrames(function(frame) {
&gt; 
&gt; Can we just resturn frames array from ResourceTreeModel. I think it would require fewer callbacks and make code more readable.

Because _frames in ResourceTreeModel is not an array, it&apos;s a map from frame.id -&gt; frame. We can create an array if you prefer. I was just trying to follow the practice in that file.

...
&gt; &gt; LayoutTests/http/tests/inspector/extensions-eval.html:75
&gt; &gt; +    var segments = url.split(&apos;/&apos;); // http://a.b.c:xxx/path
&gt; &gt; +    var origin = segments[0] + &apos;//&apos; + segments[2];
&gt; 
&gt; I think just hard-coding it would make it more readable.

What value should I use then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822890</commentid>
    <comment_count>20</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-02-01 09:46:53 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 185286 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185286&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:348
&gt; &gt; &gt; +        var status = this.evaluate(message.expression, true, true, message.evaluateOptions, port._extensionOrigin, callback.bind(this));
&gt; &gt; &gt; +        if (status) {
&gt; &gt; &gt; +            callback.call(this, &quot;Extension server error: &quot; + String.vsprintf(status.description, status.details));
&gt; &gt; &gt; +        }
&gt; &gt; 
&gt; &gt; I still think this should not be necessary: the convention is that if the error condition is immediately detect by a handler, the handler returns the error and then ExtensionServer::_onmessage will dispatch the error to the client callback.
&gt; 
&gt; But without this change the handler never sees the error condition! If evaluate() returns say, E_NOTFOUND, and we ignore the return value (as without this patch) how can _onMessage dispatch an error to the client? It does not even see the error. 
&gt; 

Here&apos;s the code that is responsible to dispatching the error to the client:

http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/front-end/ExtensionServer.js&amp;exact_package=chromium&amp;q=onmessage%20file:extensionserver&amp;l=724

(lines 724, 728 &amp; 729)

You can hit it in existing code if you tweak one of the tests (duh -- we need a test for this as well). If you changle file:/// to something else in this line, you will see that the callback is invoked even upon error:

http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/LayoutTests/inspector/extensions/extensions-eval-content-script.html&amp;exact_package=chromium&amp;q=file:extensions-eval-&amp;type=cs&amp;l=9

That said, the way we report these errors to the client is quite unfortunate. I&apos;m about to fix that, see bug 108640.

&gt; &gt; Can we just resturn frames array from ResourceTreeModel. I think it would require fewer callbacks and make code more readable.
&gt; 
&gt; Because _frames in ResourceTreeModel is not an array, it&apos;s a map from frame.id -&gt; frame. We can create an array if you prefer.

I think toy can either return the entire map or perhaps just Object.values()

&gt; I was just trying to follow the practice in that file.

I think forAllResources is implemented this way because the iteration over tree is too complicated to perform on the client side. For iteration over map or array, on the other hand, inversion of control looks like overkill :)


&gt; &gt; &gt; LayoutTests/http/tests/inspector/extensions-eval.html:75
&gt; &gt; &gt; +    var segments = url.split(&apos;/&apos;); // http://a.b.c:xxx/path
&gt; &gt; &gt; +    var origin = segments[0] + &apos;//&apos; + segments[2];
&gt; &gt; 
&gt; &gt; I think just hard-coding it would make it more readable.
&gt; 
&gt; What value should I use then?

Just http://127.0.0.1:8000/?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824651</commentid>
    <comment_count>21</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-02-04 12:31:53 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; (In reply to comment #18)
&gt; &gt; &gt; (From update of attachment 185286 [details] [details] [details])
&gt; &gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185286&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/inspector/front-end/ExtensionServer.js:348
&gt; &gt; &gt; &gt; +        var status = this.evaluate(message.expression, true, true, message.evaluateOptions, port._extensionOrigin, callback.bind(this));
&gt; &gt; &gt; &gt; +        if (status) {
&gt; &gt; &gt; &gt; +            callback.call(this, &quot;Extension server error: &quot; + String.vsprintf(status.description, status.details));
&gt; &gt; &gt; &gt; +        }
&gt; &gt; &gt; 
&gt; &gt; &gt; I still think this should not be necessary: the convention is that if the error condition is immediately detect by a handler, the handler returns the error and then ExtensionServer::_onmessage will dispatch the error to the client callback.
&gt; &gt; 
&gt; &gt; But without this change the handler never sees the error condition! If evaluate() returns say, E_NOTFOUND, and we ignore the return value (as without this patch) how can _onMessage dispatch an error to the client? It does not even see the error. 
&gt; &gt; 
&gt; 
&gt; Here&apos;s the code that is responsible to dispatching the error to the client:
&gt; 
&gt; http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/Source/WebCore/inspector/front-end/ExtensionServer.js&amp;exact_package=chromium&amp;q=onmessage%20file:extensionserver&amp;l=724
&gt; 
&gt; (lines 724, 728 &amp; 729)
&gt; 
&gt; You can hit it in existing code if you tweak one of the tests (duh -- we need a test for this as well). If you changle file:/// to something else in this line, you will see that the callback is invoked even upon error:
&gt; 
&gt; http://code.google.com/searchframe#OAMlx_jo-ck/src/third_party/WebKit/LayoutTests/inspector/extensions/extensions-eval-content-script.html&amp;exact_package=chromium&amp;q=file:extensions-eval-&amp;type=cs&amp;l=9
&gt; 
&gt; That said, the way we report these errors to the client is quite unfortunate. I&apos;m about to fix that, see bug 108640.

In bug 108846 I added a test for a bad option, that is the dev sends useContentScriptContext option in a case where there is not content script world.  I hope that patch will clarify the error return issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>829968</commentid>
    <comment_count>22</comment_count>
      <attachid>187634</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-02-11 12:08:48 -0800</bug_when>
    <thetext>Created attachment 187634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830840</commentid>
    <comment_count>23</comment_count>
      <attachid>187634</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-02-12 05:49:34 -0800</bug_when>
    <thetext>Comment on attachment 187634
Patch

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

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:332
&gt; +            var result;

This would be gone after rebase :)

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:789
&gt; +                WebInspector.resourceTreeModel.frames().some(function(frame) {

We avoid non-trivial anonymous functions in other places -- can you please extract it as a named function?

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:808
&gt; +            else if (options.scriptExecutionContext &amp;&amp; frame.url.indexOf(options.scriptExecutionContext) !== 0)

So this will work for arbitrary prefixes of frame.url, including &quot;&quot;, &quot;http&quot; etc. Is this the intent?

&gt; Source/WebCore/inspector/front-end/ResourceTreeModel.js:245
&gt; +        var frames = [];
&gt; +        Object.keys(this._frames).forEach(function(frameId){
&gt; +            frames.push(this._frames[frameId]);
&gt; +        }.bind(this));
&gt; +        return frames;

return Object.values(this._frames)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831988</commentid>
    <comment_count>24</comment_count>
      <attachid>188101</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-02-13 09:44:12 -0800</bug_when>
    <thetext>Created attachment 188101
Fix 4 items from review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840756</commentid>
    <comment_count>25</comment_count>
      <attachid>188101</attachid>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2013-02-25 00:25:28 -0800</bug_when>
    <thetext>Comment on attachment 188101
Fix 4 items from review

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842053</commentid>
    <comment_count>26</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-02-26 08:57:45 -0800</bug_when>
    <thetext>review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846489</commentid>
    <comment_count>27</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-03-04 07:48:20 -0800</bug_when>
    <thetext>Downstream user feature request:
https://code.google.com/p/chromium/issues/detail?id=177713</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>852416</commentid>
    <comment_count>28</comment_count>
      <attachid>192490</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-03-11 10:00:19 -0700</bug_when>
    <thetext>Created attachment 192490
rebase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>855814</commentid>
    <comment_count>29</comment_count>
      <attachid>192490</attachid>
    <who name="Vsevolod Vlasov">vsevik</who>
    <bug_when>2013-03-15 02:05:35 -0700</bug_when>
    <thetext>Comment on attachment 192490
rebase

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

&gt; Source/WebCore/inspector/front-end/ExtensionServer.js:803
&gt; +            if (options[&quot;useContentScriptContext&quot;] )

Maybe just options.useContentScriptContext?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>857244</commentid>
    <comment_count>30</comment_count>
      <attachid>193593</attachid>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-03-18 10:15:07 -0700</bug_when>
    <thetext>Created attachment 193593
rebase; fix review comment #29</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858247</commentid>
    <comment_count>31</comment_count>
    <who name="johnjbarton">johnjbarton</who>
    <bug_when>2013-03-19 07:05:47 -0700</bug_when>
    <thetext>cq?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858257</commentid>
    <comment_count>32</comment_count>
      <attachid>193593</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 07:15:27 -0700</bug_when>
    <thetext>Comment on attachment 193593
rebase; fix review comment #29

Clearing flags on attachment: 193593

Committed r146202: &lt;http://trac.webkit.org/changeset/146202&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858258</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 07:15:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182649</attachid>
            <date>2013-01-14 16:21:11 -0800</date>
            <delta_ts>2013-01-16 16:34:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106811-20130114161811.patch</filename>
            <type>text/plain</type>
            <size>8876</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdmOWJiYzQ1MDIxMmMy
YjQ5ZWQ4NzhmOTI4NmFmODQ2NTRhN2QxZC4uMmI2N2YxYTc5NzRlZmE0MzUwNTg4MWNiZTI3Y2Q4
OGIyYTkwNTMwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAxLTE0ICBKb2hu
IEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVu
c2lvbiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBjYXNlIHRvIHRoZSBvcHRpb25zIHByb2Nlc3NpbmcgaW4gaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSwgbG9vaworICAgICAgICBmb3Igb3B0aW9uLmZyYW1lID0ge3VybDogPHN0cmlu
Zz4sIHNlY3VyaXR5T3JpZ2luOiA8c3RyaW5nPn0sIGZpbmQgdGhlCisgICAgICAgIG1hdGNoaW5n
IEpTIGNvbnRleHQgaW4gdGhlIHJ1bnRpbWVNb2RlbCwgYW5kIGNhbGwgZXZhbHVhdGUoKSBpbiB0
aGF0CisgICAgICAgIGNvbnRleHQ7IG9yIGVycm9yIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBmb3Vu
ZC4KKworICAgICAgICBOZXcgdGVzdCBjYXNlIGFkZGVkIHRvIGV4dGVuc2lvbnMvZXh0ZW5zaW9u
cy1ldmFsLmh0bWwKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2Vy
dmVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUu
ZXZhbHVhdGUpOgorCiAyMDEzLTAxLTE0ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBbVjhdIE1ha2UgYW4gSXNvbGF0ZSBwYXJhbWV0ZXIgbWFuZGF0b3J5
IGluIGFzc29jaWF0ZU9iamVjdFdpdGhXcmFwcGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKaW5kZXggYWEyM2RhNTg4
YjU3NDEzNDliNGI2MzE4ODRmNDZhZTY4N2IzOGU5Zi4uNzI1YzBlYmVjYTkyZGNhNGM5OTg4MDY1
Y2NiMWI0MDhjYWVjOWVjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKQEAgLTc4OSwxNCArNzg5LDM2IEBAIFdlYklu
c3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlID0gewogICAgIGV2YWx1YXRlOiBmdW5j
dGlvbihleHByZXNzaW9uLCBleHBvc2VDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgb3B0
aW9ucywgc2VjdXJpdHlPcmlnaW4sIGNhbGxiYWNrKSAKICAgICB7CiAgICAgICAgIHZhciBjb250
ZXh0SWQ7Ci0gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gIm9iamVjdCIgJiYgb3B0aW9u
c1sidXNlQ29udGVudFNjcmlwdENvbnRleHQiXSkgewotICAgICAgICAgICAgdmFyIG1haW5GcmFt
ZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5tYWluRnJhbWU7Ci0gICAgICAgICAg
ICBpZiAoIW1haW5GcmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzLkVf
RkFJTEVEKCJtYWluIGZyYW1lIG5vdCBhdmFpbGFibGUgeWV0Iik7Ci0gICAgICAgICAgICB2YXIg
Y29udGV4dCA9IFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwuY29udGV4dEJ5RnJhbWVBbmRTZWN1
cml0eU9yaWdpbihtYWluRnJhbWUsIHNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgICAgIGlmICgh
Y29udGV4dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfTk9URk9VTkQo
c2VjdXJpdHlPcmlnaW4pOwotICAgICAgICAgICAgY29udGV4dElkID0gY29udGV4dC5pZDsKKyAg
ICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgIGlm
IChvcHRpb25zWyJ1c2VDb250ZW50U2NyaXB0Q29udGV4dCJdKSB7CisgICAgICAgICAgICAgICAg
dmFyIG1haW5GcmFtZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5tYWluRnJhbWU7
CisgICAgICAgICAgICAgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zdGF0dXMuRV9GQUlMRUQoIm1haW4gZnJhbWUgbm90IGF2YWlsYWJsZSB5ZXQi
KTsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dCA9IFdlYkluc3BlY3Rvci5ydW50aW1lTW9k
ZWwuY29udGV4dEJ5RnJhbWVBbmRTZWN1cml0eU9yaWdpbihtYWluRnJhbWUsIHNlY3VyaXR5T3Jp
Z2luKTsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChzZWN1cml0eU9yaWdpbik7CisgICAgICAg
ICAgICAgICAgY29udGV4dElkID0gY29udGV4dC5pZDsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
b3B0aW9ucy5mcmFtZSAmJiB0eXBlb2Ygb3B0aW9ucy5mcmFtZSA9PT0gIm9iamVjdCIgJiYgb3B0
aW9ucy5mcmFtZS51cmwgJiYgb3B0aW9ucy5mcmFtZS5zZWN1cml0eU9yaWdpbikgeworICAgICAg
ICAgICAgICAgIHZhciB1cmwgPSBvcHRpb25zLmZyYW1lLnVybDsKKyAgICAgICAgICAgICAgICB2
YXIgY29udGV4dDsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dExpc3RzID0gV2ViSW5zcGVj
dG9yLnJ1bnRpbWVNb2RlbC5jb250ZXh0TGlzdHMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGNvbnRleHRMaXN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoY29udGV4dExpc3RzW2ldLnVybCA9PT0gdXJsKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAodXJsLmluZGV4T2Yob3B0aW9ucy5mcmFtZS5zZWN1cml0eU9yaWdpbikgPT09
IDApIHsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCA9IGNvbnRleHRMaXN0
c1tpXS5leGVjdXRpb25Db250ZXh0cygpWzBdOyAvLyB0aGUgbWFpbiB3b3JsZCBjb250ZXh0IGlz
IGFsd2F5cyB0aGUgZmlyc3Qgb25lCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBjb250ZXh0TGlzdHNbaV0uY29u
dGV4dEJ5U2VjdXJpdHlPcmlnaW4ob3B0aW9ucy5mcmFtZS5zZWN1cml0eU9yaWdpbik7ICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gIk5vIGNvbnRleHQgd2l0aCBVUkw6IFwiIiArIHVy
bCArICJcIiBhbmQgb3JpZ2luIFwiIiArIG9wdGlvbnMuZnJhbWUuc2VjdXJpdHlPcmlnaW4gKyJc
IiI7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycm9yTWVzc2FnZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9GQUlMRUQoZXJyb3JNZXNzYWdlKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNvbnRleHRJZCA9IGNvbnRleHQuaWQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgUnVudGltZUFnZW50LmV2YWx1YXRlKGV4cHJlc3Npb24sICJleHRlbnNpb24iLCBleHBvc2VD
b21tYW5kTGluZUFQSSwgdHJ1ZSwgY29udGV4dElkLCByZXR1cm5CeVZhbHVlLCBmYWxzZSwgY2Fs
bGJhY2spOwogICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwMTc4MTgwYWJmOGYxMGI2OWFkYWNmZmU3YmZjNTdhNDIy
YTNkNTk1Li5jZDJkNTIxYTIyMzUwYTIzZjdmMjNhZWEyMTZkMGE5YmI5YzY4ZTZkIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTMtMDEtMTQgIEpvaG4gSi4gQmFydG9uICA8am9obmpiYXJ0b25A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBpZnJhbWUgb3B0aW9u
IHRvIGluc3BlY3RlZFdpbmRvdy5ldmFsKCkgZXh0ZW5zaW9uIEFQSQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2ODExCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3QgYWRkZWQgdG8gY2hlY2sg
aW5zcGVjdGVkV2luZG93LmV2YWwoKSBvcHRpb24gd2l0aCBzdWNjZXNzZnVsCisgICAgICAgIGFu
ZCB1bnN1Y2Nlc3NmdWwgdmFsdWVzLgorCisgICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMv
ZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5z
aW9ucy9leHRlbnNpb25zLWV2YWwuaHRtbDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZXh0ZW5zaW9u
cy9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAx
LTE0ICBUb21teSBXaWRlbmZseWNodCAgPHRvbW15d0Bnb29nbGUuY29tPgogCiAgICAgICAgIE1l
ZGlhU3RyZWFtIEFQSTogVXBkYXRlIE1lZGlhU3RyZWFtVHJhY2s6OnJlYWR5U3RhdGUgdG8gbWF0
Y2ggc3BlY2lmaWNhdGlvbgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVu
c2lvbnMvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQKaW5kZXggMGNlMDA1ZGMz
Mzg5MGRmYzlmZWJiOGMxZmRkYzZmZGFmZTM0YTIzMS4uODA2NTAyMjNlZDZmMzYxMDk5NDdkYmUz
MDBmNjU4YmUzNTZmMDMzMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVu
c2lvbnMvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2YWwtZXhwZWN0ZWQudHh0CkBAIC0xLDUgKzEs
NiBAQAogVGVzdHMgV2ViSW5zcGVjdG9yIGV4dGVuc2lvbiBBUEkKIAorCiBTdGFydGVkIGV4dGVu
c2lvbi4KIFJ1bm5pbmcgdGVzdHMuLi4KIFJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFs
Q29uc29sZUFQSQpAQCAtMTUsNiArMTYsMTEgQEAgRXZhbHVhdGU6ICJPYmplY3QgaGFzIHRvbyBs
b25nIHJlZmVyZW5jZSBjaGFpbihtdXN0IG5vdCBiZSBsb25nZXIgdGhhbiAxMDAwKSIgKGUKIFJV
Tk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsVW5kZWZpbmVkCiBFdmFsdWF0ZTogdW5kZWZp
bmVkIChleGNlcHRpb246IHVuZGVmaW5lZCkKIFJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RX
aXRoU3RyaW5naWZ5T3ZlcnJpZGRlbgorbG9nOiBFeHRlbnNpb24gc2VydmVyIGVycm9yOiBPcGVy
YXRpb24gZmFpbGVkOiBObyBjb250ZXh0IHdpdGggVVJMOiAiZmlsZTovLy93b3JrL2Nocm9taXVt
L3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMv
cmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIiBhbmQgb3JpZ2luICJib2d1cyIK
IEV2YWx1YXRlOiAiT0siIChleGNlcHRpb246IHVuZGVmaW5lZCkKK1JVTk5JTkcgVEVTVDogZXh0
ZW5zaW9uX3Rlc3RaRXZhbEluSUZyYW1lCitFdmFsdWF0ZTogIk5vIGNvbnRleHQgd2l0aCBVUkw6
IFwiZmlsZTovLy93b3JrL2Nocm9taXVtL3NyYy90aGlyZF9wYXJ0eS9XZWJLaXQvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvcmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5o
dG1sXCIgYW5kIG9yaWdpbiBcImJvZ3VzXCIiIChleGNlcHRpb246IHRydWUpCitBbGwgdGVzdHMg
ZG9uZS4KK0V2YWx1YXRlOiAiL3dvcmsvY2hyb21pdW0vc3JjL3RoaXJkX3BhcnR5L1dlYktpdC9M
YXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFt
ZS1ldmFsLmh0bWwiIChleGNlcHRpb246IHVuZGVmaW5lZCkKIEFsbCB0ZXN0cyBkb25lLgogCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2
YWwuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZh
bC5odG1sCmluZGV4IDE4NGRmMDA5NjQwM2Q5MjU5MmZmNTZiN2Y3OThlZTcwMDNjNWI3ZmQuLjlj
OGJiZjAxOThhYmNjNTJkZjRlY2RiN2U1Nzg5MTgzODNjYmViOGEgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC5odG1sCkBAIC00
Niw2ICs0NiwzMyBAQCBmdW5jdGlvbiBleHRlbnNpb25fdGVzdFdpdGhTdHJpbmdpZnlPdmVycmlk
ZGVuKG5leHRUZXN0KQogICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiKEpT
T04uc3RyaW5naWZ5ID0gZnVuY3Rpb24oKSB7IHRocm93ICdvb3BzISB5b3UgY2FuIG5vdCB1c2Ug
SlNPTi5zdHJpbmdpZnknOyB9KSwgJ09LJyIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9u
X29uRXZhbCwgbmV4dFRlc3QpKTsKIH0KIAorZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RaRXZhbElu
SUZyYW1lKG5leHRUZXN0KSB7CisgICAgdmFyIGlmcmFtZVNyYyA9ICdyZXNvdXJjZXMvZXh0ZW5z
aW9ucy1mcmFtZS1ldmFsLmh0bWwnOworICAgIHZhciB1cmw7CisgICAgd2ViSW5zcGVjdG9yLmlu
c3BlY3RlZFdpbmRvdy5nZXRSZXNvdXJjZXMoZnVuY3Rpb24ocmVzb3VyY2VzKXsKKyAgICAgICAg
dmFyIHVybDsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXNvdXJjZXMubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIGlmIChyZXNvdXJjZXNbaV0udXJsLmluZGV4T2YoaWZyYW1lU3Jj
KSAhPT0gLTEpIHsKKyAgICAgICAgICAgICAgICB1cmwgPSByZXNvdXJjZXNbaV0udXJsOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGNv
bnNvbGUuYXNzZXJ0KHVybCk7CisgICAgICAgIHZhciBzZWdtZW50cyA9IHVybC5zcGxpdCgnLycp
OyAvLyBodHRwOi8vYS5iLmM6eHh4L3BhdGgKKyAgICAgICAgdmFyIG9yaWdpbiA9IHNlZ21lbnRz
WzBdICsgJy8vJyArIHNlZ21lbnRzWzJdOworICAgICAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAg
ICAgICAgIGZyYW1lOiB7CisgICAgICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICAg
ICAgc2VjdXJpdHlPcmlnaW46IG9yaWdpbgorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgid2luZG93LmxvY2F0aW9uLnBh
dGhuYW1lIiwgb3B0aW9ucywgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBu
ZXh0VGVzdCkpOworICAgICAgICBvcHRpb25zLmZyYW1lLnNlY3VyaXR5T3JpZ2luID0gImJvZ3Vz
IjsKKyAgICAgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ3aW5kb3cubG9j
YXRpb24ucGF0aG5hbWUiLCBvcHRpb25zLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9v
bkV2YWwsIG5leHRUZXN0KSk7CisgICAgfSk7CisgICAgCit9CisKIGZ1bmN0aW9uIGV4dGVuc2lv
bl9vbkV2YWwodmFsdWUsIGlzRXhjZXB0aW9uKQogewogICAgIG91dHB1dCgiRXZhbHVhdGU6ICIg
KyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAiIChleGNlcHRpb246ICIgKyBpc0V4Y2VwdGlvbiAr
ICIpIik7CkBAIC01NSw1ICs4Miw2IEBAIGZ1bmN0aW9uIGV4dGVuc2lvbl9vbkV2YWwodmFsdWUs
IGlzRXhjZXB0aW9uKQogPC9oZWFkPgogPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgogPHA+VGVz
dHMgV2ViSW5zcGVjdG9yIGV4dGVuc2lvbiBBUEk8L3A+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2Vz
L2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIj48L2lmcmFtZT4KIDwvYm9keT4KIDwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL3Jlc291cmNlcy9l
eHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNp
b25zL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMDMy
NzFjMTdkYmZjYmU3OWEzMzY5ZmI1NzdiYjRjNTQ2NjBiMzFlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvcmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJh
bWUtZXZhbC5odG1sCkBAIC0wLDAgKzEsNiBAQAorPGh0bWw+Cis8c2NyaXB0PgorLy8gU29tZSBK
UyB0byBjcmVhdGUgYSBjb250ZXh0Cit3aW5kb3cuaUFtQW5JRnJhbWUgPSB0cnVlOworPC9zY3Jp
cHQ+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>183058</attachid>
            <date>2013-01-16 16:34:35 -0800</date>
            <delta_ts>2013-01-28 11:53:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106811-20130116163136.patch</filename>
            <type>text/plain</type>
            <size>16625</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdmOWJiYzQ1MDIxMmMy
YjQ5ZWQ4NzhmOTI4NmFmODQ2NTRhN2QxZC4uMTIwZWQzMjgxNzZiMGUzN2RjMjRlYTQzODA0OTQ2
MGJlNjM5N2UzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDEzLTAxLTE0ICBKb2hu
IEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVu
c2lvbiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBjYXNlIHRvIHRoZSBvcHRpb25zIHByb2Nlc3NpbmcgaW4gaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSwgbG9vaworICAgICAgICBmb3Igb3B0aW9uLmZyYW1lID0ge3VybDogPHN0cmlu
Zz4sIHNlY3VyaXR5T3JpZ2luOiA8c3RyaW5nPn0sIGZpbmQgdGhlCisgICAgICAgIG1hdGNoaW5n
IEpTIGNvbnRleHQgaW4gdGhlIHJ1bnRpbWVNb2RlbCwgYW5kIGNhbGwgZXZhbHVhdGUoKSBpbiB0
aGF0CisgICAgICAgIGNvbnRleHQ7IG9yIGVycm9yIGlmIHRoZSBjb250ZXh0IGlzIG5vdCBmb3Vu
ZC4gCisKKyAgICAgICAgRHJpdmUtYnk6IGNvcnJlY3QgdGhlIHJldHVybiBwcm9jZXNzaW5nIG9m
IF9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKCkKKyAgICAgICAgdG8gcHJvcGFnYXRlIHRoZSBl
cnJvciBiYWNrIHRvIHRoZSBleHRlbnNpb24uCisKKyAgICAgICAgTmV3IHRlc3QgY2FzZSBhZGRl
ZCB0byBleHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC5odG1sCisKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5F
eHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKworMjAxMy0wMS0xNSAgSm9obiBK
LiBCYXJ0b24gIDxqb2huamJhcnRvbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogaW5zcGVjdGVkV2luZG93LmV2YWwoIklhbVVuZGVmaW5lZC5wcm9wIiwgY2FsbGJhY2sp
IGZhaWxzIHRvIGdpdmUgZXhjZXB0aW9uIHRleHQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNjkyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJldHVybiAuZGVzY3JpcHRpb24gZnJvbSBleGNlcHRpb25z
IHJhdGhlciB0aGFuIC52YWx1ZSAod2hpY2ggaXMgdW5kZWZpbmVkKQorCisgICAgICAgIE5ldyB0
ZXN0IGFkZGVkIHRvIGV4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFsLmh0bWwKKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLl9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKToK
KwogMjAxMy0wMS0xNCAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgW1Y4XSBNYWtlIGFuIElzb2xhdGUgcGFyYW1ldGVyIG1hbmRhdG9yeSBpbiBhc3NvY2lh
dGVPYmplY3RXaXRoV3JhcHBlcigpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzCmluZGV4IGFhMjNkYTU4OGI1NzQxMzQ5YjRi
NjMxODg0ZjQ2YWU2ODdiMzhlOWYuLjJhOGExY2NjMzZhYmNiYTYzNjMwMTNkN2FmNGIyODAzYjI3
NTA3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0
ZW5zaW9uU2VydmVyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RXh0ZW5zaW9uU2VydmVyLmpzCkBAIC0zMzgsMTUgKzMzOCwxOSBAQCBXZWJJbnNwZWN0b3IuRXh0
ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIGlmIChlcnJvcikgewogICAg
ICAgICAgICAgICAgIHJlc3VsdC5pc0V4Y2VwdGlvbiA9IHRydWU7CiAgICAgICAgICAgICAgICAg
cmVzdWx0LnZhbHVlID0gZXJyb3IudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIH0gIGVsc2UKLSAg
ICAgICAgICAgICAgICByZXN1bHQudmFsdWUgPSByZXN1bHRQYXlsb2FkLnZhbHVlOwotCi0gICAg
ICAgICAgICBpZiAod2FzVGhyb3duKQorICAgICAgICAgICAgfSAgZWxzZSBpZiAod2FzVGhyb3du
KSB7CiAgICAgICAgICAgICAgICAgcmVzdWx0LmlzRXhjZXB0aW9uID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICByZXN1bHQudmFsdWUgPSByZXN1bHRQYXlsb2FkLmRlc2NyaXB0aW9uOworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXN1bHQudmFsdWUgPSByZXN1bHRQYXls
b2FkLnZhbHVlOworICAgICAgICAgICAgfQogICAgICAgCiAgICAgICAgICAgICB0aGlzLl9kaXNw
YXRjaENhbGxiYWNrKG1lc3NhZ2UucmVxdWVzdElkLCBwb3J0LCByZXN1bHQpOwogICAgICAgICB9
Ci0gICAgICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKG1lc3NhZ2UuZXhwcmVzc2lvbiwgdHJ1ZSwg
dHJ1ZSwgbWVzc2FnZS5ldmFsdWF0ZU9wdGlvbnMsIHBvcnQuX2V4dGVuc2lvbk9yaWdpbiwgY2Fs
bGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLmV2YWx1YXRlKG1l
c3NhZ2UuZXhwcmVzc2lvbiwgdHJ1ZSwgdHJ1ZSwgbWVzc2FnZS5ldmFsdWF0ZU9wdGlvbnMsIHBv
cnQuX2V4dGVuc2lvbk9yaWdpbiwgY2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgIGlmIChz
dGF0dXMpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcywgIkV4dGVuc2lvbiBzZXJ2
ZXIgZXJyb3I6ICIgKyBTdHJpbmcudnNwcmludGYoc3RhdHVzLmRlc2NyaXB0aW9uLCBzdGF0dXMu
ZGV0YWlscykpOworICAgICAgICB9CiAgICAgfSwKIAogICAgIF9vbkdldENvbnNvbGVNZXNzYWdl
czogZnVuY3Rpb24oKQpAQCAtNzg5LDE0ICs3OTMsNDEgQEAgV2ViSW5zcGVjdG9yLkV4dGVuc2lv
blNlcnZlci5wcm90b3R5cGUgPSB7CiAgICAgZXZhbHVhdGU6IGZ1bmN0aW9uKGV4cHJlc3Npb24s
IGV4cG9zZUNvbW1hbmRMaW5lQVBJLCByZXR1cm5CeVZhbHVlLCBvcHRpb25zLCBzZWN1cml0eU9y
aWdpbiwgY2FsbGJhY2spIAogICAgIHsKICAgICAgICAgdmFyIGNvbnRleHRJZDsKLSAgICAgICAg
aWYgKHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IiAmJiBvcHRpb25zWyJ1c2VDb250ZW50U2Ny
aXB0Q29udGV4dCJdKSB7Ci0gICAgICAgICAgICB2YXIgbWFpbkZyYW1lID0gV2ViSW5zcGVjdG9y
LnJlc291cmNlVHJlZU1vZGVsLm1haW5GcmFtZTsKLSAgICAgICAgICAgIGlmICghbWFpbkZyYW1l
KQotICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9GQUlMRUQoIm1haW4gZnJh
bWUgbm90IGF2YWlsYWJsZSB5ZXQiKTsKLSAgICAgICAgICAgIHZhciBjb250ZXh0ID0gV2ViSW5z
cGVjdG9yLnJ1bnRpbWVNb2RlbC5jb250ZXh0QnlGcmFtZUFuZFNlY3VyaXR5T3JpZ2luKG1haW5G
cmFtZSwgc2VjdXJpdHlPcmlnaW4pOwotICAgICAgICAgICAgaWYgKCFjb250ZXh0KQotICAgICAg
ICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChzZWN1cml0eU9yaWdpbik7
Ci0gICAgICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOworICAgICAgICBpZiAodHlwZW9m
IG9wdGlvbnMgPT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICB2YXIgZnJhbWVTZWN1cml0eU9y
aWdpbjsKKyAgICAgICAgICAgIGlmIChvcHRpb25zWyJ1c2VDb250ZW50U2NyaXB0Q29udGV4dCJd
ID09PSB0cnVlKSB7CisgICAgICAgICAgICAgICAgZnJhbWVTZWN1cml0eU9yaWdpbiA9IHNlY3Vy
aXR5T3JpZ2luOworICAgICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLmZyYW1lICYmIHR5cGVv
ZiBvcHRpb25zLmZyYW1lID09PSAib2JqZWN0IiAmJiBvcHRpb25zLmZyYW1lLnNlY3VyaXR5T3Jp
Z2luKSB7CisgICAgICAgICAgICAgICAgZnJhbWVTZWN1cml0eU9yaWdpbiA9IG9wdGlvbnMuZnJh
bWUuc2VjdXJpdHlPcmlnaW47CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgdmFyIHVybDsK
KyAgICAgICAgICAgIGlmIChvcHRpb25zLmZyYW1lICYmIHR5cGVvZiBvcHRpb25zLmZyYW1lID09
PSAib2JqZWN0IiAmJiBvcHRpb25zLmZyYW1lLnVybCkgeworICAgICAgICAgICAgICAgIHZhciB1
cmwgPSBvcHRpb25zLmZyYW1lLnVybDsKKyAgICAgICAgICAgICAgICB2YXIgY29udGV4dDsKKyAg
ICAgICAgICAgICAgICB2YXIgY29udGV4dExpc3RzID0gV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2Rl
bC5jb250ZXh0TGlzdHMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNv
bnRleHRMaXN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dExpc3RzW2ldLnVybCA9PT0gdXJsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZy
YW1lU2VjdXJpdHlPcmlnaW4gfHwgZnJhbWVTZWN1cml0eU9yaWdpbiAmJiB1cmwuaW5kZXhPZihm
cmFtZVNlY3VyaXR5T3JpZ2luKSA9PT0gMCkgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0ID0gY29udGV4dExpc3RzW2ldLmV4ZWN1dGlvbkNvbnRleHRzKClbMF07IC8vIHRo
ZSBtYWluIHdvcmxkIGNvbnRleHQgaXMgYWx3YXlzIHRoZSBmaXJzdCBvbmUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dCA9IGNvbnRleHRMaXN0c1tpXS5jb250ZXh0QnlTZWN1cml0eU9yaWdpbihmcmFtZVNlY3VyaXR5
T3JpZ2luKTsgICAgCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSB0aGlzLl9zdGF0dXMuRV9OT1RGT1VO
RChmcmFtZVNlY3VyaXR5T3JpZ2luICsgIiBvcmlnaW4gaW4gVVJMICIgKyB1cmwpOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOworICAgICAgICAgICAgfSBlbHNlIGlmIChm
cmFtZVNlY3VyaXR5T3JpZ2luKSB7CisgICAgICAgICAgICAgICAgdmFyIG1haW5GcmFtZSA9IFdl
Ykluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5tYWluRnJhbWU7CisgICAgICAgICAgICAgICAg
aWYgKCFtYWluRnJhbWUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMu
RV9GQUlMRUQoIm1haW4gZnJhbWUgbm90IGF2YWlsYWJsZSB5ZXQiKTsKKyAgICAgICAgICAgICAg
ICB2YXIgY29udGV4dCA9IFdlYkluc3BlY3Rvci5ydW50aW1lTW9kZWwuY29udGV4dEJ5RnJhbWVB
bmRTZWN1cml0eU9yaWdpbihtYWluRnJhbWUsIGZyYW1lU2VjdXJpdHlPcmlnaW4pOworICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXR1cy5FX05PVEZPVU5EKGZyYW1lU2VjdXJpdHlPcmlnaW4pOworICAgICAgICAgICAgICAg
IGNvbnRleHRJZCA9IGNvbnRleHQuaWQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgUnVudGltZUFnZW50LmV2YWx1YXRlKGV4cHJlc3Npb24sICJleHRlbnNpb24iLCBleHBvc2VD
b21tYW5kTGluZUFQSSwgdHJ1ZSwgY29udGV4dElkLCByZXR1cm5CeVZhbHVlLCBmYWxzZSwgY2Fs
bGJhY2spOwogICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCAwMTc4MTgwYWJmOGYxMGI2OWFkYWNmZmU3YmZjNTdhNDIy
YTNkNTk1Li4zYzNkZmZlZmVjOWY5ZjE2OGM1ZDU4ZmNmOGY0MjRiNjA0NTRmMmRmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTMtMDEtMTQgIEpvaG4gSi4gQmFydG9uICA8am9obmpiYXJ0b25A
Y2hyb21pdW0ub3JnPgorICAgICAgICAKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGlmcmFt
ZSBvcHRpb24gdG8gaW5zcGVjdGVkV2luZG93LmV2YWwoKSBleHRlbnNpb24gQVBJCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY4MTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdGVzdCBhZGRlZCB0
byBjaGVjayBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIG9wdGlvbiB3aXRoIHN1Y2Nlc3NmdWwKKyAg
ICAgICAgYW5kIHVuc3VjY2Vzc2Z1bCB2YWx1ZXMuIE1vdmUgdGhlIHRlc3QgdG8gTGF5b3V0VGVz
dHMvaHR0cCB0byB0ZXN0CisgICAgICAgIGNyb3NzLW9yaWdpbiBpZnJhbWVzCisKKyAgICAgICAg
ICogaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dDoKKyAg
ICAgICAgICogaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFsLmh0bWw6CisgICAg
ICAgICAqIGluc3BlY3Rvci9leHRlbnNpb25zL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2
YWwuaHRtbDogQWRkZWQuCisyMDEzLTAxLTE1ICBKb2huIEouIEJhcnRvbiAgPGpvaG5qYmFydG9u
QGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnNwZWN0ZWRXaW5kb3cu
ZXZhbCgiSWFtVW5kZWZpbmVkLnByb3AiLCBjYWxsYmFjaykgZmFpbHMgdG8gZ2l2ZSBleGNlcHRp
b24gdGV4dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2OTI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
TmV3IHRlc3QgY2FzZSBmb3IgZXZhbHVhdGlvbnMgdGhhdCB0aHJvdy4KKworICAgICAgICAqIGlu
c3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQ6CisgICAgICAg
ICogaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFsLmh0bWw6CisKIDIwMTMtMDEt
MTQgIFRvbW15IFdpZGVuZmx5Y2h0ICA8dG9tbXl3QGdvb2dsZS5jb20+CiAKICAgICAgICAgTWVk
aWFTdHJlYW0gQVBJOiBVcGRhdGUgTWVkaWFTdHJlYW1UcmFjazo6cmVhZHlTdGF0ZSB0byBtYXRj
aCBzcGVjaWZpY2F0aW9uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9leHRlbnNpb25zLWV2YWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZTMx
MDdiZTA4Yjg0MzU1ZTcwMmU4MTNiMWI5ODY5YmI2ZDQ2YmRhCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDI4IEBACitUZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9uIEFQSQor
CisKK1N0YXJ0ZWQgZXh0ZW5zaW9uLgorUnVubmluZyB0ZXN0cy4uLgorUlVOTklORyBURVNUOiBl
eHRlbnNpb25fdGVzdEV2YWxDb25zb2xlQVBJCitFdmFsdWF0ZTogImZ1bmN0aW9uIiAoZXhjZXB0
aW9uOiB1bmRlZmluZWQpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbERlZmluZXNH
bG9iYWxTeW1ib2xzCitFdmFsdWF0ZTogeyJmdW5jIjoiZnVuY3Rpb24iLCJ2YXJpYWJsZSI6NDJ9
IChleGNlcHRpb246IHVuZGVmaW5lZCkKK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFs
SW5JRnJhbWUKK2xvZzogRXh0ZW5zaW9uIHNlcnZlciBlcnJvcjogT2JqZWN0IG5vdCBmb3VuZDog
Ym9ndXMgb3JpZ2luIGluIFVSTCBodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL3Jlc291
cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbAorRXZhbHVhdGU6ICIvaW5zcGVjdG9yL3Jl
c291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbCIgKGV4Y2VwdGlvbjogdW5kZWZpbmVk
KQorUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxJbklGcmFtZUJhZE9wdGlvbgorRXZh
bHVhdGU6ICJFeHRlbnNpb24gc2VydmVyIGVycm9yOiBPYmplY3Qgbm90IGZvdW5kOiBib2d1cyBv
cmlnaW4gaW4gVVJMIGh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4
dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIiAoZXhjZXB0aW9uOiB0cnVlKQorUlVOTklORyBURVNU
OiBleHRlbnNpb25fdGVzdEV2YWxPaworRXZhbHVhdGU6IHsic3RyIjoiZm9vIiwibnVtIjo0Mn0g
KGV4Y2VwdGlvbjogdW5kZWZpbmVkKQorUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxT
dGF0ZW1lbnQKK0V2YWx1YXRlOiAwIChleGNlcHRpb246IHVuZGVmaW5lZCkKK1JVTk5JTkcgVEVT
VDogZXh0ZW5zaW9uX3Rlc3RFdmFsU3RyaW5naWZ5aW5nTG9vcEZhaWxlZAorRXZhbHVhdGU6ICJP
YmplY3QgaGFzIHRvbyBsb25nIHJlZmVyZW5jZSBjaGFpbihtdXN0IG5vdCBiZSBsb25nZXIgdGhh
biAxMDAwKSIgKGV4Y2VwdGlvbjogdHJ1ZSkKK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RF
dmFsVGhyb3dzCitFdmFsdWF0ZTogInRlc3RFeGNlcHRpb25TdHJpbmciIChleGNlcHRpb246IHRy
dWUpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbFVuZGVmaW5lZAorRXZhbHVhdGU6
IHVuZGVmaW5lZCAoZXhjZXB0aW9uOiB1bmRlZmluZWQpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lv
bl90ZXN0V2l0aFN0cmluZ2lmeU92ZXJyaWRkZW4KK0V2YWx1YXRlOiAiT0siIChleGNlcHRpb246
IHVuZGVmaW5lZCkKK0FsbCB0ZXN0cyBkb25lLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWV2YWwuaHRtbCBiL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5MDc0
MzI2OWM0Zjc5OTAwMDQwMTM4ZWI3ZTEyNGJhNzYwNmFlOTIKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWV2YWwuaHRtbApAQCAt
MCwwICsxLDkwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Imluc3BlY3Rvci10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCit3aW5kb3cuaW5zcGVjdGVkVmFs
dWUgPSB7IHN0cjogImZvbyIsIG51bTogNDIgfTsKKword2luZG93Lmxvb3AgPSB7IH07Cit3aW5k
b3cubG9vcC5uZXh0ID0gd2luZG93Lmxvb3A7CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZh
bE9rKG5leHRUZXN0KQoreworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgi
aW5zcGVjdGVkVmFsdWUiLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5l
eHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbFN0cmluZ2lmeWluZ0xv
b3BGYWlsZWQobmV4dFRlc3QpCit7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5l
dmFsKCJ3aW5kb3cubG9vcCIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwg
bmV4dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsRGVmaW5lc0dsb2Jh
bFN5bWJvbHMobmV4dFRlc3QpCit7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5l
dmFsKCJmdW5jdGlvbiBleHRlbnNpb25GdW5jKCkge30iKTsKKyAgICB3ZWJJbnNwZWN0b3IuaW5z
cGVjdGVkV2luZG93LmV2YWwoImV4dGVuc2lvblZhciA9IDQyOyIpOworICAgIHdlYkluc3BlY3Rv
ci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiKHsgZnVuYzogdHlwZW9mIHdpbmRvdy5leHRlbnNpb25G
dW5jLCB2YXJpYWJsZTogd2luZG93LmV4dGVuc2lvblZhciB9KSIsIGNhbGxiYWNrQW5kTmV4dFRl
c3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9u
X3Rlc3RFdmFsU3RhdGVtZW50KG5leHRUZXN0KQoreworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0
ZWRXaW5kb3cuZXZhbCgidmFyIHggPSAzOyB3aGlsZSAoLS14KTsgeCIsIGNhbGxiYWNrQW5kTmV4
dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0ZW5z
aW9uX3Rlc3RFdmFsVW5kZWZpbmVkKG5leHRUZXN0KQoreworICAgIHdlYkluc3BlY3Rvci5pbnNw
ZWN0ZWRXaW5kb3cuZXZhbCgidW5kZWZpbmVkIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNp
b25fb25FdmFsLCBuZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxD
b25zb2xlQVBJKG5leHRUZXN0KQoreworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cu
ZXZhbCgidHlwZW9mIGluc3BlY3QiLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2
YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0V2l0aFN0cmluZ2lm
eU92ZXJyaWRkZW4obmV4dFRlc3QpCit7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRv
dy5ldmFsKCIoSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlvbigpIHsgdGhyb3cgJ29vcHMhIHlvdSBj
YW4gbm90IHVzZSBKU09OLnN0cmluZ2lmeSc7IH0pLCAnT0snIiwgY2FsbGJhY2tBbmROZXh0VGVz
dChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25f
dGVzdEV2YWxUaHJvd3MobmV4dFRlc3QpCit7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdp
bmRvdy5ldmFsKCJ0aHJvdygndGVzdEV4Y2VwdGlvblN0cmluZycpIiwgY2FsbGJhY2tBbmROZXh0
VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNp
b25fdGVzdEV2YWxJbklGcmFtZShuZXh0VGVzdCkgeworICAgIHZhciBvcHRpb25zID0gZXh0ZW5z
aW9uX29wdGlvbnMoKTsKKyAgICB2YXIgbG9jID0gIndpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSI7
CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKGxvYywgb3B0aW9ucywgY2Fs
bGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOworfQorCitmdW5j
dGlvbiBleHRlbnNpb25fdGVzdEV2YWxJbklGcmFtZUJhZE9wdGlvbihuZXh0VGVzdCkgeworICAg
IHZhciBvcHRpb25zID0gZXh0ZW5zaW9uX29wdGlvbnMoKTsKKyAgICBvcHRpb25zLmZyYW1lLnNl
Y3VyaXR5T3JpZ2luID0gImJvZ3VzIjsKKyAgICB2YXIgbG9jID0gIndpbmRvdy5sb2NhdGlvbi5w
YXRobmFtZSI7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKGxvYywgb3B0
aW9ucywgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOwor
fQorCitmdW5jdGlvbiBleHRlbnNpb25fb25FdmFsKHZhbHVlLCBpc0V4Y2VwdGlvbikKK3sKKyAg
ICBvdXRwdXQoIkV2YWx1YXRlOiAiICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgIiAoZXhjZXB0
aW9uOiAiICsgaXNFeGNlcHRpb24gKyAiKSIpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fb3B0
aW9ucygpIHsKKyAgICB2YXIgdXJsID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3Iv
cmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sJzsKKyAgICB2YXIgc2VnbWVudHMg
PSB1cmwuc3BsaXQoJy8nKTsgLy8gaHR0cDovL2EuYi5jOnh4eC9wYXRoCisgICAgdmFyIG9yaWdp
biA9IHNlZ21lbnRzWzBdICsgJy8vJyArIHNlZ21lbnRzWzJdOworICAgIHZhciBvcHRpb25zID0g
eworICAgICAgICBmcmFtZTogeworICAgICAgICAgICAgdXJsOiB1cmwsCisgICAgICAgICAgICBz
ZWN1cml0eU9yaWdpbjogb3JpZ2luCisgICAgICAgIH0KKyAgICB9OworICAgIHJldHVybiBvcHRp
b25zOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8
cD5UZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9uIEFQSTwvcD4KKzxpZnJhbWUgc3JjPSJyZXNv
dXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUwMzI3MWMxN2RiZmNiZTc5YTMzNjlmYjU3N2JiNGM1NDY2MGIzMWUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9u
cy1mcmFtZS1ldmFsLmh0bWwKQEAgLTAsMCArMSw2IEBACis8aHRtbD4KKzxzY3JpcHQ+CisvLyBT
b21lIEpTIHRvIGNyZWF0ZSBhIGNvbnRleHQKK3dpbmRvdy5pQW1BbklGcmFtZSA9IHRydWU7Cis8
L3NjcmlwdD4KKzwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2YWwtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFs
LWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNlMDA1ZGMzMzg5
MGRmYzlmZWJiOGMxZmRkYzZmZGFmZTM0YTIzMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRl
bnNpb25zLWV2YWwtZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAot
VGVzdHMgV2ViSW5zcGVjdG9yIGV4dGVuc2lvbiBBUEkKLQotU3RhcnRlZCBleHRlbnNpb24uCi1S
dW5uaW5nIHRlc3RzLi4uCi1SVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbENvbnNvbGVB
UEkKLUV2YWx1YXRlOiAiZnVuY3Rpb24iIChleGNlcHRpb246IHVuZGVmaW5lZCkKLVJVTk5JTkcg
VEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsRGVmaW5lc0dsb2JhbFN5bWJvbHMKLUV2YWx1YXRlOiB7
ImZ1bmMiOiJmdW5jdGlvbiIsInZhcmlhYmxlIjo0Mn0gKGV4Y2VwdGlvbjogdW5kZWZpbmVkKQot
UlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxPawotRXZhbHVhdGU6IHsic3RyIjoiZm9v
IiwibnVtIjo0Mn0gKGV4Y2VwdGlvbjogdW5kZWZpbmVkKQotUlVOTklORyBURVNUOiBleHRlbnNp
b25fdGVzdEV2YWxTdGF0ZW1lbnQKLUV2YWx1YXRlOiAwIChleGNlcHRpb246IHVuZGVmaW5lZCkK
LVJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsU3RyaW5naWZ5aW5nTG9vcEZhaWxlZAot
RXZhbHVhdGU6ICJPYmplY3QgaGFzIHRvbyBsb25nIHJlZmVyZW5jZSBjaGFpbihtdXN0IG5vdCBi
ZSBsb25nZXIgdGhhbiAxMDAwKSIgKGV4Y2VwdGlvbjogdHJ1ZSkKLVJVTk5JTkcgVEVTVDogZXh0
ZW5zaW9uX3Rlc3RFdmFsVW5kZWZpbmVkCi1FdmFsdWF0ZTogdW5kZWZpbmVkIChleGNlcHRpb246
IHVuZGVmaW5lZCkKLVJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RXaXRoU3RyaW5naWZ5T3Zl
cnJpZGRlbgotRXZhbHVhdGU6ICJPSyIgKGV4Y2VwdGlvbjogdW5kZWZpbmVkKQotQWxsIHRlc3Rz
IGRvbmUuCi0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4
dGVuc2lvbnMtZXZhbC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0
ZW5zaW9ucy1ldmFsLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NGRmMDA5
NjQwM2Q5MjU5MmZmNTZiN2Y3OThlZTcwMDNjNWI3ZmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMv
ZXh0ZW5zaW9ucy1ldmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08aHRt
bD4KLTxoZWFkPgotPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3Bl
Y3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9leHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0
L2phdmFzY3JpcHQiPgotCi13aW5kb3cuaW5zcGVjdGVkVmFsdWUgPSB7IHN0cjogImZvbyIsIG51
bTogNDIgfTsKLQotd2luZG93Lmxvb3AgPSB7IH07Ci13aW5kb3cubG9vcC5uZXh0ID0gd2luZG93
Lmxvb3A7Ci0KLWZ1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbE9rKG5leHRUZXN0KQotewotICAg
IHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiaW5zcGVjdGVkVmFsdWUiLCBjYWxs
YmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Ci19Ci0KLWZ1bmN0
aW9uIGV4dGVuc2lvbl90ZXN0RXZhbFN0cmluZ2lmeWluZ0xvb3BGYWlsZWQobmV4dFRlc3QpCi17
Ci0gICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ3aW5kb3cubG9vcCIsIGNh
bGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKLX0KLQotZnVu
Y3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsRGVmaW5lc0dsb2JhbFN5bWJvbHMobmV4dFRlc3QpCi17
Ci0gICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJmdW5jdGlvbiBleHRlbnNp
b25GdW5jKCkge30iKTsKLSAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoImV4
dGVuc2lvblZhciA9IDQyOyIpOwotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZh
bCgiKHsgZnVuYzogdHlwZW9mIHdpbmRvdy5leHRlbnNpb25GdW5jLCB2YXJpYWJsZTogd2luZG93
LmV4dGVuc2lvblZhciB9KSIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwg
bmV4dFRlc3QpKTsKLX0KLQotZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsU3RhdGVtZW50KG5l
eHRUZXN0KQotewotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidmFyIHgg
PSAzOyB3aGlsZSAoLS14KTsgeCIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZh
bCwgbmV4dFRlc3QpKTsKLX0KLQotZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsVW5kZWZpbmVk
KG5leHRUZXN0KQotewotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidW5k
ZWZpbmVkIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkp
OwotfQotCi1mdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxDb25zb2xlQVBJKG5leHRUZXN0KQot
ewotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidHlwZW9mIGluc3BlY3Qi
LCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Ci19Ci0K
LWZ1bmN0aW9uIGV4dGVuc2lvbl90ZXN0V2l0aFN0cmluZ2lmeU92ZXJyaWRkZW4obmV4dFRlc3Qp
Ci17Ci0gICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCIoSlNPTi5zdHJpbmdp
ZnkgPSBmdW5jdGlvbigpIHsgdGhyb3cgJ29vcHMhIHlvdSBjYW4gbm90IHVzZSBKU09OLnN0cmlu
Z2lmeSc7IH0pLCAnT0snIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBu
ZXh0VGVzdCkpOwotfQotCi1mdW5jdGlvbiBleHRlbnNpb25fb25FdmFsKHZhbHVlLCBpc0V4Y2Vw
dGlvbikKLXsKLSAgICBvdXRwdXQoIkV2YWx1YXRlOiAiICsgSlNPTi5zdHJpbmdpZnkodmFsdWUp
ICsgIiAoZXhjZXB0aW9uOiAiICsgaXNFeGNlcHRpb24gKyAiKSIpOwotfQotCi08L3NjcmlwdD4K
LTwvaGVhZD4KLTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KLTxwPlRlc3RzIFdlYkluc3BlY3Rv
ciBleHRlbnNpb24gQVBJPC9wPgotPC9ib2R5PgotPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185025</attachid>
            <date>2013-01-28 11:53:41 -0800</date>
            <delta_ts>2013-01-29 12:32:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106811-20130128115028.patch</filename>
            <type>text/plain</type>
            <size>16787</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE3YTM0ZjZlODhkMmNj
OWM5MTY5MjgzZDU4NDM5OTQxOWViZDhhOC4uOTBlMDJkYTM4YTk3YzU4ZjgxMzQ5ZDJhMDE0Yzk4
ZjM4ZjkxZjA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw0ICsxLDI1IEBACi0yMDEzLTAxLTI4ICBCZWFy
IFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4KKzIwMTMtMDEtMjggIEpvaG4gSi4gQmFydG9u
ICA8am9obmpiYXJ0b25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFk
ZCBpZnJhbWUgb3B0aW9uIHRvIGluc3BlY3RlZFdpbmRvdy5ldmFsKCkgZXh0ZW5zaW9uIEFQSQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2ODExCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbmV3
IGNhc2UgdG8gdGhlIG9wdGlvbnMgcHJvY2Vzc2luZyBpbiBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgp
LCBsb29rCisgICAgICAgIGZvciBvcHRpb24uZnJhbWVVUkwgPHN0cmluZz4gYW5kL29yIG9wdGlv
bi5zY3JpcHRFeGVjdXRpb25Db250ZXh0OiA8c3RyaW5nPiwgZmluZCB0aGUKKyAgICAgICAgbWF0
Y2hpbmcgSlMgY29udGV4dCBpbiB0aGUgcnVudGltZU1vZGVsLCBhbmQgY2FsbCBldmFsdWF0ZSgp
IGluIHRoYXQKKyAgICAgICAgY29udGV4dDsgb3IgZXJyb3IgaWYgdGhlIGNvbnRleHQgaXMgbm90
IGZvdW5kLiAKKworICAgICAgICBEcml2ZS1ieTogY29ycmVjdCB0aGUgcmV0dXJuIHByb2Nlc3Np
bmcgb2YgX29uRXZhbHVhdGVPbkluc3BlY3RlZFBhZ2UoKQorICAgICAgICB0byBwcm9wYWdhdGUg
dGhlIGVycm9yIGJhY2sgdG8gdGhlIGV4dGVuc2lvbi4KKworICAgICAgICBOZXcgdGVzdCBjYXNl
IGFkZGVkIHRvIGV4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFsLmh0bWwKKworICAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuX29uRXZhbHVhdGVPbkluc3BlY3RlZFBhZ2Up
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuZXZhbHVh
dGUpOgorCiswMTMtMDEtMjggIEJlYXIgVHJhdmlzICA8YmV0cmF2aXNAYWRvYmUuY29tPgogCiAg
ICAgICAgIFtDU1MgRXhjbHVzaW9uc10gUmVmYWN0b3IgRXhjbHVzaW9uU2hhcGVJbnNpZGVJbmZv
IHRvIG1vcmUgZ2VuZXJhbCBFeGNsdXNpb25TaGFwZUluZm8KICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDc2NgpAQCAtNjcsNiArODgsMTAgQEAKICAg
ICAgICAgKFdlYkNvcmUpOgogICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpleGNsdXNpb25T
aGFwZU91dHNpZGVJbmZvKTogRGl0dG8uCiAKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5k
L0V4dGVuc2lvblNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2
ZXIucHJvdG90eXBlLl9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKwogMjAxMy0wMS0y
OCAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5uZXlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFNW
R1ZpZXdTcGVjIGZhaWxzIHdoZW4gY29ycmVzcG9uZGluZyBlbGVtZW50IGhhcyBiZWVuIHJlbW92
ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5z
aW9uU2VydmVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNp
b25TZXJ2ZXIuanMKaW5kZXggNzY4Yjg2MWE2ZDU2ZTUwNzM2ZDBhYTg2YjZkYWM0ZjcxZjMzMTkz
Mi4uNmRkYmIyMzFmNGI0ZjFjNzUwZjM3ZjU2ODEzYmUzZDhkZmJkNTdlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMK
QEAgLTM0Miw3ICszNDIsMTAgQEAgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5
cGUgPSB7CiAgICAgICAKICAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoQ2FsbGJhY2sobWVzc2Fn
ZS5yZXF1ZXN0SWQsIHBvcnQsIHJlc3VsdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRo
aXMuZXZhbHVhdGUobWVzc2FnZS5leHByZXNzaW9uLCB0cnVlLCB0cnVlLCBtZXNzYWdlLmV2YWx1
YXRlT3B0aW9ucywgcG9ydC5fZXh0ZW5zaW9uT3JpZ2luLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsK
KyAgICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuZXZhbHVhdGUobWVzc2FnZS5leHByZXNzaW9uLCB0
cnVlLCB0cnVlLCBtZXNzYWdlLmV2YWx1YXRlT3B0aW9ucywgcG9ydC5fZXh0ZW5zaW9uT3JpZ2lu
LCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAg
ICAgY2FsbGJhY2suY2FsbCh0aGlzLCAiRXh0ZW5zaW9uIHNlcnZlciBlcnJvcjogIiArIFN0cmlu
Zy52c3ByaW50ZihzdGF0dXMuZGVzY3JpcHRpb24sIHN0YXR1cy5kZXRhaWxzKSk7CisgICAgICAg
IH0KICAgICB9LAogCiAgICAgX29uR2V0Q29uc29sZU1lc3NhZ2VzOiBmdW5jdGlvbigpCkBAIC03
ODQsMTQgKzc4Nyw0MyBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9
IHsKICAgICBldmFsdWF0ZTogZnVuY3Rpb24oZXhwcmVzc2lvbiwgZXhwb3NlQ29tbWFuZExpbmVB
UEksIHJldHVybkJ5VmFsdWUsIG9wdGlvbnMsIHNlY3VyaXR5T3JpZ2luLCBjYWxsYmFjaykgCiAg
ICAgewogICAgICAgICB2YXIgY29udGV4dElkOwotICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMg
PT09ICJvYmplY3QiICYmIG9wdGlvbnNbInVzZUNvbnRlbnRTY3JpcHRDb250ZXh0Il0pIHsKLSAg
ICAgICAgICAgIHZhciBtYWluRnJhbWUgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwu
bWFpbkZyYW1lOwotICAgICAgICAgICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxFRCgibWFpbiBmcmFtZSBub3QgYXZhaWxhYmxlIHll
dCIpOwotICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVs
LmNvbnRleHRCeUZyYW1lQW5kU2VjdXJpdHlPcmlnaW4obWFpbkZyYW1lLCBzZWN1cml0eU9yaWdp
bik7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX3N0YXR1cy5FX05PVEZPVU5EKHNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgICAgIGNvbnRl
eHRJZCA9IGNvbnRleHQuaWQ7CisgICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gIm9iamVj
dCIpIHsKKyAgICAgICAgICAgIHZhciBjb250ZXh0U2VjdXJpdHlPcmlnaW47CisgICAgICAgICAg
ICBpZiAob3B0aW9uc1sidXNlQ29udGVudFNjcmlwdENvbnRleHQiXSApIHsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0U2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0eU9yaWdpbjsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAob3B0aW9ucy5zY3JpcHRFeGVjdXRpb25Db250ZXh0KSB7CisgICAgICAgICAg
ICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gb3B0aW9ucy5zY3JpcHRFeGVjdXRpb25Db250
ZXh0OworICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIHZhciB1cmw7CisgICAgICAgICAgICBp
ZiAob3B0aW9ucy5mcmFtZVVSTCkgeworICAgICAgICAgICAgICAgIHZhciB1cmwgPSBvcHRpb25z
LmZyYW1lVVJMOworICAgICAgICAgICAgICAgIHZhciBjb250ZXh0OworICAgICAgICAgICAgICAg
IHZhciBjb250ZXh0TGlzdHMgPSBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVsLmNvbnRleHRMaXN0
cygpOworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dExpc3RzLmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0TGlzdHNbaV0udXJs
ID09PSB1cmwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29udGV4dFNlY3VyaXR5
T3JpZ2luIHx8IGNvbnRleHRTZWN1cml0eU9yaWdpbiAmJiB1cmwuaW5kZXhPZihjb250ZXh0U2Vj
dXJpdHlPcmlnaW4pID09PSAwKSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQgPSBjb250ZXh0TGlzdHNbaV0uZXhlY3V0aW9uQ29udGV4dHMoKVswXTsgLy8gdGhlIG1haW4g
d29ybGQgY29udGV4dCBpcyBhbHdheXMgdGhlIGZpcnN0IG9uZQorICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0ID0gY29u
dGV4dExpc3RzW2ldLmNvbnRleHRCeVNlY3VyaXR5T3JpZ2luKGNvbnRleHRTZWN1cml0eU9yaWdp
bik7ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghY29udGV4dCkgeworICAg
ICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIlRoZSBKUyBjb250ZXh0ICIgKyBjb250ZXh0
U2VjdXJpdHlPcmlnaW4gKyAiIHdhcyBub3QgZm91bmQgYW1vbmcgdGhlIGNvbnRleHRzIHdpdGgg
VVJMICIgKyB1cmwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9O
T1RGT1VORChjb250ZXh0U2VjdXJpdHlPcmlnaW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOworICAgICAgICAgICAgfSBlbHNlIGlm
IChjb250ZXh0U2VjdXJpdHlPcmlnaW4pIHsKKyAgICAgICAgICAgICAgICB2YXIgbWFpbkZyYW1l
ID0gV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLm1haW5GcmFtZTsKKyAgICAgICAgICAg
ICAgICBpZiAoIW1haW5GcmFtZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0
YXR1cy5FX0ZBSUxFRCgibWFpbiBmcmFtZSBub3QgYXZhaWxhYmxlIHlldCIpOworICAgICAgICAg
ICAgICAgIHZhciBjb250ZXh0ID0gV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2RlbC5jb250ZXh0QnlG
cmFtZUFuZFNlY3VyaXR5T3JpZ2luKG1haW5GcmFtZSwgY29udGV4dFNlY3VyaXR5T3JpZ2luKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
c29sZS53YXJuKCJUaGUgSlMgY29udGV4dCAiICsgY29udGV4dFNlY3VyaXR5T3JpZ2luICsgIiB3
YXMgbm90IGZvdW5kIGFtb25nIHRoZSBtYWluZnJhbWUgY29udGV4dHMiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX05PVEZPVU5EKGNvbnRleHRTZWN1cml0eU9y
aWdpbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbnRleHRJZCA9IGNv
bnRleHQuaWQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgUnVudGltZUFnZW50
LmV2YWx1YXRlKGV4cHJlc3Npb24sICJleHRlbnNpb24iLCBleHBvc2VDb21tYW5kTGluZUFQSSwg
dHJ1ZSwgY29udGV4dElkLCByZXR1cm5CeVZhbHVlLCBmYWxzZSwgY2FsbGJhY2spOwogICAgIH0K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBiNTlkMWZmOTYzODUwNjBlN2MyNjBjNWE3YzhjOTAxNmIwMmZlODU0Li5kOGE4NWI1
NjU2ZDBlODlmMDM0YWQ0MDcyZTMxYTkxOGNjYzdkZDcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDQgKzEsMTkgQEAK
LTIwMTMtMDEtMjggIFpvbHRhbiBBcnZhaSAgPHphcnZhaUBpbmYudS1zemVnZWQuaHU+CisyMDEz
LTAxLTI4ICBKb2huIEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKyAgICAg
ICAgCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBpZnJhbWUgb3B0aW9uIHRvIGluc3BlY3Rl
ZFdpbmRvdy5ldmFsKCkgZXh0ZW5zaW9uIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2ODExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3QgYWRkZWQgdG8gY2hlY2sgaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSBvcHRpb24gd2l0aCBzdWNjZXNzZnVsCisgICAgICAgIGFuZCB1bnN1Y2Nlc3Nm
dWwgdmFsdWVzLiBNb3ZlIHRoZSB0ZXN0IHRvIExheW91dFRlc3RzL2h0dHAgdG8gdGVzdAorICAg
ICAgICBjcm9zcy1vcmlnaW4gaWZyYW1lcworCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0
b3IvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3Rz
L2luc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQuCisgICAg
ICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLmh0bWw6IFJlbmFtZWQg
ZnJvbSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2YWwuaHRt
bC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1m
cmFtZS1ldmFsLmh0bWw6IEFkZGVkLgorCiswMTMtMDEtMjggIFpvbHRhbiBBcnZhaSAgPHphcnZh
aUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0XSBVbnJldmlld2VkIGdhcmRlbmluZy4K
IApAQCAtODgsNiArMTAzLDEwIEBACiAgICAgICAgICogcGxhdGZvcm0vcXQvY29tcG9zaXRpbmcv
bGF5ZXItY3JlYXRpb24vb3ZlcmxhcC1hbmltYXRpb24tY29udGFpbmVyLWV4cGVjdGVkLnR4dDoK
ICAgICAgICAgKiBwbGF0Zm9ybS9xdC9jc3MzL2ZpbHRlcnMvY29tcG9zaXRlZC1kdXJpbmctdHJh
bnNpdGlvbi1sYXllcnRyZWUtZXhwZWN0ZWQudHh0OgogCisgICAgICAgICogaHR0cC90ZXN0cy9p
bnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91
dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQu
CisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLmh0bWw6IFJl
bmFtZWQgZnJvbSBMYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2
YWwuaHRtbC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5z
aW9ucy1mcmFtZS1ldmFsLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAxLTI4ICBTdGVwaGVuIENoZW5u
ZXkgIDxzY2hlbm5leUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU1ZHVmlld1NwZWMgZmFpbHMg
d2hlbiBjb3JyZXNwb25kaW5nIGVsZW1lbnQgaGFzIGJlZW4gcmVtb3ZlZApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZhbC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQwZDUyNjM3OWNhZmQ1OTBjODBjODI3ZGRkYjc2MjRj
YWMzZmFiMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2V4dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyOCBAQAorVGVzdHMg
V2ViSW5zcGVjdG9yIGV4dGVuc2lvbiBBUEkKKworCitTdGFydGVkIGV4dGVuc2lvbi4KK1J1bm5p
bmcgdGVzdHMuLi4KK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsQ29uc29sZUFQSQor
RXZhbHVhdGU6ICJmdW5jdGlvbiIgKGV4Y2VwdGlvbjogdW5kZWZpbmVkKQorUlVOTklORyBURVNU
OiBleHRlbnNpb25fdGVzdEV2YWxEZWZpbmVzR2xvYmFsU3ltYm9scworRXZhbHVhdGU6IHsiZnVu
YyI6ImZ1bmN0aW9uIiwidmFyaWFibGUiOjQyfSAoZXhjZXB0aW9uOiB1bmRlZmluZWQpCitSVU5O
SU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbEluSUZyYW1lCitsb2c6IEV4dGVuc2lvbiBzZXJ2
ZXIgZXJyb3I6IE9iamVjdCBub3QgZm91bmQ6IGJvZ3VzCitFdmFsdWF0ZTogIi9pbnNwZWN0b3Iv
cmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIiAoZXhjZXB0aW9uOiB1bmRlZmlu
ZWQpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbEluSUZyYW1lQmFkT3B0aW9uCitF
dmFsdWF0ZTogIkV4dGVuc2lvbiBzZXJ2ZXIgZXJyb3I6IE9iamVjdCBub3QgZm91bmQ6IGJvZ3Vz
IiAoZXhjZXB0aW9uOiB0cnVlKQorUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxPawor
RXZhbHVhdGU6IHsic3RyIjoiZm9vIiwibnVtIjo0Mn0gKGV4Y2VwdGlvbjogdW5kZWZpbmVkKQor
UlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxTdGF0ZW1lbnQKK0V2YWx1YXRlOiAwIChl
eGNlcHRpb246IHVuZGVmaW5lZCkKK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsU3Ry
aW5naWZ5aW5nTG9vcEZhaWxlZAorRXZhbHVhdGU6ICJPYmplY3QgaGFzIHRvbyBsb25nIHJlZmVy
ZW5jZSBjaGFpbihtdXN0IG5vdCBiZSBsb25nZXIgdGhhbiAxMDAwKSIgKGV4Y2VwdGlvbjogdHJ1
ZSkKK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsVGhyb3dzCitFdmFsdWF0ZTogInRl
c3RFeGNlcHRpb25TdHJpbmciIChleGNlcHRpb246IHRydWUpCitSVU5OSU5HIFRFU1Q6IGV4dGVu
c2lvbl90ZXN0RXZhbFVuZGVmaW5lZAorRXZhbHVhdGU6IHVuZGVmaW5lZCAoZXhjZXB0aW9uOiB1
bmRlZmluZWQpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0V2l0aFN0cmluZ2lmeU92ZXJy
aWRkZW4KK0V2YWx1YXRlOiAiT0siIChleGNlcHRpb246IHVuZGVmaW5lZCkKK0FsbCB0ZXN0cyBk
b25lLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRl
bnNpb25zLWV2YWwuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVu
c2lvbnMtZXZhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0YzU5ZWM4ZTY1NGY2Y2Y5MGI0MTM0ZDM5Yjk0
NjU4ZWZhMjZhMWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9leHRlbnNpb25zLWV2YWwuaHRtbApAQCAtMCwwICsxLDg4IEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Imluc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorCit3aW5kb3cuaW5zcGVjdGVkVmFsdWUgPSB7IHN0cjogImZvbyIsIG51bTog
NDIgfTsKKword2luZG93Lmxvb3AgPSB7IH07Cit3aW5kb3cubG9vcC5uZXh0ID0gd2luZG93Lmxv
b3A7CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbE9rKG5leHRUZXN0KQoreworICAgIHdl
Ykluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiaW5zcGVjdGVkVmFsdWUiLCBjYWxsYmFj
a0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9u
IGV4dGVuc2lvbl90ZXN0RXZhbFN0cmluZ2lmeWluZ0xvb3BGYWlsZWQobmV4dFRlc3QpCit7Cisg
ICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ3aW5kb3cubG9vcCIsIGNhbGxi
YWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKK30KKworZnVuY3Rp
b24gZXh0ZW5zaW9uX3Rlc3RFdmFsRGVmaW5lc0dsb2JhbFN5bWJvbHMobmV4dFRlc3QpCit7Cisg
ICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJmdW5jdGlvbiBleHRlbnNpb25G
dW5jKCkge30iKTsKKyAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoImV4dGVu
c2lvblZhciA9IDQyOyIpOworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgi
KHsgZnVuYzogdHlwZW9mIHdpbmRvdy5leHRlbnNpb25GdW5jLCB2YXJpYWJsZTogd2luZG93LmV4
dGVuc2lvblZhciB9KSIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4
dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsU3RhdGVtZW50KG5leHRU
ZXN0KQoreworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidmFyIHggPSAz
OyB3aGlsZSAoLS14KTsgeCIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwg
bmV4dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsVW5kZWZpbmVkKG5l
eHRUZXN0KQoreworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidW5kZWZp
bmVkIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOwor
fQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxDb25zb2xlQVBJKG5leHRUZXN0KQorewor
ICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidHlwZW9mIGluc3BlY3QiLCBj
YWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1
bmN0aW9uIGV4dGVuc2lvbl90ZXN0V2l0aFN0cmluZ2lmeU92ZXJyaWRkZW4obmV4dFRlc3QpCit7
CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCIoSlNPTi5zdHJpbmdpZnkg
PSBmdW5jdGlvbigpIHsgdGhyb3cgJ29vcHMhIHlvdSBjYW4gbm90IHVzZSBKU09OLnN0cmluZ2lm
eSc7IH0pLCAnT0snIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0
VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxUaHJvd3MobmV4dFRlc3Qp
Cit7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ0aHJvdygndGVzdEV4
Y2VwdGlvblN0cmluZycpIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBu
ZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxJbklGcmFtZShuZXh0
VGVzdCkgeworICAgIHZhciBvcHRpb25zID0gZXh0ZW5zaW9uX29wdGlvbnMoKTsKKyAgICB2YXIg
bG9jID0gIndpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSI7CisgICAgd2ViSW5zcGVjdG9yLmluc3Bl
Y3RlZFdpbmRvdy5ldmFsKGxvYywgb3B0aW9ucywgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNp
b25fb25FdmFsLCBuZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxJ
bklGcmFtZUJhZE9wdGlvbihuZXh0VGVzdCkgeworICAgIHZhciBvcHRpb25zID0gZXh0ZW5zaW9u
X29wdGlvbnMoKTsKKyAgICBvcHRpb25zLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAiYm9ndXMi
OworICAgIHZhciBsb2MgPSAid2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIjsKKyAgICB3ZWJJbnNw
ZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwobG9jLCBvcHRpb25zLCBjYWxsYmFja0FuZE5leHRU
ZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lv
bl9vbkV2YWwodmFsdWUsIGlzRXhjZXB0aW9uKQoreworICAgIG91dHB1dCgiRXZhbHVhdGU6ICIg
KyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAiIChleGNlcHRpb246ICIgKyBpc0V4Y2VwdGlvbiAr
ICIpIik7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl9vcHRpb25zKCkgeworICAgIHZhciB1cmwg
PSAnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1m
cmFtZS1ldmFsLmh0bWwnOworICAgIHZhciBzZWdtZW50cyA9IHVybC5zcGxpdCgnLycpOyAvLyBo
dHRwOi8vYS5iLmM6eHh4L3BhdGgKKyAgICB2YXIgb3JpZ2luID0gc2VnbWVudHNbMF0gKyAnLy8n
ICsgc2VnbWVudHNbMl07CisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIGZyYW1lVVJMOiB1
cmwsCisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6IG9yaWdpbgorICAgIH07CisgICAg
cmV0dXJuIG9wdGlvbnM7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVu
VGVzdCgpIj4KKzxwPlRlc3RzIFdlYkluc3BlY3RvciBleHRlbnNpb24gQVBJPC9wPgorPGlmcmFt
ZSBzcmM9InJlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbCI+PC9pZnJhbWU+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWwgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTAzMjcxYzE3ZGJmY2JlNzlhMzM2OWZiNTc3YmI0YzU0NjYwYjMxZQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNl
cy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbApAQCAtMCwwICsxLDYgQEAKKzxodG1sPgorPHNj
cmlwdD4KKy8vIFNvbWUgSlMgdG8gY3JlYXRlIGEgY29udGV4dAord2luZG93LmlBbUFuSUZyYW1l
ID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMt
ZXZhbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRl
bnNpb25zLWV2YWwtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
NDM3OGIxODgwYmM3MWJmMjcyYjI3MjAxYmFiZDMzMDI0ZmJiMTg4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRl
bnNpb25zL2V4dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwy
MiArMCwwIEBACi1UZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9uIEFQSQotCi1TdGFydGVkIGV4
dGVuc2lvbi4KLVJ1bm5pbmcgdGVzdHMuLi4KLVJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RF
dmFsQ29uc29sZUFQSQotRXZhbHVhdGU6ICJmdW5jdGlvbiIgKGV4Y2VwdGlvbjogdW5kZWZpbmVk
KQotUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxEZWZpbmVzR2xvYmFsU3ltYm9scwot
RXZhbHVhdGU6IHsiZnVuYyI6ImZ1bmN0aW9uIiwidmFyaWFibGUiOjQyfSAoZXhjZXB0aW9uOiB1
bmRlZmluZWQpCi1SVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbE9rCi1FdmFsdWF0ZTog
eyJzdHIiOiJmb28iLCJudW0iOjQyfSAoZXhjZXB0aW9uOiB1bmRlZmluZWQpCi1SVU5OSU5HIFRF
U1Q6IGV4dGVuc2lvbl90ZXN0RXZhbFN0YXRlbWVudAotRXZhbHVhdGU6IDAgKGV4Y2VwdGlvbjog
dW5kZWZpbmVkKQotUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxTdHJpbmdpZnlpbmdM
b29wRmFpbGVkCi1FdmFsdWF0ZTogIk9iamVjdCBoYXMgdG9vIGxvbmcgcmVmZXJlbmNlIGNoYWlu
KG11c3Qgbm90IGJlIGxvbmdlciB0aGFuIDEwMDApIiAoZXhjZXB0aW9uOiB0cnVlKQotUlVOTklO
RyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxUaHJvd3MKLUV2YWx1YXRlOiAidGVzdEV4Y2VwdGlv
blN0cmluZyIgKGV4Y2VwdGlvbjogdHJ1ZSkKLVJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RF
dmFsVW5kZWZpbmVkCi1FdmFsdWF0ZTogdW5kZWZpbmVkIChleGNlcHRpb246IHVuZGVmaW5lZCkK
LVJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RXaXRoU3RyaW5naWZ5T3ZlcnJpZGRlbgotRXZh
bHVhdGU6ICJPSyIgKGV4Y2VwdGlvbjogdW5kZWZpbmVkKQotQWxsIHRlc3RzIGRvbmUuCi0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4dGVuc2lvbnMtZXZh
bC5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFs
Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyYTNhMTQ0YzlmZTFmZjU4YzM2
M2Q2YmYxZDI5MWUyZGJjNzg0NDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1l
dmFsLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08aHRtbD4KLTxoZWFkPgot
PHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Lmpz
Ij48L3NjcmlwdD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRl
bnNpb25zLXRlc3QuanMiPjwvc2NyaXB0PgotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
PgotCi13aW5kb3cuaW5zcGVjdGVkVmFsdWUgPSB7IHN0cjogImZvbyIsIG51bTogNDIgfTsKLQot
d2luZG93Lmxvb3AgPSB7IH07Ci13aW5kb3cubG9vcC5uZXh0ID0gd2luZG93Lmxvb3A7Ci0KLWZ1
bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbE9rKG5leHRUZXN0KQotewotICAgIHdlYkluc3BlY3Rv
ci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiaW5zcGVjdGVkVmFsdWUiLCBjYWxsYmFja0FuZE5leHRU
ZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Ci19Ci0KLWZ1bmN0aW9uIGV4dGVuc2lv
bl90ZXN0RXZhbFN0cmluZ2lmeWluZ0xvb3BGYWlsZWQobmV4dFRlc3QpCi17Ci0gICAgd2ViSW5z
cGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ3aW5kb3cubG9vcCIsIGNhbGxiYWNrQW5kTmV4
dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKLX0KLQotZnVuY3Rpb24gZXh0ZW5z
aW9uX3Rlc3RFdmFsRGVmaW5lc0dsb2JhbFN5bWJvbHMobmV4dFRlc3QpCi17Ci0gICAgd2ViSW5z
cGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJmdW5jdGlvbiBleHRlbnNpb25GdW5jKCkge30i
KTsKLSAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoImV4dGVuc2lvblZhciA9
IDQyOyIpOwotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiKHsgZnVuYzog
dHlwZW9mIHdpbmRvdy5leHRlbnNpb25GdW5jLCB2YXJpYWJsZTogd2luZG93LmV4dGVuc2lvblZh
ciB9KSIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsK
LX0KLQotZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsU3RhdGVtZW50KG5leHRUZXN0KQotewot
ICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidmFyIHggPSAzOyB3aGlsZSAo
LS14KTsgeCIsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3Qp
KTsKLX0KLQotZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsVW5kZWZpbmVkKG5leHRUZXN0KQot
ewotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidW5kZWZpbmVkIiwgY2Fs
bGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOwotfQotCi1mdW5j
dGlvbiBleHRlbnNpb25fdGVzdEV2YWxDb25zb2xlQVBJKG5leHRUZXN0KQotewotICAgIHdlYklu
c3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgidHlwZW9mIGluc3BlY3QiLCBjYWxsYmFja0Fu
ZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Ci19Ci0KLWZ1bmN0aW9uIGV4
dGVuc2lvbl90ZXN0V2l0aFN0cmluZ2lmeU92ZXJyaWRkZW4obmV4dFRlc3QpCi17Ci0gICAgd2Vi
SW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCIoSlNPTi5zdHJpbmdpZnkgPSBmdW5jdGlv
bigpIHsgdGhyb3cgJ29vcHMhIHlvdSBjYW4gbm90IHVzZSBKU09OLnN0cmluZ2lmeSc7IH0pLCAn
T0snIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOwot
fQotCi1mdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxUaHJvd3MobmV4dFRlc3QpCi17Ci0gICAg
d2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ0aHJvdygndGVzdEV4Y2VwdGlvblN0
cmluZycpIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkp
OwotfQotCi1mdW5jdGlvbiBleHRlbnNpb25fb25FdmFsKHZhbHVlLCBpc0V4Y2VwdGlvbikKLXsK
LSAgICBvdXRwdXQoIkV2YWx1YXRlOiAiICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgIiAoZXhj
ZXB0aW9uOiAiICsgaXNFeGNlcHRpb24gKyAiKSIpOwotfQotCi08L3NjcmlwdD4KLTwvaGVhZD4K
LTxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KLTxwPlRlc3RzIFdlYkluc3BlY3RvciBleHRlbnNp
b24gQVBJPC9wPgotPC9ib2R5PgotPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185286</attachid>
            <date>2013-01-29 12:32:29 -0800</date>
            <delta_ts>2013-02-11 12:08:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106811-20130129122915.patch</filename>
            <type>text/plain</type>
            <size>18499</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwOTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjE3YTM0ZjZlODhkMmNj
OWM5MTY5MjgzZDU4NDM5OTQxOWViZDhhOC4uNTY3ZTFlMjA3NGE3NmE0M2MwN2VkOGE1MDM0MTkz
OTM0YmNlYWU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAxLTI5ICBKb2hu
IEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVu
c2lvbiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBjYXNlIHRvIHRoZSBvcHRpb25zIHByb2Nlc3NpbmcgaW4gaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSwgbG9vaworICAgICAgICBmb3Igb3B0aW9uLmZyYW1lVVJMIDxzdHJpbmc+IGFu
ZC9vciBvcHRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dDogPHN0cmluZz4sIGZpbmQgdGhlCisg
ICAgICAgIG1hdGNoaW5nIEpTIGNvbnRleHQgaW4gdGhlIHJ1bnRpbWVNb2RlbCwgYW5kIGNhbGwg
ZXZhbHVhdGUoKSBpbiB0aGF0CisgICAgICAgIGNvbnRleHQ7IG9yIGVycm9yIGlmIHRoZSBjb250
ZXh0IGlzIG5vdCBmb3VuZC4gCisKKyAgICAgICAgRHJpdmUtYnk6IGNvcnJlY3QgdGhlIHJldHVy
biBwcm9jZXNzaW5nIG9mIF9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKCkKKyAgICAgICAgdG8g
cHJvcGFnYXRlIHRoZSBlcnJvciBiYWNrIHRvIHRoZSBleHRlbnNpb24uCisKKyAgICAgICAgVGVz
dDogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLmh0bWwKKworICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuX29uRXZhbHVhdGVPbkluc3BlY3RlZFBh
Z2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRl
KToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZS5mb3JBbGxG
cmFtZXMpOgorICAgICAgICAgICBBZGRlZCBhY2Nlc3MgdG8gX2ZyYW1lcyB2aWEgY2FsbGJhY2ss
IHRvIGF2b2lkIGV4cG9zaW5nIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAobm90IGFu
IGFycmF5IGJ1dCBhIGRpY3Rpb25hcnkgYnkgZnJhbWUuaWQpCisgICAgICAgICogaW5zcGVjdG9y
L2Zyb250LWVuZC9SdW50aW1lTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGlt
ZU1vZGVsLnByb3RvdHlwZS5jb250ZXh0TGlzdEJ5RnJhbWUpOgorICAgICAgICAgICBBZGRlZCBh
Y2Nlc3MgdG8gYSBmcmFtZSdzIGNvbnRleHRMaXN0LCByZW1vdmVkIGNvbnRleHRCeUZyYW1lQW5k
U2VjdXJpdHlPcmlnaW4oKQorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29u
dGV4dExpc3QucHJvdG90eXBlLm1haW5Xb3JsZENvbnRleHQpOgorICAgICAgICAgICBBZGRlZCBh
Y2Nlc3MgdG8gZnJhbWUncyBtYWluV29ybGRDb250ZXh0LCByYXRoZXIgdGhhbiBpbXBsaWNpdCBm
aXJzdCBjb250ZXh0LgorICAgICAgICAgICBOb3cgd2UgY2FuIGdvIGZyb20gUmVzb3VyY2VUcmVl
TW9kZWwgLT4gZnJhbWUgLT4gY29udGV4dExpc3QgdGhlbiBlaXRoZXIKKyAgICAgICAgICAgbWFp
bldvcmxkQ29udGV4dCgpIG9yIGNvbnRleHRCeVNlY3VyaXR5T3JpZ2luKCkgdG8gYWNjZXNzIGNv
bnRleHRzLgorCiAyMDEzLTAxLTI4ICBCZWFyIFRyYXZpcyAgPGJldHJhdmlzQGFkb2JlLmNvbT4K
IAogICAgICAgICBbQ1NTIEV4Y2x1c2lvbnNdIFJlZmFjdG9yIEV4Y2x1c2lvblNoYXBlSW5zaWRl
SW5mbyB0byBtb3JlIGdlbmVyYWwgRXhjbHVzaW9uU2hhcGVJbmZvCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0V4dGVuc2lvblNlcnZlci5qcyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzCmluZGV4IDc2
OGI4NjFhNmQ1NmU1MDczNmQwYWE4NmI2ZGFjNGY3MWYzMzE5MzIuLjQ4MmUxZmM0NGJmMDA5ZDI1
YjU1OTJhZDYyNzgxNGE3NmExMzQ5MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVyLmpzCkBAIC0zMjQsOCArMzI0LDggQEAg
V2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAg
ICAvKioKICAgICAgICAgICogQHBhcmFtIHs/UHJvdG9jb2wuRXJyb3J9IGVycm9yCi0gICAgICAg
ICAqIEBwYXJhbSB7UnVudGltZUFnZW50LlJlbW90ZU9iamVjdH0gcmVzdWx0UGF5bG9hZAotICAg
ICAgICAgKiBAcGFyYW0ge2Jvb2xlYW49fSB3YXNUaHJvd24KKyAgICAgICAgICogQHBhcmFtIHtS
dW50aW1lQWdlbnQuUmVtb3RlT2JqZWN0fSBbcmVzdWx0UGF5bG9hZF0KKyAgICAgICAgICogQHBh
cmFtIHtib29sZWFuPX0gW3dhc1Rocm93bl0KICAgICAgICAgICovCiAgICAgICAgIGZ1bmN0aW9u
IGNhbGxiYWNrKGVycm9yLCByZXN1bHRQYXlsb2FkLCB3YXNUaHJvd24pCiAgICAgICAgIHsKQEAg
LTM0Miw3ICszNDIsMTAgQEAgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUg
PSB7CiAgICAgICAKICAgICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoQ2FsbGJhY2sobWVzc2FnZS5y
ZXF1ZXN0SWQsIHBvcnQsIHJlc3VsdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRoaXMu
ZXZhbHVhdGUobWVzc2FnZS5leHByZXNzaW9uLCB0cnVlLCB0cnVlLCBtZXNzYWdlLmV2YWx1YXRl
T3B0aW9ucywgcG9ydC5fZXh0ZW5zaW9uT3JpZ2luLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKKyAg
ICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuZXZhbHVhdGUobWVzc2FnZS5leHByZXNzaW9uLCB0cnVl
LCB0cnVlLCBtZXNzYWdlLmV2YWx1YXRlT3B0aW9ucywgcG9ydC5fZXh0ZW5zaW9uT3JpZ2luLCBj
YWxsYmFjay5iaW5kKHRoaXMpKTsKKyAgICAgICAgaWYgKHN0YXR1cykgeworICAgICAgICAgICAg
Y2FsbGJhY2suY2FsbCh0aGlzLCAiRXh0ZW5zaW9uIHNlcnZlciBlcnJvcjogIiArIFN0cmluZy52
c3ByaW50ZihzdGF0dXMuZGVzY3JpcHRpb24sIHN0YXR1cy5kZXRhaWxzKSk7CisgICAgICAgIH0K
ICAgICB9LAogCiAgICAgX29uR2V0Q29uc29sZU1lc3NhZ2VzOiBmdW5jdGlvbigpCkBAIC03ODQs
MTMgKzc4Nyw0NiBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9IHsK
ICAgICBldmFsdWF0ZTogZnVuY3Rpb24oZXhwcmVzc2lvbiwgZXhwb3NlQ29tbWFuZExpbmVBUEks
IHJldHVybkJ5VmFsdWUsIG9wdGlvbnMsIHNlY3VyaXR5T3JpZ2luLCBjYWxsYmFjaykgCiAgICAg
ewogICAgICAgICB2YXIgY29udGV4dElkOwotICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09
ICJvYmplY3QiICYmIG9wdGlvbnNbInVzZUNvbnRlbnRTY3JpcHRDb250ZXh0Il0pIHsKLSAgICAg
ICAgICAgIHZhciBtYWluRnJhbWUgPSBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFp
bkZyYW1lOwotICAgICAgICAgICAgaWYgKCFtYWluRnJhbWUpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxFRCgibWFpbiBmcmFtZSBub3QgYXZhaWxhYmxlIHlldCIp
OwotICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVsLmNv
bnRleHRCeUZyYW1lQW5kU2VjdXJpdHlPcmlnaW4obWFpbkZyYW1lLCBzZWN1cml0eU9yaWdpbik7
Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X3N0YXR1cy5FX05PVEZPVU5EKHNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgaWYgKHR5cGVvZiBv
cHRpb25zID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlv
biByZXNvbHZlVVJMVG9GcmFtZSh1cmwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
dmFyIGZvdW5kOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2Rl
bC5mb3JBbGxGcmFtZXMoZnVuY3Rpb24oZnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91
bmQgPSAoZnJhbWUudXJsID09PSB1cmwpID8gZnJhbWUgOiBudWxsOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgdmFyIGZyYW1lID0gb3B0aW9ucy5mcmFtZVVSTCA/IHJlc29sdmVVUkxUb0ZyYW1l
KG9wdGlvbnMuZnJhbWVVUkwpIDogV2ViSW5zcGVjdG9yLnJlc291cmNlVHJlZU1vZGVsLm1haW5G
cmFtZTsKKyAgICAgICAgICAgIGlmICghZnJhbWUpIHsKKyAgICAgICAgICAgICAgICBpZiAob3B0
aW9ucy5mcmFtZVVSTCkgCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiZXZhbHVh
dGU6IHRoZXJlIGlzIG5vIGZyYW1lIHdpdGggVVJMICIgKyBvcHRpb25zLmZyYW1lVVJMKTsKKyAg
ICAgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImV2
YWx1YXRlOiB0aGUgbWFpbiBmcmFtZSBpcyBub3QgeWV0IGF2YWlsYWJsZSIpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChvcHRpb25zLmZyYW1lVVJMIHx8
ICI8dG9wPiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY29udGV4dFNlY3Vy
aXR5T3JpZ2luOworICAgICAgICAgICAgaWYgKG9wdGlvbnNbInVzZUNvbnRlbnRTY3JpcHRDb250
ZXh0Il0gKSAKKyAgICAgICAgICAgICAgICBjb250ZXh0U2VjdXJpdHlPcmlnaW4gPSBzZWN1cml0
eU9yaWdpbjsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9wdGlvbnMuc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCAmJiBmcmFtZS51cmwuaW5kZXhPZihvcHRpb25zLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQp
ICE9PSAwKSAKKyAgICAgICAgICAgICAgICBjb250ZXh0U2VjdXJpdHlPcmlnaW4gPSBvcHRpb25z
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CisKKyAgICAgICAgICAgIHZhciBmcmFtZUNvbnRleHRM
aXN0ID0gV2ViSW5zcGVjdG9yLnJ1bnRpbWVNb2RlbC5jb250ZXh0TGlzdEJ5RnJhbWUoZnJhbWUp
OworICAgICAgICAgICAgdmFyIGNvbnRleHQ7IAorICAgICAgICAgICAgaWYgKGNvbnRleHRTZWN1
cml0eU9yaWdpbiApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0TGlz
dC5jb250ZXh0QnlTZWN1cml0eU9yaWdpbihjb250ZXh0U2VjdXJpdHlPcmlnaW4pOworICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndh
cm4oIlRoZSBKUyBjb250ZXh0ICIgKyBjb250ZXh0U2VjdXJpdHlPcmlnaW4gKyAiIHdhcyBub3Qg
Zm91bmQgaW4gdGhlIGZyYW1lICIgKyBmcmFtZS51cmwpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChjb250ZXh0U2VjdXJpdHlPcmlnaW4pCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250
ZXh0ID0gZnJhbWVDb250ZXh0TGlzdC5tYWluV29ybGRDb250ZXh0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFjb250ZXh0KSAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1
cy5FX0ZBSUxFRChmcmFtZS51cmwgKyAiIGhhcyBubyBleGVjdXRpb24gY29udGV4dCIpOworICAg
ICAgICAgICAgfQorCiAgICAgICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOwogICAgICAg
ICB9CiAgICAgICAgIFJ1bnRpbWVBZ2VudC5ldmFsdWF0ZShleHByZXNzaW9uLCAiZXh0ZW5zaW9u
IiwgZXhwb3NlQ29tbWFuZExpbmVBUEksIHRydWUsIGNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwg
ZmFsc2UsIGNhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvUmVzb3VyY2VUcmVlTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzCmluZGV4IDBhODc2ZWJmYzNiYmQzZmM5NGJm
MTFhNDEwZThhM2M5NWJkMzU5N2MuLmMwZmEzZDQ0MjE0NGIxZjBlMTk0NDI5NjU1Zjc1ZGRjNTFk
ODU0ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVz
b3VyY2VUcmVlTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SZXNvdXJjZVRyZWVNb2RlbC5qcwpAQCAtMjM0LDYgKzIzNCwxNiBAQCBXZWJJbnNwZWN0b3Iu
UmVzb3VyY2VUcmVlTW9kZWwucHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAg
KiBAcGFyYW0ge2Z1bmN0aW9uKFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZSl9CisgICAg
ICovCisgICAgIGZvckFsbEZyYW1lczogZnVuY3Rpb24oY2FsbGJhY2spIAorICAgICB7CisgICAg
ICAgIE9iamVjdC5rZXlzKHRoaXMuX2ZyYW1lcykuZm9yRWFjaChmdW5jdGlvbihmcmFtZUlkKXsK
KyAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX2ZyYW1lc1tmcmFtZUlkXSk7CisgICAgICAgIH0u
YmluZCh0aGlzKSk7CisgICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3Bl
Y3Rvci5FdmVudH0gZXZlbnQKICAgICAgKi8KICAgICBfY29uc29sZU1lc3NhZ2VBZGRlZDogZnVu
Y3Rpb24oZXZlbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQt
ZW5kL1J1bnRpbWVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
UnVudGltZU1vZGVsLmpzCmluZGV4IGI3YmE3ODg2ODZlMDg2ODY3Y2U0MTBlNGEwYjZjYTA1ODE2
ZDI2YmQuLjBhZGIxNjY5ODZjMjgwZDE4MWRmNjU4NGUwMGQ0MmQ0NjhhYTc2NGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzCkBA
IC03NCwxMiArNzQsMTEgQEAgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5wcm90b3R5cGUgPSB7
CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFt
ZX0gZnJhbWUKLSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJpdHlPcmlnaW4KKyAgICAgKiBA
cmV0dXJuIHtXZWJJbnNwZWN0b3IuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdH0KICAgICAgKi8K
LSAgICBjb250ZXh0QnlGcmFtZUFuZFNlY3VyaXR5T3JpZ2luOiBmdW5jdGlvbihmcmFtZSwgc2Vj
dXJpdHlPcmlnaW4pCisgICAgY29udGV4dExpc3RCeUZyYW1lOiBmdW5jdGlvbihmcmFtZSkKICAg
ICB7Ci0gICAgICAgIHZhciBmcmFtZUNvbnRleHQgPSB0aGlzLl9mcmFtZUlkVG9Db250ZXh0TGlz
dFtmcmFtZS5pZF07Ci0gICAgICAgIHJldHVybiBmcmFtZUNvbnRleHQgJiYgZnJhbWVDb250ZXh0
LmNvbnRleHRCeVNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgcmV0dXJu
IHRoaXMuX2ZyYW1lSWRUb0NvbnRleHRMaXN0W2ZyYW1lLmlkXTsKICAgICB9LAogCiAgICAgX2Zy
YW1lQWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNDEyLDYgKzQxMSwxMSBAQCBXZWJJbnNwZWN0
b3IuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdC5wcm90b3R5cGUgPQogICAgICAgICByZXR1cm4g
dGhpcy5fZXhlY3V0aW9uQ29udGV4dHM7CiAgICAgfSwKIAorICAgIG1haW5Xb3JsZENvbnRleHQ6
IGZ1bmN0aW9uKCkgCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4
dHNbMF07CisgICAgfSwKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN1cml0
eU9yaWdpbgogICAgICAqLwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI1OWQxZmY5NjM4NTA2MGU3YzI2MGM1YTdjOGM5MDE2
YjAyZmU4NTQuLmEzNjZmNGU1Mjk2YjQyZmRhMzJiNTgyNzk1NTlhYTE4Y2YzN2JmYjAgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMS0yOSAgSm9obiBKLiBCYXJ0b24gIDxqb2huamJhcnRv
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGlmcmFtZSBvcHRp
b24gdG8gaW5zcGVjdGVkV2luZG93LmV2YWwoKSBleHRlbnNpb24gQVBJCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY4MTEKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyBhZGRlZCBmb3IgaWZyYW1l
IG9wdGlvbiB0byBldmFsKCksIGFuZCBtb3ZlZCB0ZXN0cyB0byBodHRwLyB0byBnb3QgY3Jvc3Mt
ZnJhbWUgdGVzdGluZworCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy1ldmFsLWV4cGVjdGVkLnR4dDogUmVuYW1lZCBmcm9tIExheW91dFRlc3RzL2luc3BlY3Rvci9l
eHRlbnNpb25zL2V4dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQuCisgICAgICAgICogaHR0cC90
ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLmh0bWw6IFJlbmFtZWQgZnJvbSBMYXlvdXRU
ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2YWwuaHRtbC4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0
bWw6IEFkZGVkLgorCiAyMDEzLTAxLTI4ICBab2x0YW4gQXJ2YWkgIDx6YXJ2YWlAaW5mLnUtc3pl
Z2VkLmh1PgogCiAgICAgICAgIFtRdF0gVW5yZXZpZXdlZCBnYXJkZW5pbmcuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWV2YWwtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1ldmFs
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDBkNTI2Mzc5Y2FmZDU5MGM4MGM4MjdkZGRiNzYy
NGNhYzNmYWIzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNw
ZWN0b3IvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI4IEBACitUZXN0
cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9uIEFQSQorCisKK1N0YXJ0ZWQgZXh0ZW5zaW9uLgorUnVu
bmluZyB0ZXN0cy4uLgorUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxDb25zb2xlQVBJ
CitFdmFsdWF0ZTogImZ1bmN0aW9uIiAoZXhjZXB0aW9uOiB1bmRlZmluZWQpCitSVU5OSU5HIFRF
U1Q6IGV4dGVuc2lvbl90ZXN0RXZhbERlZmluZXNHbG9iYWxTeW1ib2xzCitFdmFsdWF0ZTogeyJm
dW5jIjoiZnVuY3Rpb24iLCJ2YXJpYWJsZSI6NDJ9IChleGNlcHRpb246IHVuZGVmaW5lZCkKK1JV
Tk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsSW5JRnJhbWUKK2xvZzogRXh0ZW5zaW9uIHNl
cnZlciBlcnJvcjogT2JqZWN0IG5vdCBmb3VuZDogYm9ndXMKK0V2YWx1YXRlOiAiL2luc3BlY3Rv
ci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWwiIChleGNlcHRpb246IHVuZGVm
aW5lZCkKK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsSW5JRnJhbWVCYWRPcHRpb24K
K0V2YWx1YXRlOiAiRXh0ZW5zaW9uIHNlcnZlciBlcnJvcjogT2JqZWN0IG5vdCBmb3VuZDogYm9n
dXMiIChleGNlcHRpb246IHRydWUpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbE9r
CitFdmFsdWF0ZTogeyJzdHIiOiJmb28iLCJudW0iOjQyfSAoZXhjZXB0aW9uOiB1bmRlZmluZWQp
CitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbFN0YXRlbWVudAorRXZhbHVhdGU6IDAg
KGV4Y2VwdGlvbjogdW5kZWZpbmVkKQorUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxT
dHJpbmdpZnlpbmdMb29wRmFpbGVkCitFdmFsdWF0ZTogIk9iamVjdCBoYXMgdG9vIGxvbmcgcmVm
ZXJlbmNlIGNoYWluKG11c3Qgbm90IGJlIGxvbmdlciB0aGFuIDEwMDApIiAoZXhjZXB0aW9uOiB0
cnVlKQorUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxUaHJvd3MKK0V2YWx1YXRlOiAi
dGVzdEV4Y2VwdGlvblN0cmluZyIgKGV4Y2VwdGlvbjogdHJ1ZSkKK1JVTk5JTkcgVEVTVDogZXh0
ZW5zaW9uX3Rlc3RFdmFsVW5kZWZpbmVkCitFdmFsdWF0ZTogdW5kZWZpbmVkIChleGNlcHRpb246
IHVuZGVmaW5lZCkKK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RXaXRoU3RyaW5naWZ5T3Zl
cnJpZGRlbgorRXZhbHVhdGU6ICJPSyIgKGV4Y2VwdGlvbjogdW5kZWZpbmVkKQorQWxsIHRlc3Rz
IGRvbmUuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMtZXZhbC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0
ZW5zaW9ucy1ldmFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRjNTllYzhlNjU0ZjZjZjkwYjQxMzRkMzli
OTQ2NThlZmEyNmExZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL2V4dGVuc2lvbnMtZXZhbC5odG1sCkBAIC0wLDAgKzEsODggQEAKKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9ImV4dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQv
amF2YXNjcmlwdCI+CisKK3dpbmRvdy5pbnNwZWN0ZWRWYWx1ZSA9IHsgc3RyOiAiZm9vIiwgbnVt
OiA0MiB9OworCit3aW5kb3cubG9vcCA9IHsgfTsKK3dpbmRvdy5sb29wLm5leHQgPSB3aW5kb3cu
bG9vcDsKKworZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsT2sobmV4dFRlc3QpCit7CisgICAg
d2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJpbnNwZWN0ZWRWYWx1ZSIsIGNhbGxi
YWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKK30KKworZnVuY3Rp
b24gZXh0ZW5zaW9uX3Rlc3RFdmFsU3RyaW5naWZ5aW5nTG9vcEZhaWxlZChuZXh0VGVzdCkKK3sK
KyAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoIndpbmRvdy5sb29wIiwgY2Fs
bGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOworfQorCitmdW5j
dGlvbiBleHRlbnNpb25fdGVzdEV2YWxEZWZpbmVzR2xvYmFsU3ltYm9scyhuZXh0VGVzdCkKK3sK
KyAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoImZ1bmN0aW9uIGV4dGVuc2lv
bkZ1bmMoKSB7fSIpOworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZXh0
ZW5zaW9uVmFyID0gNDI7Iik7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFs
KCIoeyBmdW5jOiB0eXBlb2Ygd2luZG93LmV4dGVuc2lvbkZ1bmMsIHZhcmlhYmxlOiB3aW5kb3cu
ZXh0ZW5zaW9uVmFyIH0pIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBu
ZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxTdGF0ZW1lbnQobmV4
dFRlc3QpCit7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ2YXIgeCA9
IDM7IHdoaWxlICgtLXgpOyB4IiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFs
LCBuZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxVbmRlZmluZWQo
bmV4dFRlc3QpCit7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ1bmRl
ZmluZWQiLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7
Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbENvbnNvbGVBUEkobmV4dFRlc3QpCit7
CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ0eXBlb2YgaW5zcGVjdCIs
IGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKK30KKwor
ZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RXaXRoU3RyaW5naWZ5T3ZlcnJpZGRlbihuZXh0VGVzdCkK
K3sKKyAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoIihKU09OLnN0cmluZ2lm
eSA9IGZ1bmN0aW9uKCkgeyB0aHJvdyAnb29wcyEgeW91IGNhbiBub3QgdXNlIEpTT04uc3RyaW5n
aWZ5JzsgfSksICdPSyciLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5l
eHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbFRocm93cyhuZXh0VGVz
dCkKK3sKKyAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoInRocm93KCd0ZXN0
RXhjZXB0aW9uU3RyaW5nJykiLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWws
IG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbEluSUZyYW1lKG5l
eHRUZXN0KSB7CisgICAgdmFyIG9wdGlvbnMgPSBleHRlbnNpb25fb3B0aW9ucygpOworICAgIHZh
ciBsb2MgPSAid2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIjsKKyAgICB3ZWJJbnNwZWN0b3IuaW5z
cGVjdGVkV2luZG93LmV2YWwobG9jLCBvcHRpb25zLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVu
c2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZh
bEluSUZyYW1lQmFkT3B0aW9uKG5leHRUZXN0KSB7CisgICAgdmFyIG9wdGlvbnMgPSBleHRlbnNp
b25fb3B0aW9ucygpOworICAgIG9wdGlvbnMuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9ICJib2d1
cyI7CisgICAgdmFyIGxvYyA9ICJ3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUiOworICAgIHdlYklu
c3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbChsb2MsIG9wdGlvbnMsIGNhbGxiYWNrQW5kTmV4
dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0ZW5z
aW9uX29uRXZhbCh2YWx1ZSwgaXNFeGNlcHRpb24pCit7CisgICAgb3V0cHV0KCJFdmFsdWF0ZTog
IiArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICIgKGV4Y2VwdGlvbjogIiArIGlzRXhjZXB0aW9u
ICsgIikiKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9uX29wdGlvbnMoKSB7CisgICAgdmFyIHVy
bCA9ICdodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25z
LWZyYW1lLWV2YWwuaHRtbCc7CisgICAgdmFyIHNlZ21lbnRzID0gdXJsLnNwbGl0KCcvJyk7IC8v
IGh0dHA6Ly9hLmIuYzp4eHgvcGF0aAorICAgIHZhciBvcmlnaW4gPSBzZWdtZW50c1swXSArICcv
LycgKyBzZWdtZW50c1syXTsKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgZnJhbWVVUkw6
IHVybCwKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dDogb3JpZ2luCisgICAgfTsKKyAg
ICByZXR1cm4gb3B0aW9uczsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0KCkiPgorPHA+VGVzdHMgV2ViSW5zcGVjdG9yIGV4dGVuc2lvbiBBUEk8L3A+Cis8aWZy
YW1lIHNyYz0icmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIj48L2lmcmFtZT4K
KzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lMDMyNzFjMTdkYmZjYmU3OWEzMzY5ZmI1NzdiYjRjNTQ2NjBiMzFlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sCkBAIC0wLDAgKzEsNiBAQAorPGh0bWw+Cis8
c2NyaXB0PgorLy8gU29tZSBKUyB0byBjcmVhdGUgYSBjb250ZXh0Cit3aW5kb3cuaUFtQW5JRnJh
bWUgPSB0cnVlOworPC9zY3JpcHQ+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9u
cy1ldmFsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zL2V4
dGVuc2lvbnMtZXZhbC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDA0Mzc4YjE4ODBiYzcxYmYyNzJiMjcyMDFiYWJkMzMwMjRmYmIxODguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMvZXh0ZW5zaW9ucy1ldmFsLWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0x
LDIyICswLDAgQEAKLVRlc3RzIFdlYkluc3BlY3RvciBleHRlbnNpb24gQVBJCi0KLVN0YXJ0ZWQg
ZXh0ZW5zaW9uLgotUnVubmluZyB0ZXN0cy4uLgotUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVz
dEV2YWxDb25zb2xlQVBJCi1FdmFsdWF0ZTogImZ1bmN0aW9uIiAoZXhjZXB0aW9uOiB1bmRlZmlu
ZWQpCi1SVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbERlZmluZXNHbG9iYWxTeW1ib2xz
Ci1FdmFsdWF0ZTogeyJmdW5jIjoiZnVuY3Rpb24iLCJ2YXJpYWJsZSI6NDJ9IChleGNlcHRpb246
IHVuZGVmaW5lZCkKLVJVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsT2sKLUV2YWx1YXRl
OiB7InN0ciI6ImZvbyIsIm51bSI6NDJ9IChleGNlcHRpb246IHVuZGVmaW5lZCkKLVJVTk5JTkcg
VEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsU3RhdGVtZW50Ci1FdmFsdWF0ZTogMCAoZXhjZXB0aW9u
OiB1bmRlZmluZWQpCi1SVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbFN0cmluZ2lmeWlu
Z0xvb3BGYWlsZWQKLUV2YWx1YXRlOiAiT2JqZWN0IGhhcyB0b28gbG9uZyByZWZlcmVuY2UgY2hh
aW4obXVzdCBub3QgYmUgbG9uZ2VyIHRoYW4gMTAwMCkiIChleGNlcHRpb246IHRydWUpCi1SVU5O
SU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbFRocm93cwotRXZhbHVhdGU6ICJ0ZXN0RXhjZXB0
aW9uU3RyaW5nIiAoZXhjZXB0aW9uOiB0cnVlKQotUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVz
dEV2YWxVbmRlZmluZWQKLUV2YWx1YXRlOiB1bmRlZmluZWQgKGV4Y2VwdGlvbjogdW5kZWZpbmVk
KQotUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdFdpdGhTdHJpbmdpZnlPdmVycmlkZGVuCi1F
dmFsdWF0ZTogIk9LIiAoZXhjZXB0aW9uOiB1bmRlZmluZWQpCi1BbGwgdGVzdHMgZG9uZS4KLQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMvZXh0ZW5zaW9ucy1l
dmFsLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25zLWV2
YWwuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJhM2ExNDRjOWZlMWZmNThj
MzYzZDZiZjFkMjkxZTJkYmM3ODQ0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy9leHRlbnNpb25z
LWV2YWwuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTxodG1sPgotPGhlYWQ+
Ci08c2NyaXB0IHNyYz0iLi4vLi4vaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3Qu
anMiPjwvc2NyaXB0PgotPHNjcmlwdCBzcmM9Ii4uLy4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4
dGVuc2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+Ci0KLXdpbmRvdy5pbnNwZWN0ZWRWYWx1ZSA9IHsgc3RyOiAiZm9vIiwgbnVtOiA0MiB9Owot
Ci13aW5kb3cubG9vcCA9IHsgfTsKLXdpbmRvdy5sb29wLm5leHQgPSB3aW5kb3cubG9vcDsKLQot
ZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RFdmFsT2sobmV4dFRlc3QpCi17Ci0gICAgd2ViSW5zcGVj
dG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJpbnNwZWN0ZWRWYWx1ZSIsIGNhbGxiYWNrQW5kTmV4
dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKLX0KLQotZnVuY3Rpb24gZXh0ZW5z
aW9uX3Rlc3RFdmFsU3RyaW5naWZ5aW5nTG9vcEZhaWxlZChuZXh0VGVzdCkKLXsKLSAgICB3ZWJJ
bnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoIndpbmRvdy5sb29wIiwgY2FsbGJhY2tBbmRO
ZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkpOwotfQotCi1mdW5jdGlvbiBleHRl
bnNpb25fdGVzdEV2YWxEZWZpbmVzR2xvYmFsU3ltYm9scyhuZXh0VGVzdCkKLXsKLSAgICB3ZWJJ
bnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoImZ1bmN0aW9uIGV4dGVuc2lvbkZ1bmMoKSB7
fSIpOwotICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbCgiZXh0ZW5zaW9uVmFy
ID0gNDI7Iik7Ci0gICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCIoeyBmdW5j
OiB0eXBlb2Ygd2luZG93LmV4dGVuc2lvbkZ1bmMsIHZhcmlhYmxlOiB3aW5kb3cuZXh0ZW5zaW9u
VmFyIH0pIiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVzdCkp
OwotfQotCi1mdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxTdGF0ZW1lbnQobmV4dFRlc3QpCi17
Ci0gICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ2YXIgeCA9IDM7IHdoaWxl
ICgtLXgpOyB4IiwgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBuZXh0VGVz
dCkpOwotfQotCi1mdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxVbmRlZmluZWQobmV4dFRlc3Qp
Ci17Ci0gICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ1bmRlZmluZWQiLCBj
YWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Ci19Ci0KLWZ1
bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbENvbnNvbGVBUEkobmV4dFRlc3QpCi17Ci0gICAgd2Vi
SW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5ldmFsKCJ0eXBlb2YgaW5zcGVjdCIsIGNhbGxiYWNr
QW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKLX0KLQotZnVuY3Rpb24g
ZXh0ZW5zaW9uX3Rlc3RXaXRoU3RyaW5naWZ5T3ZlcnJpZGRlbihuZXh0VGVzdCkKLXsKLSAgICB3
ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoIihKU09OLnN0cmluZ2lmeSA9IGZ1bmN0
aW9uKCkgeyB0aHJvdyAnb29wcyEgeW91IGNhbiBub3QgdXNlIEpTT04uc3RyaW5naWZ5JzsgfSks
ICdPSyciLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7
Ci19Ci0KLWZ1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbFRocm93cyhuZXh0VGVzdCkKLXsKLSAg
ICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwoInRocm93KCd0ZXN0RXhjZXB0aW9u
U3RyaW5nJykiLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0
KSk7Ci19Ci0KLWZ1bmN0aW9uIGV4dGVuc2lvbl9vbkV2YWwodmFsdWUsIGlzRXhjZXB0aW9uKQot
ewotICAgIG91dHB1dCgiRXZhbHVhdGU6ICIgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAiIChl
eGNlcHRpb246ICIgKyBpc0V4Y2VwdGlvbiArICIpIik7Ci19Ci0KLTwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHkgb25sb2FkPSJydW5UZXN0KCkiPgotPHA+VGVzdHMgV2ViSW5zcGVjdG9yIGV4dGVu
c2lvbiBBUEk8L3A+Ci08L2JvZHk+Ci08L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187634</attachid>
            <date>2013-02-11 12:08:48 -0800</date>
            <delta_ts>2013-02-13 09:44:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106811-20130211120519.patch</filename>
            <type>text/plain</type>
            <size>11804</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZiMmEzOGY5NTAxYzc1
ZDA3YWRiYTUwOTExYjY1ZTM0MGM0M2JkYS4uNGIwNjRjMTUwMTJhMTY2YTg1MzMzOTE4MDBmMGQx
YmNiMTMyNWYxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEzLTAyLTExICBKb2hu
IEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVu
c2lvbiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBjYXNlIHRvIHRoZSBvcHRpb25zIHByb2Nlc3NpbmcgaW4gaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSwgbG9vaworICAgICAgICBmb3Igb3B0aW9uLmZyYW1lVVJMIDxzdHJpbmc+IGFu
ZC9vciBvcHRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dDogPHN0cmluZz4sIGZpbmQgdGhlCisg
ICAgICAgIG1hdGNoaW5nIEpTIGNvbnRleHQgaW4gdGhlIHJ1bnRpbWVNb2RlbCwgYW5kIGNhbGwg
ZXZhbHVhdGUoKSBpbiB0aGF0CisgICAgICAgIGNvbnRleHQ7IG9yIGVycm9yIGlmIHRoZSBjb250
ZXh0IGlzIG5vdCBmb3VuZC4gCisKKyAgICAgICAgRHJpdmUtYnk6IGFkZCB2YXIgcmVzdWx0IHRv
IHNvIEV4dGVuc2lvblNlcnZlci5qcyBjb21waWxlcyBjbGVhbgorCisgICAgICAgIFRlc3Q6IGh0
dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwuaHRtbAorCisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS5fb25FdmFsdWF0ZU9uSW5zcGVjdGVk
UGFnZSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS4p
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuZXZhbHVh
dGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9kZWwuanM6
CisgICAgICAgIChXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwucHJvdG90eXBlLmZyYW1l
cyk6CisgICAgICAgICAgIEFkZGVkIHJlYWQgYWNjZXNzIHRvIF9mcmFtZXMKKyAgICAgICAqIGlu
c3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJ1bnRpbWVNb2RlbC5wcm90b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAgICAgICAgICAg
QWRkZWQgYWNjZXNzIHRvIGEgZnJhbWUncyBjb250ZXh0TGlzdCwgcmVtb3ZlZCBjb250ZXh0QnlG
cmFtZUFuZFNlY3VyaXR5T3JpZ2luKCkKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1
dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5tYWluV29ybGRDb250ZXh0KToKKyAgICAgICAgICAg
QWRkZWQgYWNjZXNzIHRvIGZyYW1lJ3MgbWFpbldvcmxkQ29udGV4dCwgcmF0aGVyIHRoYW4gaW1w
bGljaXQgZmlyc3QgY29udGV4dC4KKyAgICAgICAgICAgTm93IHdlIGNhbiBnbyBmcm9tIFJlc291
cmNlVHJlZU1vZGVsIC0+IGZyYW1lIC0+IGNvbnRleHRMaXN0IHRoZW4gZWl0aGVyCisgICAgICAg
ICAgIG1haW5Xb3JsZENvbnRleHQoKSBvciBjb250ZXh0QnlTZWN1cml0eU9yaWdpbigpIHRvIGFj
Y2VzcyBjb250ZXh0cy4KKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9u
U2VydmVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5
cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLl9v
bkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNp
b25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
UnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5wcm90
b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUV4
ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5tYWluV29ybGRDb250ZXh0KToKKwogMjAxMy0w
Mi0wMSAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdl
YiBJbnNwZWN0b3I6IFtFeHRlbnNpb24gQVBJXSBhZGp1c3QgaW5zcGVjdGVkV2luZG93LmV2YWwo
KSBjYWxsYmFjayBwYXJhbWV0ZXJzIHRvIGV4cG9zZSBub24tZXhjZXB0aW9uYWwgZXJyb3IKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2Vy
dmVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2
ZXIuanMKaW5kZXggNTgwZWI2NWE5ODVjMjgwMTNmNzgxNjVhYTVmZDQ1ODkwZDQyMGQ4ZS4uM2Iz
NjFmM2JmYjAzZGExNzVlMGNhZGZjYjczZWZlYzNlNzExODZjZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanMKQEAgLTMy
OSw2ICszMjksNyBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9IHsK
ICAgICAgICAgICovCiAgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKGVycm9yLCByZXN1bHRQYXls
b2FkLCB3YXNUaHJvd24pCiAgICAgICAgIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQ7CiAgICAg
ICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5fc3RhdHVz
LkVfUFJPVE9DT0xFUlJPUihlcnJvci50b1N0cmluZygpKTsKICAgICAgICAgICAgIGVsc2UgaWYg
KHdhc1Rocm93bikKQEAgLTc4MCwxMyArNzgxLDQ3IEBAIFdlYkluc3BlY3Rvci5FeHRlbnNpb25T
ZXJ2ZXIucHJvdG90eXBlID0gewogICAgIGV2YWx1YXRlOiBmdW5jdGlvbihleHByZXNzaW9uLCBl
eHBvc2VDb21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgb3B0aW9ucywgc2VjdXJpdHlPcmln
aW4sIGNhbGxiYWNrKSAKICAgICB7CiAgICAgICAgIHZhciBjb250ZXh0SWQ7Ci0gICAgICAgIGlm
ICh0eXBlb2Ygb3B0aW9ucyA9PT0gIm9iamVjdCIgJiYgb3B0aW9uc1sidXNlQ29udGVudFNjcmlw
dENvbnRleHQiXSkgewotICAgICAgICAgICAgdmFyIG1haW5GcmFtZSA9IFdlYkluc3BlY3Rvci5y
ZXNvdXJjZVRyZWVNb2RlbC5tYWluRnJhbWU7Ci0gICAgICAgICAgICBpZiAoIW1haW5GcmFtZSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfRkFJTEVEKCJtYWluIGZyYW1l
IG5vdCBhdmFpbGFibGUgeWV0Iik7Ci0gICAgICAgICAgICB2YXIgY29udGV4dCA9IFdlYkluc3Bl
Y3Rvci5ydW50aW1lTW9kZWwuY29udGV4dEJ5RnJhbWVBbmRTZWN1cml0eU9yaWdpbihtYWluRnJh
bWUsIHNlY3VyaXR5T3JpZ2luKTsKLSAgICAgICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfTk9URk9VTkQoc2VjdXJpdHlPcmlnaW4pOwor
ICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICJvYmplY3QiKSB7CisKKyAgICAgICAgICAg
IGZ1bmN0aW9uIHJlc29sdmVVUkxUb0ZyYW1lKHVybCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICB2YXIgZm91bmQ7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnJlc291cmNl
VHJlZU1vZGVsLmZyYW1lcygpLnNvbWUoZnVuY3Rpb24oZnJhbWUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZm91bmQgPSAoZnJhbWUudXJsID09PSB1cmwpID8gZnJhbWUgOiBudWxsOworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIg
ZnJhbWUgPSBvcHRpb25zLmZyYW1lVVJMID8gcmVzb2x2ZVVSTFRvRnJhbWUob3B0aW9ucy5mcmFt
ZVVSTCkgOiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZyYW1lOworICAgICAg
ICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZyYW1lVVJM
KQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImV2YWx1YXRlOiB0aGVyZSBpcyBu
byBmcmFtZSB3aXRoIFVSTCAiICsgb3B0aW9ucy5mcmFtZVVSTCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImV2YWx1YXRlOiB0aGUgbWFp
biBmcmFtZSBpcyBub3QgeWV0IGF2YWlsYWJsZSIpOworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzLl9zdGF0dXMuRV9OT1RGT1VORChvcHRpb25zLmZyYW1lVVJMIHx8ICI8dG9wPiIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY29udGV4dFNlY3VyaXR5T3JpZ2luOworICAg
ICAgICAgICAgaWYgKG9wdGlvbnNbInVzZUNvbnRlbnRTY3JpcHRDb250ZXh0Il0gKQorICAgICAg
ICAgICAgICAgIGNvbnRleHRTZWN1cml0eU9yaWdpbiA9IHNlY3VyaXR5T3JpZ2luOworICAgICAg
ICAgICAgZWxzZSBpZiAob3B0aW9ucy5zY3JpcHRFeGVjdXRpb25Db250ZXh0ICYmIGZyYW1lLnVy
bC5pbmRleE9mKG9wdGlvbnMuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCkgIT09IDApCisgICAgICAg
ICAgICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gb3B0aW9ucy5zY3JpcHRFeGVjdXRpb25D
b250ZXh0OworCisgICAgICAgICAgICB2YXIgZnJhbWVDb250ZXh0TGlzdCA9IFdlYkluc3BlY3Rv
ci5ydW50aW1lTW9kZWwuY29udGV4dExpc3RCeUZyYW1lKGZyYW1lKTsKKyAgICAgICAgICAgIHZh
ciBjb250ZXh0OyAKKyAgICAgICAgICAgIGlmIChjb250ZXh0U2VjdXJpdHlPcmlnaW4pIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0TGlzdC5jb250ZXh0QnlTZWN1cml0
eU9yaWdpbihjb250ZXh0U2VjdXJpdHlPcmlnaW4pOworICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIlRoZSBKUyBjb250ZXh0
ICIgKyBjb250ZXh0U2VjdXJpdHlPcmlnaW4gKyAiIHdhcyBub3QgZm91bmQgaW4gdGhlIGZyYW1l
ICIgKyBmcmFtZS51cmwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMu
RV9OT1RGT1VORChjb250ZXh0U2VjdXJpdHlPcmlnaW4pCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0
TGlzdC5tYWluV29ybGRDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0KSAK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxFRChmcmFtZS51
cmwgKyAiIGhhcyBubyBleGVjdXRpb24gY29udGV4dCIpOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOwogICAgICAgICB9CiAgICAgICAgIFJ1bnRp
bWVBZ2VudC5ldmFsdWF0ZShleHByZXNzaW9uLCAiZXh0ZW5zaW9uIiwgZXhwb3NlQ29tbWFuZExp
bmVBUEksIHRydWUsIGNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZmFsc2UsIGNhbGxiYWNrKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VU
cmVlTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNl
VHJlZU1vZGVsLmpzCmluZGV4IGQzZTYxZWJlZjM4ZDI3MDZkZDFkZWZkNGEzYmFjNzU0ZmJiNzUz
NTguLjRjOGY3OTk2ODA2ODkxOTk5NDg5Zjg1MzM2ODA1NWI1NWJkYzY1MmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9kZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2Rl
bC5qcwpAQCAtMjM0LDYgKzIzNCwxOCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwu
cHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48
V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUZyYW1lPn0KKyAgICAgKi8KKyAgICAgZnJhbWVzOiBm
dW5jdGlvbigpIAorICAgICB7CisgICAgICAgIHZhciBmcmFtZXMgPSBbXTsKKyAgICAgICAgT2Jq
ZWN0LmtleXModGhpcy5fZnJhbWVzKS5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lSWQpeworICAgICAg
ICAgICAgZnJhbWVzLnB1c2godGhpcy5fZnJhbWVzW2ZyYW1lSWRdKTsKKyAgICAgICAgfS5iaW5k
KHRoaXMpKTsKKyAgICAgICAgcmV0dXJuIGZyYW1lczsKKyAgICAgfSwKKworICAgIC8qKgogICAg
ICAqIEBwYXJhbSB7V2ViSW5zcGVjdG9yLkV2ZW50fSBldmVudAogICAgICAqLwogICAgIF9jb25z
b2xlTWVzc2FnZUFkZGVkOiBmdW5jdGlvbihldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9SdW50aW1lTW9kZWwuanMKaW5kZXggYmVmOTE3NzQ4ZDk5MjE4
NzQwOWVlM2E1MmUxMWQyZDU0M2Q0NjVkZC4uMzQyMGFmZGQwYjY3NjFkZmQ0NGUyM2RkNDhhMWU3
MDVmN2Q4MzMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SdW50aW1lTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9SdW50aW1lTW9kZWwuanMKQEAgLTc0LDEyICs3NCwxMSBAQCBXZWJJbnNwZWN0b3IuUnVudGlt
ZU1vZGVsLnByb3RvdHlwZSA9IHsKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5zcGVj
dG9yLlJlc291cmNlVHJlZUZyYW1lfSBmcmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN1
cml0eU9yaWdpbgorICAgICAqIEByZXR1cm4ge1dlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNv
bnRleHRMaXN0fQogICAgICAqLwotICAgIGNvbnRleHRCeUZyYW1lQW5kU2VjdXJpdHlPcmlnaW46
IGZ1bmN0aW9uKGZyYW1lLCBzZWN1cml0eU9yaWdpbikKKyAgICBjb250ZXh0TGlzdEJ5RnJhbWU6
IGZ1bmN0aW9uKGZyYW1lKQogICAgIHsKLSAgICAgICAgdmFyIGZyYW1lQ29udGV4dCA9IHRoaXMu
X2ZyYW1lSWRUb0NvbnRleHRMaXN0W2ZyYW1lLmlkXTsKLSAgICAgICAgcmV0dXJuIGZyYW1lQ29u
dGV4dCAmJiBmcmFtZUNvbnRleHQuY29udGV4dEJ5U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmln
aW4pOworICAgICAgICByZXR1cm4gdGhpcy5fZnJhbWVJZFRvQ29udGV4dExpc3RbZnJhbWUuaWRd
OwogICAgIH0sCiAKICAgICBfZnJhbWVBZGRlZDogZnVuY3Rpb24oZXZlbnQpCkBAIC00MTMsNiAr
NDEyLDExIEBAIFdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlw
ZSA9CiAgICAgICAgIHJldHVybiB0aGlzLl9leGVjdXRpb25Db250ZXh0czsKICAgICB9LAogCisg
ICAgbWFpbldvcmxkQ29udGV4dDogZnVuY3Rpb24oKSAKKyAgICB7CisgICAgICAgIHJldHVybiB0
aGlzLl9leGVjdXRpb25Db250ZXh0c1swXTsKKyAgICB9LAorCiAgICAgLyoqCiAgICAgICogQHBh
cmFtIHtzdHJpbmd9IHNlY3VyaXR5T3JpZ2luCiAgICAgICovCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNDk2YTVkZjA1NTM2
YWQ2ZDBjZjkzMmJjYmEyMjNmYTRkZTc5ZTczNy4uODg4NGM3OGM4N2U2ODBiNGVlMWZiZTYwMzY2
Njk5YTMzN2VlOTRiZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEzLTAyLTExICBKb2huIEou
IEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5zcGVj
dG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVuc2lv
biBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEw
NjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5l
dyB0ZXN0cyBmb3IgZXZhbHVhdGUgaW4gaWZyYW1lIG9wdGlvbnMgaW4gZXh0ZW5zaW9uIEFQSSAK
KworICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9leHRl
bnNpb25zLWlmcmFtZS1ldmFsLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5z
cGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbDogQWRkZWQuCisKIDIw
MTMtMDItMDEgIEFuZHJleSBLb3N5YWtvdiAgPGNhc2VxQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBXZWIgSW5zcGVjdG9yOiBbRXh0ZW5zaW9uIEFQSV0gYWRqdXN0IGluc3BlY3RlZFdpbmRvdy5l
dmFsKCkgY2FsbGJhY2sgcGFyYW1ldGVycyB0byBleHBvc2Ugbm9uLWV4Y2VwdGlvbmFsIGVycm9y
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25z
LWlmcmFtZS1ldmFsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVj
dG9yL2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4NGMz
NjBkYzlmZGVlNWFjYzJjOGRlN2IwNGM5NjdmMTNiNThmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9u
IEFQSQorCisKK1N0YXJ0ZWQgZXh0ZW5zaW9uLgorUnVubmluZyB0ZXN0cy4uLgorUlVOTklORyBU
RVNUOiBleHRlbnNpb25fdGVzdEV2YWxJbklGcmFtZQorRXZhbHVhdGU6ICIvaW5zcGVjdG9yL3Jl
c291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbCIgKGV4Y2VwdGlvbjogdW5kZWZpbmVk
KQorUlVOTklORyBURVNUOiBleHRlbnNpb25fdGVzdEV2YWxJbklGcmFtZUJhZE9wdGlvbgorbG9n
OiBFeHRlbnNpb24gc2VydmVyIGVycm9yOiBPYmplY3Qgbm90IGZvdW5kOiBib2d1cworRXZhbHVh
dGU6IHVuZGVmaW5lZCAoZXhjZXB0aW9uOiBbb2JqZWN0IE9iamVjdF0pCitBbGwgdGVzdHMgZG9u
ZS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5z
aW9ucy1pZnJhbWUtZXZhbC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmOTFiMTU2ZTRjMmMyNmEw
N2Y2OWE4YTgzZWJjMmI4MjM3MmMzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLmh0bWwKQEAgLTAsMCAr
MSw0MSBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJpbnNwZWN0b3ItdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZXh0ZW5zaW9ucy10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworZnVuY3Rpb24gZXh0ZW5zaW9uX3Rlc3RF
dmFsSW5JRnJhbWUobmV4dFRlc3QpIAoreworICAgIHZhciB1cmwgPSAnaHR0cDovLzEyNy4wLjAu
MTo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWwnOwor
ICAgIHZhciBvcmlnaW4gPSAiaHR0cDovLzEyNy4wLjAuMTo4MDAwIgorICAgIHZhciBvcHRpb25z
ID0geworICAgICAgICBmcmFtZVVSTDogdXJsCisgICAgfTsKKyAgICB2YXIgbG9jID0gIndpbmRv
dy5sb2NhdGlvbi5wYXRobmFtZSI7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdpbmRvdy5l
dmFsKGxvYywgb3B0aW9ucywgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25FdmFsLCBu
ZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxJbklGcmFtZUJhZE9w
dGlvbihuZXh0VGVzdCkgCit7CisgICAgdmFyIHVybCA9ICdodHRwOi8vMTI3LjAuMC4xOjgwMDAv
aW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbCc7CisgICAgdmFy
IG9yaWdpbiA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiCisgICAgdmFyIG9wdGlvbnMgPSB7Cisg
ICAgICAgIGZyYW1lVVJMOiB1cmwsCisgICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6ICJi
b2d1cyIKKyAgICB9OworICAgIHZhciBsb2MgPSAid2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIjsK
KyAgICB3ZWJJbnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwobG9jLCBvcHRpb25zLCBjYWxs
YmFja0FuZE5leHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0
aW9uIGV4dGVuc2lvbl9vbkV2YWwodmFsdWUsIGlzRXhjZXB0aW9uKQoreworICAgIG91dHB1dCgi
RXZhbHVhdGU6ICIgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAiIChleGNlcHRpb246ICIgKyBp
c0V4Y2VwdGlvbiArICIpIik7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJydW5UZXN0KCkiPgorPHA+VGVzdHMgV2ViSW5zcGVjdG9yIGV4dGVuc2lvbiBBUEk8L3A+Cis8
aWZyYW1lIHNyYz0icmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIj48L2lmcmFt
ZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
aW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwuaHRtbCBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMDMyNzFjMTdkYmZjYmU3OWEzMzY5ZmI1NzdiYjRjNTQ2NjBiMzFl
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVz
b3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sCkBAIC0wLDAgKzEsNiBAQAorPGh0bWw+
Cis8c2NyaXB0PgorLy8gU29tZSBKUyB0byBjcmVhdGUgYSBjb250ZXh0Cit3aW5kb3cuaUFtQW5J
RnJhbWUgPSB0cnVlOworPC9zY3JpcHQ+Cis8L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188101</attachid>
            <date>2013-02-13 09:44:12 -0800</date>
            <delta_ts>2013-03-11 10:00:14 -0700</delta_ts>
            <desc>Fix 4 items from review</desc>
            <filename>bug-106811-20130213094041.patch</filename>
            <type>text/plain</type>
            <size>12459</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZiMmEzOGY5NTAxYzc1
ZDA3YWRiYTUwOTExYjY1ZTM0MGM0M2JkYS4uNmUyOTExYWExMmZmNjYyYjMyZDRhYWU3ZDkyYzE1
M2JjNjdiMGU3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAyLTEzICBKb2hu
IEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVu
c2lvbiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBjYXNlIHRvIHRoZSBvcHRpb25zIHByb2Nlc3NpbmcgaW4gaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSwgbG9vaworICAgICAgICBmb3Igb3B0aW9uLmZyYW1lVVJMIDxzdHJpbmc+IGFu
ZC9vciBvcHRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dDogPHN0cmluZz4sIGZpbmQgdGhlCisg
ICAgICAgIG1hdGNoaW5nIEpTIGNvbnRleHQgaW4gdGhlIHJ1bnRpbWVNb2RlbCwgYW5kIGNhbGwg
ZXZhbHVhdGUoKSBpbiB0aGF0CisgICAgICAgIGNvbnRleHQ7IG9yIGVycm9yIGlmIHRoZSBjb250
ZXh0IGlzIG5vdCBmb3VuZC4gCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC5odG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0V4dGVuc2lvblNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25T
ZXJ2ZXIucHJvdG90eXBlLl9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS5ldmFsdWF0ZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5wcm90b3R5cGUuZnJhbWVzKToKKyAgICAgICAgICAgQWRk
ZWQgcmVhZCBhY2Nlc3MgdG8gX2ZyYW1lcworICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9S
dW50aW1lTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGltZU1vZGVsLnByb3Rv
dHlwZS5jb250ZXh0TGlzdEJ5RnJhbWUpOgorICAgICAgICAgICBBZGRlZCBhY2Nlc3MgdG8gYSBm
cmFtZSdzIGNvbnRleHRMaXN0LCByZW1vdmVkIGNvbnRleHRCeUZyYW1lQW5kU2VjdXJpdHlPcmln
aW4oKQorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3QucHJv
dG90eXBlLm1haW5Xb3JsZENvbnRleHQpOgorICAgICAgICAgICBBZGRlZCBhY2Nlc3MgdG8gZnJh
bWUncyBtYWluV29ybGRDb250ZXh0LCByYXRoZXIgdGhhbiBpbXBsaWNpdCBmaXJzdCBjb250ZXh0
LgorICAgICAgICAgICBOb3cgd2UgY2FuIGdvIGZyb20gUmVzb3VyY2VUcmVlTW9kZWwgLT4gZnJh
bWUgLT4gY29udGV4dExpc3QgdGhlbiBlaXRoZXIKKyAgICAgICAgICAgbWFpbldvcmxkQ29udGV4
dCgpIG9yIGNvbnRleHRCeVNlY3VyaXR5T3JpZ2luKCkgdG8gYWNjZXNzIGNvbnRleHRzLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS4pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuX29uRXZhbHVhdGVPbkluc3BlY3Rl
ZFBhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUu
ZXZhbHVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9k
ZWwuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SdW50aW1lTW9kZWwuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGltZU1vZGVsLnByb3RvdHlwZS5jb250ZXh0TGlzdEJ5
RnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3Qu
cHJvdG90eXBlLm1haW5Xb3JsZENvbnRleHQpOgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9u
U2VydmVyLnByb3RvdHlwZS5fb25SZWxvYWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVu
c2lvblNlcnZlci5wcm90b3R5cGUucmVzb2x2ZVVSTFRvRnJhbWUuaGFzTWF0Y2hpbmdVUkwpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZS5mcmFtZXMpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5wcm90b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5t
YWluV29ybGRDb250ZXh0KToKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5z
aW9uU2VydmVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90
b3R5cGUucmVzb2x2ZVVSTFRvRnJhbWUuaGFzTWF0Y2hpbmdVUkwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZS5mcmFtZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bnRp
bWVNb2RlbC5wcm90b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5tYWluV29ybGRDb250ZXh0
KToKKwogMjAxMy0wMi0wMSAgQW5kcmV5IEtvc3lha292ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFtFeHRlbnNpb24gQVBJXSBhZGp1c3QgaW5zcGVjdGVk
V2luZG93LmV2YWwoKSBjYWxsYmFjayBwYXJhbWV0ZXJzIHRvIGV4cG9zZSBub24tZXhjZXB0aW9u
YWwgZXJyb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RXh0ZW5zaW9uU2VydmVyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9F
eHRlbnNpb25TZXJ2ZXIuanMKaW5kZXggNTgwZWI2NWE5ODVjMjgwMTNmNzgxNjVhYTVmZDQ1ODkw
ZDQyMGQ4ZS4uOThkMzRhZjAxMDliY2MzNDE4NDM5Zjk0MDkzNzRiYWQ1YTQ3YmI4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIu
anMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2
ZXIuanMKQEAgLTc4MCwxMyArNzgwLDQ5IEBAIFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIu
cHJvdG90eXBlID0gewogICAgIGV2YWx1YXRlOiBmdW5jdGlvbihleHByZXNzaW9uLCBleHBvc2VD
b21tYW5kTGluZUFQSSwgcmV0dXJuQnlWYWx1ZSwgb3B0aW9ucywgc2VjdXJpdHlPcmlnaW4sIGNh
bGxiYWNrKSAKICAgICB7CiAgICAgICAgIHZhciBjb250ZXh0SWQ7Ci0gICAgICAgIGlmICh0eXBl
b2Ygb3B0aW9ucyA9PT0gIm9iamVjdCIgJiYgb3B0aW9uc1sidXNlQ29udGVudFNjcmlwdENvbnRl
eHQiXSkgewotICAgICAgICAgICAgdmFyIG1haW5GcmFtZSA9IFdlYkluc3BlY3Rvci5yZXNvdXJj
ZVRyZWVNb2RlbC5tYWluRnJhbWU7Ci0gICAgICAgICAgICBpZiAoIW1haW5GcmFtZSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfRkFJTEVEKCJtYWluIGZyYW1lIG5vdCBh
dmFpbGFibGUgeWV0Iik7Ci0gICAgICAgICAgICB2YXIgY29udGV4dCA9IFdlYkluc3BlY3Rvci5y
dW50aW1lTW9kZWwuY29udGV4dEJ5RnJhbWVBbmRTZWN1cml0eU9yaWdpbihtYWluRnJhbWUsIHNl
Y3VyaXR5T3JpZ2luKTsKLSAgICAgICAgICAgIGlmICghY29udGV4dCkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGhpcy5fc3RhdHVzLkVfTk9URk9VTkQoc2VjdXJpdHlPcmlnaW4pOworICAgICAg
ICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICJvYmplY3QiKSB7CisKKyAgICAgICAgICAgIGZ1bmN0
aW9uIHJlc29sdmVVUkxUb0ZyYW1lKHVybCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZm91bmQ7CisgICAgICAgICAgICAgICAgZnVuY3Rpb24gaGFzTWF0Y2hpbmdVUkwoZnJh
bWUpIAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSAoZnJh
bWUudXJsID09PSB1cmwpID8gZnJhbWUgOiBudWxsOworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZm91bmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5yZXNvdXJjZVRyZWVNb2RlbC5mcmFtZXMoKS5zb21lKGhhc01hdGNoaW5nVVJMKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZm91bmQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZh
ciBmcmFtZSA9IG9wdGlvbnMuZnJhbWVVUkwgPyByZXNvbHZlVVJMVG9GcmFtZShvcHRpb25zLmZy
YW1lVVJMKSA6IFdlYkluc3BlY3Rvci5yZXNvdXJjZVRyZWVNb2RlbC5tYWluRnJhbWU7CisgICAg
ICAgICAgICBpZiAoIWZyYW1lKSB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuZnJhbWVV
UkwpCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiZXZhbHVhdGU6IHRoZXJlIGlz
IG5vIGZyYW1lIHdpdGggVVJMICIgKyBvcHRpb25zLmZyYW1lVVJMKTsKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiZXZhbHVhdGU6IHRoZSBt
YWluIGZyYW1lIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIik7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRoaXMuX3N0YXR1cy5FX05PVEZPVU5EKG9wdGlvbnMuZnJhbWVVUkwgfHwgIjx0b3A+Iik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciBjb250ZXh0U2VjdXJpdHlPcmlnaW47Cisg
ICAgICAgICAgICBpZiAob3B0aW9uc1sidXNlQ29udGVudFNjcmlwdENvbnRleHQiXSApCisgICAg
ICAgICAgICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gc2VjdXJpdHlPcmlnaW47CisgICAg
ICAgICAgICBlbHNlIGlmIChvcHRpb25zLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAg
ICAgICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gb3B0aW9ucy5zY3JpcHRFeGVjdXRpb25D
b250ZXh0OworCisgICAgICAgICAgICB2YXIgZnJhbWVDb250ZXh0TGlzdCA9IFdlYkluc3BlY3Rv
ci5ydW50aW1lTW9kZWwuY29udGV4dExpc3RCeUZyYW1lKGZyYW1lKTsKKyAgICAgICAgICAgIHZh
ciBjb250ZXh0OyAKKyAgICAgICAgICAgIGlmIChjb250ZXh0U2VjdXJpdHlPcmlnaW4pIHsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0TGlzdC5jb250ZXh0QnlTZWN1cml0
eU9yaWdpbihjb250ZXh0U2VjdXJpdHlPcmlnaW4pOworICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dCkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIlRoZSBKUyBjb250ZXh0
ICIgKyBjb250ZXh0U2VjdXJpdHlPcmlnaW4gKyAiIHdhcyBub3QgZm91bmQgaW4gdGhlIGZyYW1l
ICIgKyBmcmFtZS51cmwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMu
RV9OT1RGT1VORChjb250ZXh0U2VjdXJpdHlPcmlnaW4pCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0
TGlzdC5tYWluV29ybGRDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0KSAK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxFRChmcmFtZS51
cmwgKyAiIGhhcyBubyBleGVjdXRpb24gY29udGV4dCIpOworICAgICAgICAgICAgfQorCiAgICAg
ICAgICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOwogICAgICAgICB9CiAgICAgICAgIFJ1bnRp
bWVBZ2VudC5ldmFsdWF0ZShleHByZXNzaW9uLCAiZXh0ZW5zaW9uIiwgZXhwb3NlQ29tbWFuZExp
bmVBUEksIHRydWUsIGNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZmFsc2UsIGNhbGxiYWNrKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VU
cmVlTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNl
VHJlZU1vZGVsLmpzCmluZGV4IGQzZTYxZWJlZjM4ZDI3MDZkZDFkZWZkNGEzYmFjNzU0ZmJiNzUz
NTguLmUyZDAxYWM4NjIzZTBmNjFhZmJjYjgxZGFhMjJhNmIxM2U0MTQ1YjUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9kZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2Rl
bC5qcwpAQCAtMjM0LDYgKzIzNCwxNCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwu
cHJvdG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48
V2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZUZyYW1lPn0KKyAgICAgKi8KKyAgICBmcmFtZXM6IGZ1
bmN0aW9uKCkgCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9mcmFt
ZXMpOworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVu
dH0gZXZlbnQKICAgICAgKi8KICAgICBfY29uc29sZU1lc3NhZ2VBZGRlZDogZnVuY3Rpb24oZXZl
bnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1J1bnRp
bWVNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1v
ZGVsLmpzCmluZGV4IGJlZjkxNzc0OGQ5OTIxODc0MDllZTNhNTJlMTFkMmQ1NDNkNDY1ZGQuLjM0
MjBhZmRkMGI2NzYxZGZkNDRlMjNkZDQ4YTFlNzA1ZjdkODMzMWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzCkBAIC03NCwxMiAr
NzQsMTEgQEAgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5wcm90b3R5cGUgPSB7CiAKICAgICAv
KioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0gZnJhbWUK
LSAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJpdHlPcmlnaW4KKyAgICAgKiBAcmV0dXJuIHtX
ZWJJbnNwZWN0b3IuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdH0KICAgICAgKi8KLSAgICBjb250
ZXh0QnlGcmFtZUFuZFNlY3VyaXR5T3JpZ2luOiBmdW5jdGlvbihmcmFtZSwgc2VjdXJpdHlPcmln
aW4pCisgICAgY29udGV4dExpc3RCeUZyYW1lOiBmdW5jdGlvbihmcmFtZSkKICAgICB7Ci0gICAg
ICAgIHZhciBmcmFtZUNvbnRleHQgPSB0aGlzLl9mcmFtZUlkVG9Db250ZXh0TGlzdFtmcmFtZS5p
ZF07Ci0gICAgICAgIHJldHVybiBmcmFtZUNvbnRleHQgJiYgZnJhbWVDb250ZXh0LmNvbnRleHRC
eVNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2Zy
YW1lSWRUb0NvbnRleHRMaXN0W2ZyYW1lLmlkXTsKICAgICB9LAogCiAgICAgX2ZyYW1lQWRkZWQ6
IGZ1bmN0aW9uKGV2ZW50KQpAQCAtNDEzLDYgKzQxMiwxMSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVF
eGVjdXRpb25Db250ZXh0TGlzdC5wcm90b3R5cGUgPQogICAgICAgICByZXR1cm4gdGhpcy5fZXhl
Y3V0aW9uQ29udGV4dHM7CiAgICAgfSwKIAorICAgIG1haW5Xb3JsZENvbnRleHQ6IGZ1bmN0aW9u
KCkgCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4dHNbMF07Cisg
ICAgfSwKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN1cml0eU9yaWdpbgog
ICAgICAqLwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDQ5NmE1ZGYwNTUzNmFkNmQwY2Y5MzJiY2JhMjIzZmE0ZGU3OWU3Mzcu
LjI0MDk1NTQ3ZTU0Njk1YWFmZjFkY2RjMTc0OTgwZDg2MDY5OTExMGEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxNiBAQAorMjAxMy0wMi0xMyAgSm9obiBKLiBCYXJ0b24gIDxqb2huamJhcnRvbkBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGlmcmFtZSBvcHRpb24gdG8gaW5z
cGVjdGVkV2luZG93LmV2YWwoKSBleHRlbnNpb24gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdGVzdHMgZm9yIGV2YWx1YXRlIGluIGlmcmFt
ZSBvcHRpb25zIGluIGV4dGVuc2lvbiBBUEkgCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3Bl
Y3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1m
cmFtZS1ldmFsLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAyLTAxICBBbmRyZXkgS29zeWFrb3YgIDxj
YXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogW0V4dGVuc2lvbiBB
UEldIGFkanVzdCBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGNhbGxiYWNrIHBhcmFtZXRlcnMgdG8g
ZXhwb3NlIG5vbi1leGNlcHRpb25hbCBlcnJvcgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iODRjMzYwZGM5ZmRlZTVhY2MyYzhkZTdiMDRjOTY3ZjEz
YjU4ZmY3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0
b3IvZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAor
VGVzdHMgV2ViSW5zcGVjdG9yIGV4dGVuc2lvbiBBUEkKKworCitTdGFydGVkIGV4dGVuc2lvbi4K
K1J1bm5pbmcgdGVzdHMuLi4KK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rlc3RFdmFsSW5JRnJh
bWUKK0V2YWx1YXRlOiAiL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFs
Lmh0bWwiIChleGNlcHRpb246IHVuZGVmaW5lZCkKK1JVTk5JTkcgVEVTVDogZXh0ZW5zaW9uX3Rl
c3RFdmFsSW5JRnJhbWVCYWRPcHRpb24KK2xvZzogRXh0ZW5zaW9uIHNlcnZlciBlcnJvcjogT2Jq
ZWN0IG5vdCBmb3VuZDogYm9ndXMKK0V2YWx1YXRlOiB1bmRlZmluZWQgKGV4Y2VwdGlvbjogW29i
amVjdCBPYmplY3RdKQorQWxsIHRlc3RzIGRvbmUuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwuaHRtbCBiL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5jZjkxYjE1NmU0YzJjMjZhMDdmNjlhOGE4M2ViYzJiODIzNzJjMzY5Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9u
cy1pZnJhbWUtZXZhbC5odG1sCkBAIC0wLDAgKzEsNDEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2Ny
aXB0IHNyYz0iaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImV4dGVu
c2lvbnMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+
CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbEluSUZyYW1lKG5leHRUZXN0KSAKK3sKKyAg
ICB2YXIgdXJsID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4
dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sJzsKKyAgICB2YXIgb3JpZ2luID0gImh0dHA6Ly8xMjcu
MC4wLjE6ODAwMCIKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgZnJhbWVVUkw6IHVybAor
ICAgIH07CisgICAgdmFyIGxvYyA9ICJ3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUiOworICAgIHdl
Ykluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbChsb2MsIG9wdGlvbnMsIGNhbGxiYWNrQW5k
TmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0
ZW5zaW9uX3Rlc3RFdmFsSW5JRnJhbWVCYWRPcHRpb24obmV4dFRlc3QpIAoreworICAgIHZhciB1
cmwgPSAnaHR0cDovLzEyNy4wLjAuMTo4MDAwL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9u
cy1mcmFtZS1ldmFsLmh0bWwnOworICAgIHZhciBvcmlnaW4gPSAiaHR0cDovLzEyNy4wLjAuMTo4
MDAwIgorICAgIHZhciBvcHRpb25zID0geworICAgICAgICBmcmFtZVVSTDogdXJsLAorICAgICAg
ICBzY3JpcHRFeGVjdXRpb25Db250ZXh0OiAiYm9ndXMiCisgICAgfTsKKyAgICB2YXIgbG9jID0g
IndpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSI7CisgICAgd2ViSW5zcGVjdG9yLmluc3BlY3RlZFdp
bmRvdy5ldmFsKGxvYywgb3B0aW9ucywgY2FsbGJhY2tBbmROZXh0VGVzdChleHRlbnNpb25fb25F
dmFsLCBuZXh0VGVzdCkpOworfQorCitmdW5jdGlvbiBleHRlbnNpb25fb25FdmFsKHZhbHVlLCBp
c0V4Y2VwdGlvbikKK3sKKyAgICBvdXRwdXQoIkV2YWx1YXRlOiAiICsgSlNPTi5zdHJpbmdpZnko
dmFsdWUpICsgIiAoZXhjZXB0aW9uOiAiICsgaXNFeGNlcHRpb24gKyAiKSIpOworfQorCis8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdCgpIj4KKzxwPlRlc3RzIFdlYklu
c3BlY3RvciBleHRlbnNpb24gQVBJPC9wPgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9leHRlbnNp
b25zLWZyYW1lLWV2YWwuaHRtbCI+PC9pZnJhbWU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9u
cy1mcmFtZS1ldmFsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNv
dXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAzMjcxYzE3ZGJm
Y2JlNzlhMzM2OWZiNTc3YmI0YzU0NjYwYjMxZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2YWwu
aHRtbApAQCAtMCwwICsxLDYgQEAKKzxodG1sPgorPHNjcmlwdD4KKy8vIFNvbWUgSlMgdG8gY3Jl
YXRlIGEgY29udGV4dAord2luZG93LmlBbUFuSUZyYW1lID0gdHJ1ZTsKKzwvc2NyaXB0PgorPC9o
dG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>192490</attachid>
            <date>2013-03-11 10:00:19 -0700</date>
            <delta_ts>2013-03-18 10:15:02 -0700</delta_ts>
            <desc>rebase</desc>
            <filename>bug-106811-20130311095619.patch</filename>
            <type>text/plain</type>
            <size>12670</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ1MzcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZiZjE3NWQwMTA3NmVm
ZDE1YTZkNThmMmU2YmRiYzMzZTQyZjkyNC4uNTdmNDZlZDVjYjc4NjQxNmI3MWM1ZjNhYmFjN2Nh
Y2E0ODM5NjIyMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAyLTEzICBKb2hu
IEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVu
c2lvbiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBjYXNlIHRvIHRoZSBvcHRpb25zIHByb2Nlc3NpbmcgaW4gaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSwgbG9vaworICAgICAgICBmb3Igb3B0aW9uLmZyYW1lVVJMIDxzdHJpbmc+IGFu
ZC9vciBvcHRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dDogPHN0cmluZz4sIGZpbmQgdGhlCisg
ICAgICAgIG1hdGNoaW5nIEpTIGNvbnRleHQgaW4gdGhlIHJ1bnRpbWVNb2RlbCwgYW5kIGNhbGwg
ZXZhbHVhdGUoKSBpbiB0aGF0CisgICAgICAgIGNvbnRleHQ7IG9yIGVycm9yIGlmIHRoZSBjb250
ZXh0IGlzIG5vdCBmb3VuZC4gCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC5odG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0V4dGVuc2lvblNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25T
ZXJ2ZXIucHJvdG90eXBlLl9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS5ldmFsdWF0ZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5wcm90b3R5cGUuZnJhbWVzKToKKyAgICAgICAgICAgQWRk
ZWQgcmVhZCBhY2Nlc3MgdG8gX2ZyYW1lcworICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9S
dW50aW1lTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGltZU1vZGVsLnByb3Rv
dHlwZS5jb250ZXh0TGlzdEJ5RnJhbWUpOgorICAgICAgICAgICBBZGRlZCBhY2Nlc3MgdG8gYSBm
cmFtZSdzIGNvbnRleHRMaXN0LCByZW1vdmVkIGNvbnRleHRCeUZyYW1lQW5kU2VjdXJpdHlPcmln
aW4oKQorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3QucHJv
dG90eXBlLm1haW5Xb3JsZENvbnRleHQpOgorICAgICAgICAgICBBZGRlZCBhY2Nlc3MgdG8gZnJh
bWUncyBtYWluV29ybGRDb250ZXh0LCByYXRoZXIgdGhhbiBpbXBsaWNpdCBmaXJzdCBjb250ZXh0
LgorICAgICAgICAgICBOb3cgd2UgY2FuIGdvIGZyb20gUmVzb3VyY2VUcmVlTW9kZWwgLT4gZnJh
bWUgLT4gY29udGV4dExpc3QgdGhlbiBlaXRoZXIKKyAgICAgICAgICAgbWFpbldvcmxkQ29udGV4
dCgpIG9yIGNvbnRleHRCeVNlY3VyaXR5T3JpZ2luKCkgdG8gYWNjZXNzIGNvbnRleHRzLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS4pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuX29uRXZhbHVhdGVPbkluc3BlY3Rl
ZFBhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUu
ZXZhbHVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9k
ZWwuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SdW50aW1lTW9kZWwuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGltZU1vZGVsLnByb3RvdHlwZS5jb250ZXh0TGlzdEJ5
RnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3Qu
cHJvdG90eXBlLm1haW5Xb3JsZENvbnRleHQpOgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9u
U2VydmVyLnByb3RvdHlwZS5fb25SZWxvYWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVu
c2lvblNlcnZlci5wcm90b3R5cGUucmVzb2x2ZVVSTFRvRnJhbWUuaGFzTWF0Y2hpbmdVUkwpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZS5mcmFtZXMpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5wcm90b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5t
YWluV29ybGRDb250ZXh0KToKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5z
aW9uU2VydmVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90
b3R5cGUucmVzb2x2ZVVSTFRvRnJhbWUuaGFzTWF0Y2hpbmdVUkwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZS5mcmFtZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bnRp
bWVNb2RlbC5wcm90b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5tYWluV29ybGRDb250ZXh0
KToKKwogMjAxMy0wMy0xMSAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBmaXggc3R5bGVzIHRvb2xiYXIgaW4gdGhlIHZlcnRp
Y2FsIG1vZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0V4dGVuc2lvblNlcnZlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RXh0ZW5zaW9uU2VydmVyLmpzCmluZGV4IDFjMjkyMTQxOTZmZTFiYWM5M2Q4ZmU2ZTdkZmFmN2Vi
NGUzMzIxZjkuLmIwZWJkNTRjZWI4OTZhYmE4NGU2NWJkN2I0MWQ2MGFjZjg3OWEyMmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVy
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2Vy
dmVyLmpzCkBAIC0zMjUsNyArMzI1LDYgQEAgV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5w
cm90b3R5cGUgPSB7CiAgICAgICAgICAqLwogICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhlcnJv
ciwgcmVzdWx0UGF5bG9hZCwgd2FzVGhyb3duKQogICAgICAgICB7Ci0gICAgICAgICAgICB2YXIg
cmVzdWx0OwogICAgICAgICAgICAgaWYgKGVycm9yKQogICAgICAgICAgICAgICAgIHJlc3VsdCA9
IHRoaXMuX3N0YXR1cy5FX1BST1RPQ09MRVJST1IoZXJyb3IudG9TdHJpbmcoKSk7CiAgICAgICAg
ICAgICBlbHNlIGlmICh3YXNUaHJvd24pCkBAIC03NzcsMTMgKzc3Niw0OSBAQCBXZWJJbnNwZWN0
b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZSA9IHsKICAgICBldmFsdWF0ZTogZnVuY3Rpb24o
ZXhwcmVzc2lvbiwgZXhwb3NlQ29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIG9wdGlvbnMs
IHNlY3VyaXR5T3JpZ2luLCBjYWxsYmFjaykgCiAgICAgewogICAgICAgICB2YXIgY29udGV4dElk
OwotICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICJvYmplY3QiICYmIG9wdGlvbnNbInVz
ZUNvbnRlbnRTY3JpcHRDb250ZXh0Il0pIHsKLSAgICAgICAgICAgIHZhciBtYWluRnJhbWUgPSBX
ZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZyYW1lOwotICAgICAgICAgICAgaWYg
KCFtYWluRnJhbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxF
RCgibWFpbiBmcmFtZSBub3QgYXZhaWxhYmxlIHlldCIpOwotICAgICAgICAgICAgdmFyIGNvbnRl
eHQgPSBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVsLmNvbnRleHRCeUZyYW1lQW5kU2VjdXJpdHlP
cmlnaW4obWFpbkZyYW1lLCBzZWN1cml0eU9yaWdpbik7Ci0gICAgICAgICAgICBpZiAoIWNvbnRl
eHQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX05PVEZPVU5EKHNlY3Vy
aXR5T3JpZ2luKTsKKyAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0Iikgewor
CisgICAgICAgICAgICBmdW5jdGlvbiByZXNvbHZlVVJMVG9GcmFtZSh1cmwpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdmFyIGZvdW5kOworICAgICAgICAgICAgICAgIGZ1bmN0aW9u
IGhhc01hdGNoaW5nVVJMKGZyYW1lKSAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gKGZyYW1lLnVybCA9PT0gdXJsKSA/IGZyYW1lIDogbnVsbDsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwuZnJhbWVzKCkuc29tZShoYXNN
YXRjaGluZ1VSTCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2YXIgZnJhbWUgPSBvcHRpb25zLmZyYW1lVVJMID8gcmVzb2x2ZVVS
TFRvRnJhbWUob3B0aW9ucy5mcmFtZVVSTCkgOiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9k
ZWwubWFpbkZyYW1lOworICAgICAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAgICAg
IGlmIChvcHRpb25zLmZyYW1lVVJMKQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4o
ImV2YWx1YXRlOiB0aGVyZSBpcyBubyBmcmFtZSB3aXRoIFVSTCAiICsgb3B0aW9ucy5mcmFtZVVS
TCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndh
cm4oImV2YWx1YXRlOiB0aGUgbWFpbiBmcmFtZSBpcyBub3QgeWV0IGF2YWlsYWJsZSIpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChvcHRpb25zLmZyYW1l
VVJMIHx8ICI8dG9wPiIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY29udGV4
dFNlY3VyaXR5T3JpZ2luOworICAgICAgICAgICAgaWYgKG9wdGlvbnNbInVzZUNvbnRlbnRTY3Jp
cHRDb250ZXh0Il0gKQorICAgICAgICAgICAgICAgIGNvbnRleHRTZWN1cml0eU9yaWdpbiA9IHNl
Y3VyaXR5T3JpZ2luOworICAgICAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KQorICAgICAgICAgICAgICAgIGNvbnRleHRTZWN1cml0eU9yaWdpbiA9IG9wdGlv
bnMuc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKKworICAgICAgICAgICAgdmFyIGZyYW1lQ29udGV4
dExpc3QgPSBXZWJJbnNwZWN0b3IucnVudGltZU1vZGVsLmNvbnRleHRMaXN0QnlGcmFtZShmcmFt
ZSk7CisgICAgICAgICAgICB2YXIgY29udGV4dDsgCisgICAgICAgICAgICBpZiAoY29udGV4dFNl
Y3VyaXR5T3JpZ2luKSB7CisgICAgICAgICAgICAgICAgY29udGV4dCA9IGZyYW1lQ29udGV4dExp
c3QuY29udGV4dEJ5U2VjdXJpdHlPcmlnaW4oY29udGV4dFNlY3VyaXR5T3JpZ2luKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uc29sZS53
YXJuKCJUaGUgSlMgY29udGV4dCAiICsgY29udGV4dFNlY3VyaXR5T3JpZ2luICsgIiB3YXMgbm90
IGZvdW5kIGluIHRoZSBmcmFtZSAiICsgZnJhbWUudXJsKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdGhpcy5fc3RhdHVzLkVfTk9URk9VTkQoY29udGV4dFNlY3VyaXR5T3JpZ2luKQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgY29u
dGV4dCA9IGZyYW1lQ29udGV4dExpc3QubWFpbldvcmxkQ29udGV4dCgpOworICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dCkgCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0
dXMuRV9GQUlMRUQoZnJhbWUudXJsICsgIiBoYXMgbm8gZXhlY3V0aW9uIGNvbnRleHQiKTsKKyAg
ICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29udGV4dElkID0gY29udGV4dC5pZDsKICAgICAg
ICAgfQogICAgICAgICBSdW50aW1lQWdlbnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgImV4dGVuc2lv
biIsIGV4cG9zZUNvbW1hbmRMaW5lQVBJLCB0cnVlLCBjb250ZXh0SWQsIHJldHVybkJ5VmFsdWUs
IGZhbHNlLCBjYWxsYmFjayk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2RlbC5qcwppbmRleCBmMjZjNzkxOGY2NTdkZWFlNTQx
NGQ2OTg5MmRkYzg2YmZkMTFmZDBjLi5hMmM5YmZkNGVmY2NhNDg1NDYwNzVjMjEwYTFlY2MwYjhh
MDliZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jl
c291cmNlVHJlZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvUmVzb3VyY2VUcmVlTW9kZWwuanMKQEAgLTMwMSw2ICszMDEsMTQgQEAgV2ViSW5zcGVjdG9y
LlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZSA9IHsKICAgICB9LAogCiAgICAgLyoqCisgICAg
ICogQHJldHVybiB7QXJyYXkuPFdlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZT59CisgICAg
ICovCisgICAgZnJhbWVzOiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIE9iamVj
dC52YWx1ZXModGhpcy5fZnJhbWVzKTsKKyAgICB9LAorCisgICAgLyoqCiAgICAgICogQHBhcmFt
IHtXZWJJbnNwZWN0b3IuRXZlbnR9IGV2ZW50CiAgICAgICovCiAgICAgX2NvbnNvbGVNZXNzYWdl
QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9SdW50aW1lTW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1J1bnRpbWVNb2RlbC5qcwppbmRleCBjNWJkZWViMGE5NDI2Yzg4MzRiMTNjN2Rh
YzRjOTUyNmY2MGFhMDc3Li5hYmQ3YzM4MGZkOGZmMmI2ZGY1MmQ0OWZlNGJhZDE1MTEyZWIyZmQ0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1J1bnRpbWVN
b2RlbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1J1bnRpbWVN
b2RlbC5qcwpAQCAtNzQsMTIgKzc0LDExIEBAIFdlYkluc3BlY3Rvci5SdW50aW1lTW9kZWwucHJv
dG90eXBlID0gewogCiAgICAgLyoqCiAgICAgICogQHBhcmFtIHtXZWJJbnNwZWN0b3IuUmVzb3Vy
Y2VUcmVlRnJhbWV9IGZyYW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IHNlY3VyaXR5T3JpZ2lu
CisgICAgICogQHJldHVybiB7V2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3R9
CiAgICAgICovCi0gICAgY29udGV4dEJ5RnJhbWVBbmRTZWN1cml0eU9yaWdpbjogZnVuY3Rpb24o
ZnJhbWUsIHNlY3VyaXR5T3JpZ2luKQorICAgIGNvbnRleHRMaXN0QnlGcmFtZTogZnVuY3Rpb24o
ZnJhbWUpCiAgICAgewotICAgICAgICB2YXIgZnJhbWVDb250ZXh0ID0gdGhpcy5fZnJhbWVJZFRv
Q29udGV4dExpc3RbZnJhbWUuaWRdOwotICAgICAgICByZXR1cm4gZnJhbWVDb250ZXh0ICYmIGZy
YW1lQ29udGV4dC5jb250ZXh0QnlTZWN1cml0eU9yaWdpbihzZWN1cml0eU9yaWdpbik7CisgICAg
ICAgIHJldHVybiB0aGlzLl9mcmFtZUlkVG9Db250ZXh0TGlzdFtmcmFtZS5pZF07CiAgICAgfSwK
IAogICAgIF9mcmFtZUFkZGVkOiBmdW5jdGlvbihldmVudCkKQEAgLTQxMyw2ICs0MTIsMTEgQEAg
V2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3QucHJvdG90eXBlID0KICAgICAg
ICAgcmV0dXJuIHRoaXMuX2V4ZWN1dGlvbkNvbnRleHRzOwogICAgIH0sCiAKKyAgICBtYWluV29y
bGRDb250ZXh0OiBmdW5jdGlvbigpIAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2V4ZWN1
dGlvbkNvbnRleHRzWzBdOworICAgIH0sCisKICAgICAvKioKICAgICAgKiBAcGFyYW0ge3N0cmlu
Z30gc2VjdXJpdHlPcmlnaW4KICAgICAgKi8KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlMWQ2YjY0ZDAzOWM4ZjhkM2UzMTgx
Nzk1OWYyZGY0NWY1OTlkYjM4Li4zYWFmYjM4MjFmNzkzNjg0OGM5MGI1NWE2Y2Y3YzFkZjI2NTYx
N2U4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTMtMDItMTMgIEpvaG4gSi4gQmFydG9uICA8
am9obmpiYXJ0b25AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6IEFkZCBp
ZnJhbWUgb3B0aW9uIHRvIGluc3BlY3RlZFdpbmRvdy5ldmFsKCkgZXh0ZW5zaW9uIEFQSQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2ODExCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTmV3IHRlc3RzIGZv
ciBldmFsdWF0ZSBpbiBpZnJhbWUgb3B0aW9ucyBpbiBleHRlbnNpb24gQVBJIAorCisgICAgICAg
ICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZy
YW1lLWV2YWwuaHRtbDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVz
b3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sOiBBZGRlZC4KKwogMjAxMy0wMy0xMSAg
Q2hyaXN0aWFuIEJpZXNpbmdlciAgPGNiaWVzaW5nZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
ICh0ZXN0cykgbWFrZSBub2Rlc0Zyb21SZWN0LmpzIHByaW50IGEgbGlzdCBvZiBub2RlcyB0aGF0
IHdlcmUgZm91bmQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYjg0YzM2MGRjOWZkZWU1YWNjMmM4ZGU3YjA0Yzk2N2YxM2I1OGZmNwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZy
YW1lLWV2YWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3RzIFdlYkluc3BlY3Rv
ciBleHRlbnNpb24gQVBJCisKKworU3RhcnRlZCBleHRlbnNpb24uCitSdW5uaW5nIHRlc3RzLi4u
CitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbEluSUZyYW1lCitFdmFsdWF0ZTogIi9p
bnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sIiAoZXhjZXB0aW9u
OiB1bmRlZmluZWQpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbEluSUZyYW1lQmFk
T3B0aW9uCitsb2c6IEV4dGVuc2lvbiBzZXJ2ZXIgZXJyb3I6IE9iamVjdCBub3QgZm91bmQ6IGJv
Z3VzCitFdmFsdWF0ZTogdW5kZWZpbmVkIChleGNlcHRpb246IFtvYmplY3QgT2JqZWN0XSkKK0Fs
bCB0ZXN0cyBkb25lLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2luc3BlY3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2Y5MWIx
NTZlNGMyYzI2YTA3ZjY5YThhODNlYmMyYjgyMzcyYzM2OQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwuaHRt
bApAQCAtMCwwICsxLDQxIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Imluc3BlY3Rv
ci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJleHRlbnNpb25zLXRlc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorCitmdW5jdGlvbiBleHRl
bnNpb25fdGVzdEV2YWxJbklGcmFtZShuZXh0VGVzdCkgCit7CisgICAgdmFyIHVybCA9ICdodHRw
Oi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRlbnNpb25zLWZyYW1lLWV2
YWwuaHRtbCc7CisgICAgdmFyIG9yaWdpbiA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiCisgICAg
dmFyIG9wdGlvbnMgPSB7CisgICAgICAgIGZyYW1lVVJMOiB1cmwKKyAgICB9OworICAgIHZhciBs
b2MgPSAid2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIjsKKyAgICB3ZWJJbnNwZWN0b3IuaW5zcGVj
dGVkV2luZG93LmV2YWwobG9jLCBvcHRpb25zLCBjYWxsYmFja0FuZE5leHRUZXN0KGV4dGVuc2lv
bl9vbkV2YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVuc2lvbl90ZXN0RXZhbElu
SUZyYW1lQmFkT3B0aW9uKG5leHRUZXN0KSAKK3sKKyAgICB2YXIgdXJsID0gJ2h0dHA6Ly8xMjcu
MC4wLjE6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1s
JzsKKyAgICB2YXIgb3JpZ2luID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMCIKKyAgICB2YXIgb3B0
aW9ucyA9IHsKKyAgICAgICAgZnJhbWVVUkw6IHVybCwKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dDogImJvZ3VzIgorICAgIH07CisgICAgdmFyIGxvYyA9ICJ3aW5kb3cubG9jYXRpb24u
cGF0aG5hbWUiOworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5kb3cuZXZhbChsb2MsIG9w
dGlvbnMsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZhbCwgbmV4dFRlc3QpKTsK
K30KKworZnVuY3Rpb24gZXh0ZW5zaW9uX29uRXZhbCh2YWx1ZSwgaXNFeGNlcHRpb24pCit7Cisg
ICAgb3V0cHV0KCJFdmFsdWF0ZTogIiArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICIgKGV4Y2Vw
dGlvbjogIiArIGlzRXhjZXB0aW9uICsgIikiKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyBXZWJJbnNwZWN0b3IgZXh0ZW5zaW9u
IEFQSTwvcD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0
bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1s
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMt
ZnJhbWUtZXZhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwMzI3MWMxN2RiZmNiZTc5YTMzNjlmYjU3N2Ji
NGM1NDY2MGIzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2lu
c3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0bWwKQEAgLTAsMCArMSw2
IEBACis8aHRtbD4KKzxzY3JpcHQ+CisvLyBTb21lIEpTIHRvIGNyZWF0ZSBhIGNvbnRleHQKK3dp
bmRvdy5pQW1BbklGcmFtZSA9IHRydWU7Cis8L3NjcmlwdD4KKzwvaHRtbD4KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193593</attachid>
            <date>2013-03-18 10:15:07 -0700</date>
            <delta_ts>2013-03-19 07:15:27 -0700</delta_ts>
            <desc>rebase; fix review comment #29</desc>
            <filename>bug-106811-20130318101059.patch</filename>
            <type>text/plain</type>
            <size>12343</size>
            <attacher name="johnjbarton">johnjbarton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ2MDcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjQwNDc4ZmJkMjAzY2I1
NTIwNzEyNjg1OTBlNGIwZWQ1ZTUxNGY0Mi4uOGEzN2U1MGUwNGEwNmRmOGMwYzY0MTRmNzlmNmY1
NTUzMTZiY2VhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDEzLTAyLTEzICBKb2hu
IEouIEJhcnRvbiAgPGpvaG5qYmFydG9uQGNocm9taXVtLm9yZz4KKworICAgICAgICBXZWIgSW5z
cGVjdG9yOiBBZGQgaWZyYW1lIG9wdGlvbiB0byBpbnNwZWN0ZWRXaW5kb3cuZXZhbCgpIGV4dGVu
c2lvbiBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwNjgxMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEFkZCBhIG5ldyBjYXNlIHRvIHRoZSBvcHRpb25zIHByb2Nlc3NpbmcgaW4gaW5zcGVjdGVkV2lu
ZG93LmV2YWwoKSwgbG9vaworICAgICAgICBmb3Igb3B0aW9uLmZyYW1lVVJMIDxzdHJpbmc+IGFu
ZC9vciBvcHRpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dDogPHN0cmluZz4sIGZpbmQgdGhlCisg
ICAgICAgIG1hdGNoaW5nIEpTIGNvbnRleHQgaW4gdGhlIHJ1bnRpbWVNb2RlbCwgYW5kIGNhbGwg
ZXZhbHVhdGUoKSBpbiB0aGF0CisgICAgICAgIGNvbnRleHQ7IG9yIGVycm9yIGlmIHRoZSBjb250
ZXh0IGlzIG5vdCBmb3VuZC4gCisKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9pbnNwZWN0b3Iv
ZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC5odG1sCisKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQt
ZW5kL0V4dGVuc2lvblNlcnZlci5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25T
ZXJ2ZXIucHJvdG90eXBlLl9vbkV2YWx1YXRlT25JbnNwZWN0ZWRQYWdlKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLik6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS5ldmFsdWF0ZSk6CisgICAgICAgICogaW5z
cGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5SZXNvdXJjZVRyZWVNb2RlbC5wcm90b3R5cGUuZnJhbWVzKToKKyAgICAgICAgICAgQWRk
ZWQgcmVhZCBhY2Nlc3MgdG8gX2ZyYW1lcworICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9S
dW50aW1lTW9kZWwuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGltZU1vZGVsLnByb3Rv
dHlwZS5jb250ZXh0TGlzdEJ5RnJhbWUpOgorICAgICAgICAgICBBZGRlZCBhY2Nlc3MgdG8gYSBm
cmFtZSdzIGNvbnRleHRMaXN0LCByZW1vdmVkIGNvbnRleHRCeUZyYW1lQW5kU2VjdXJpdHlPcmln
aW4oKQorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3QucHJv
dG90eXBlLm1haW5Xb3JsZENvbnRleHQpOgorICAgICAgICAgICBBZGRlZCBhY2Nlc3MgdG8gZnJh
bWUncyBtYWluV29ybGRDb250ZXh0LCByYXRoZXIgdGhhbiBpbXBsaWNpdCBmaXJzdCBjb250ZXh0
LgorICAgICAgICAgICBOb3cgd2UgY2FuIGdvIGZyb20gUmVzb3VyY2VUcmVlTW9kZWwgLT4gZnJh
bWUgLT4gY29udGV4dExpc3QgdGhlbiBlaXRoZXIKKyAgICAgICAgICAgbWFpbldvcmxkQ29udGV4
dCgpIG9yIGNvbnRleHRCeVNlY3VyaXR5T3JpZ2luKCkgdG8gYWNjZXNzIGNvbnRleHRzLgorCisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVyLnByb3RvdHlwZS4pOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuX29uRXZhbHVhdGVPbkluc3BlY3Rl
ZFBhZ2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUu
ZXZhbHVhdGUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9k
ZWwuanM6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9SdW50aW1lTW9kZWwuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuUnVudGltZU1vZGVsLnByb3RvdHlwZS5jb250ZXh0TGlzdEJ5
RnJhbWUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkZyYW1lRXhlY3V0aW9uQ29udGV4dExpc3Qu
cHJvdG90eXBlLm1haW5Xb3JsZENvbnRleHQpOgorCisgICAgICAgICogaW5zcGVjdG9yL2Zyb250
LWVuZC9FeHRlbnNpb25TZXJ2ZXIuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRXh0ZW5zaW9u
U2VydmVyLnByb3RvdHlwZS5fb25SZWxvYWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVu
c2lvblNlcnZlci5wcm90b3R5cGUucmVzb2x2ZVVSTFRvRnJhbWUuaGFzTWF0Y2hpbmdVUkwpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZS5mcmFtZXMpOgorICAg
ICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5wcm90b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAg
ICAgICAgKFdlYkluc3BlY3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5t
YWluV29ybGRDb250ZXh0KToKKworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5z
aW9uU2VydmVyLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90
b3R5cGUucmVzb2x2ZVVSTFRvRnJhbWUuaGFzTWF0Y2hpbmdVUkwpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkV4dGVuc2lvblNlcnZlci5wcm90b3R5cGUuKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5FeHRlbnNpb25TZXJ2ZXIucHJvdG90eXBlLmV2YWx1YXRlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJlZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlJlc291cmNlVHJlZU1vZGVsLnByb3RvdHlwZS5mcmFtZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlJ1bnRp
bWVNb2RlbC5wcm90b3R5cGUuY29udGV4dExpc3RCeUZyYW1lKToKKyAgICAgICAgKFdlYkluc3Bl
Y3Rvci5GcmFtZUV4ZWN1dGlvbkNvbnRleHRMaXN0LnByb3RvdHlwZS5tYWluV29ybGRDb250ZXh0
KToKKwogMjAxMy0wMy0xOCAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2hhbmdlIFJlbmRlclRhYmxlQ2VsbCB0byB1c2UgcGl4ZWxTbmFwcGVkU2l6ZSB3aGVu
IHBhaW50aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0V4dGVuc2lvblNlcnZlci5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RXh0ZW5zaW9uU2VydmVyLmpzCmluZGV4IDFjMjkyMTQxOTZmZTFiYWM5M2Q4ZmU2ZTdkZmFmN2Vi
NGUzMzIxZjkuLjYzNTQzNDIxY2NiMDU5ZDRmMzBjM2ZjNmQ5ZDU3MGQ3Yjk5YmViMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2VydmVy
LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRXh0ZW5zaW9uU2Vy
dmVyLmpzCkBAIC03NzcsMTMgKzc3Nyw0OSBAQCBXZWJJbnNwZWN0b3IuRXh0ZW5zaW9uU2VydmVy
LnByb3RvdHlwZSA9IHsKICAgICBldmFsdWF0ZTogZnVuY3Rpb24oZXhwcmVzc2lvbiwgZXhwb3Nl
Q29tbWFuZExpbmVBUEksIHJldHVybkJ5VmFsdWUsIG9wdGlvbnMsIHNlY3VyaXR5T3JpZ2luLCBj
YWxsYmFjaykgCiAgICAgewogICAgICAgICB2YXIgY29udGV4dElkOwotICAgICAgICBpZiAodHlw
ZW9mIG9wdGlvbnMgPT09ICJvYmplY3QiICYmIG9wdGlvbnNbInVzZUNvbnRlbnRTY3JpcHRDb250
ZXh0Il0pIHsKLSAgICAgICAgICAgIHZhciBtYWluRnJhbWUgPSBXZWJJbnNwZWN0b3IucmVzb3Vy
Y2VUcmVlTW9kZWwubWFpbkZyYW1lOwotICAgICAgICAgICAgaWYgKCFtYWluRnJhbWUpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxFRCgibWFpbiBmcmFtZSBub3Qg
YXZhaWxhYmxlIHlldCIpOwotICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBXZWJJbnNwZWN0b3Iu
cnVudGltZU1vZGVsLmNvbnRleHRCeUZyYW1lQW5kU2VjdXJpdHlPcmlnaW4obWFpbkZyYW1lLCBz
ZWN1cml0eU9yaWdpbik7Ci0gICAgICAgICAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX05PVEZPVU5EKHNlY3VyaXR5T3JpZ2luKTsKKyAgICAg
ICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAib2JqZWN0IikgeworCisgICAgICAgICAgICBmdW5j
dGlvbiByZXNvbHZlVVJMVG9GcmFtZSh1cmwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgdmFyIGZvdW5kOworICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGhhc01hdGNoaW5nVVJMKGZy
YW1lKSAKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gKGZy
YW1lLnVybCA9PT0gdXJsKSA/IGZyYW1lIDogbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZvdW5kOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0
b3IucmVzb3VyY2VUcmVlTW9kZWwuZnJhbWVzKCkuc29tZShoYXNNYXRjaGluZ1VSTCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZvdW5kOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
YXIgZnJhbWUgPSBvcHRpb25zLmZyYW1lVVJMID8gcmVzb2x2ZVVSTFRvRnJhbWUob3B0aW9ucy5m
cmFtZVVSTCkgOiBXZWJJbnNwZWN0b3IucmVzb3VyY2VUcmVlTW9kZWwubWFpbkZyYW1lOworICAg
ICAgICAgICAgaWYgKCFmcmFtZSkgeworICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmZyYW1l
VVJMKQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImV2YWx1YXRlOiB0aGVyZSBp
cyBubyBmcmFtZSB3aXRoIFVSTCAiICsgb3B0aW9ucy5mcmFtZVVSTCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oImV2YWx1YXRlOiB0aGUg
bWFpbiBmcmFtZSBpcyBub3QgeWV0IGF2YWlsYWJsZSIpOworICAgICAgICAgICAgICAgIHJldHVy
biB0aGlzLl9zdGF0dXMuRV9OT1RGT1VORChvcHRpb25zLmZyYW1lVVJMIHx8ICI8dG9wPiIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgY29udGV4dFNlY3VyaXR5T3JpZ2luOwor
ICAgICAgICAgICAgaWYgKG9wdGlvbnMudXNlQ29udGVudFNjcmlwdENvbnRleHQpCisgICAgICAg
ICAgICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gc2VjdXJpdHlPcmlnaW47CisgICAgICAg
ICAgICBlbHNlIGlmIChvcHRpb25zLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgICAg
ICAgICAgY29udGV4dFNlY3VyaXR5T3JpZ2luID0gb3B0aW9ucy5zY3JpcHRFeGVjdXRpb25Db250
ZXh0OworCisgICAgICAgICAgICB2YXIgZnJhbWVDb250ZXh0TGlzdCA9IFdlYkluc3BlY3Rvci5y
dW50aW1lTW9kZWwuY29udGV4dExpc3RCeUZyYW1lKGZyYW1lKTsKKyAgICAgICAgICAgIHZhciBj
b250ZXh0OyAKKyAgICAgICAgICAgIGlmIChjb250ZXh0U2VjdXJpdHlPcmlnaW4pIHsKKyAgICAg
ICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0TGlzdC5jb250ZXh0QnlTZWN1cml0eU9y
aWdpbihjb250ZXh0U2VjdXJpdHlPcmlnaW4pOworICAgICAgICAgICAgICAgIGlmICghY29udGV4
dCkgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oIlRoZSBKUyBjb250ZXh0ICIg
KyBjb250ZXh0U2VjdXJpdHlPcmlnaW4gKyAiIHdhcyBub3QgZm91bmQgaW4gdGhlIGZyYW1lICIg
KyBmcmFtZS51cmwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0dXMuRV9O
T1RGT1VORChjb250ZXh0U2VjdXJpdHlPcmlnaW4pCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gZnJhbWVDb250ZXh0TGlz
dC5tYWluV29ybGRDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0KSAKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXR1cy5FX0ZBSUxFRChmcmFtZS51cmwg
KyAiIGhhcyBubyBleGVjdXRpb24gY29udGV4dCIpOworICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBjb250ZXh0SWQgPSBjb250ZXh0LmlkOwogICAgICAgICB9CiAgICAgICAgIFJ1bnRpbWVB
Z2VudC5ldmFsdWF0ZShleHByZXNzaW9uLCAiZXh0ZW5zaW9uIiwgZXhwb3NlQ29tbWFuZExpbmVB
UEksIHRydWUsIGNvbnRleHRJZCwgcmV0dXJuQnlWYWx1ZSwgZmFsc2UsIGNhbGxiYWNrKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVl
TW9kZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlVHJl
ZU1vZGVsLmpzCmluZGV4IGYyNmM3OTE4ZjY1N2RlYWU1NDE0ZDY5ODkyZGRjODZiZmQxMWZkMGMu
LmEyYzliZmQ0ZWZjY2E0ODU0NjA3NWMyMTBhMWVjYzBiOGEwOWJlMjcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VUcmVlTW9kZWwuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9SZXNvdXJjZVRyZWVNb2RlbC5q
cwpAQCAtMzAxLDYgKzMwMSwxNCBAQCBXZWJJbnNwZWN0b3IuUmVzb3VyY2VUcmVlTW9kZWwucHJv
dG90eXBlID0gewogICAgIH0sCiAKICAgICAvKioKKyAgICAgKiBAcmV0dXJuIHtBcnJheS48V2Vi
SW5zcGVjdG9yLlJlc291cmNlVHJlZUZyYW1lPn0KKyAgICAgKi8KKyAgICBmcmFtZXM6IGZ1bmN0
aW9uKCkgCisgICAgeworICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9mcmFtZXMp
OworICAgIH0sCisKKyAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5FdmVudH0g
ZXZlbnQKICAgICAgKi8KICAgICBfY29uc29sZU1lc3NhZ2VBZGRlZDogZnVuY3Rpb24oZXZlbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1J1bnRpbWVN
b2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVs
LmpzCmluZGV4IGM1YmRlZWIwYTk0MjZjODgzNGIxM2M3ZGFjNGM5NTI2ZjYwYWEwNzcuLmFiZDdj
MzgwZmQ4ZmYyYjZkZjUyZDQ5ZmU0YmFkMTUxMTJlYjJmZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUnVudGltZU1vZGVsLmpzCkBAIC03NCwxMiArNzQs
MTEgQEAgV2ViSW5zcGVjdG9yLlJ1bnRpbWVNb2RlbC5wcm90b3R5cGUgPSB7CiAKICAgICAvKioK
ICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5SZXNvdXJjZVRyZWVGcmFtZX0gZnJhbWUKLSAg
ICAgKiBAcGFyYW0ge3N0cmluZ30gc2VjdXJpdHlPcmlnaW4KKyAgICAgKiBAcmV0dXJuIHtXZWJJ
bnNwZWN0b3IuRnJhbWVFeGVjdXRpb25Db250ZXh0TGlzdH0KICAgICAgKi8KLSAgICBjb250ZXh0
QnlGcmFtZUFuZFNlY3VyaXR5T3JpZ2luOiBmdW5jdGlvbihmcmFtZSwgc2VjdXJpdHlPcmlnaW4p
CisgICAgY29udGV4dExpc3RCeUZyYW1lOiBmdW5jdGlvbihmcmFtZSkKICAgICB7Ci0gICAgICAg
IHZhciBmcmFtZUNvbnRleHQgPSB0aGlzLl9mcmFtZUlkVG9Db250ZXh0TGlzdFtmcmFtZS5pZF07
Ci0gICAgICAgIHJldHVybiBmcmFtZUNvbnRleHQgJiYgZnJhbWVDb250ZXh0LmNvbnRleHRCeVNl
Y3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2luKTsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2ZyYW1l
SWRUb0NvbnRleHRMaXN0W2ZyYW1lLmlkXTsKICAgICB9LAogCiAgICAgX2ZyYW1lQWRkZWQ6IGZ1
bmN0aW9uKGV2ZW50KQpAQCAtNDEzLDYgKzQxMiwxMSBAQCBXZWJJbnNwZWN0b3IuRnJhbWVFeGVj
dXRpb25Db250ZXh0TGlzdC5wcm90b3R5cGUgPQogICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0
aW9uQ29udGV4dHM7CiAgICAgfSwKIAorICAgIG1haW5Xb3JsZENvbnRleHQ6IGZ1bmN0aW9uKCkg
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fZXhlY3V0aW9uQ29udGV4dHNbMF07CisgICAg
fSwKKwogICAgIC8qKgogICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzZWN1cml0eU9yaWdpbgogICAg
ICAqLwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDMwNjE4ZTQyZTQzZDM0ODFjYWU2YmMxZGI1OGRjYzc0ZjA2ZjFjNTUuLjU1
ODNlMGMxYmI4M2ExMjdhMTM2YWU3ODEwZTQ0N2M4NTQzYTgxZWUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NiBAQAorMjAxMy0wMi0xMyAgSm9obiBKLiBCYXJ0b24gIDxqb2huamJhcnRvbkBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIGlmcmFtZSBvcHRpb24gdG8gaW5zcGVj
dGVkV2luZG93LmV2YWwoKSBleHRlbnNpb24gQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDY4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgdGVzdHMgZm9yIGV2YWx1YXRlIGluIGlmcmFtZSBv
cHRpb25zIGluIGV4dGVuc2lvbiBBUEkgCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rv
ci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
aHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBodHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFt
ZS1ldmFsLmh0bWw6IEFkZGVkLgorCiAyMDEzLTAzLTE4ICBFbWlsIEEgRWtsdW5kICA8ZWFlQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBDaGFuZ2UgUmVuZGVyVGFibGVDZWxsIHRvIHVzZSBwaXhl
bFNuYXBwZWRTaXplIHdoZW4gcGFpbnRpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvZXh0ZW5zaW9ucy1pZnJhbWUtZXZhbC1leHBl
Y3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjg0YzM2MGRjOWZkZWU1YWNjMmM4ZGU3YjA0Yzk2N2YxM2I1
OGZmNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2V4dGVuc2lvbnMtaWZyYW1lLWV2YWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rl
c3RzIFdlYkluc3BlY3RvciBleHRlbnNpb24gQVBJCisKKworU3RhcnRlZCBleHRlbnNpb24uCitS
dW5uaW5nIHRlc3RzLi4uCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0RXZhbEluSUZyYW1l
CitFdmFsdWF0ZTogIi9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5o
dG1sIiAoZXhjZXB0aW9uOiB1bmRlZmluZWQpCitSVU5OSU5HIFRFU1Q6IGV4dGVuc2lvbl90ZXN0
RXZhbEluSUZyYW1lQmFkT3B0aW9uCitsb2c6IEV4dGVuc2lvbiBzZXJ2ZXIgZXJyb3I6IE9iamVj
dCBub3QgZm91bmQ6IGJvZ3VzCitFdmFsdWF0ZTogdW5kZWZpbmVkIChleGNlcHRpb246IFtvYmpl
Y3QgT2JqZWN0XSkKK0FsbCB0ZXN0cyBkb25lLgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLmh0bWwgYi9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9leHRlbnNpb25zLWlmcmFtZS1ldmFsLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uY2Y5MWIxNTZlNGMyYzI2YTA3ZjY5YThhODNlYmMyYjgyMzcyYzM2OQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2V4dGVuc2lvbnMt
aWZyYW1lLWV2YWwuaHRtbApAQCAtMCwwICsxLDQxIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Imluc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJleHRlbnNp
b25zLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
CitmdW5jdGlvbiBleHRlbnNpb25fdGVzdEV2YWxJbklGcmFtZShuZXh0VGVzdCkgCit7CisgICAg
dmFyIHVybCA9ICdodHRwOi8vMTI3LjAuMC4xOjgwMDAvaW5zcGVjdG9yL3Jlc291cmNlcy9leHRl
bnNpb25zLWZyYW1lLWV2YWwuaHRtbCc7CisgICAgdmFyIG9yaWdpbiA9ICJodHRwOi8vMTI3LjAu
MC4xOjgwMDAiCisgICAgdmFyIG9wdGlvbnMgPSB7CisgICAgICAgIGZyYW1lVVJMOiB1cmwKKyAg
ICB9OworICAgIHZhciBsb2MgPSAid2luZG93LmxvY2F0aW9uLnBhdGhuYW1lIjsKKyAgICB3ZWJJ
bnNwZWN0b3IuaW5zcGVjdGVkV2luZG93LmV2YWwobG9jLCBvcHRpb25zLCBjYWxsYmFja0FuZE5l
eHRUZXN0KGV4dGVuc2lvbl9vbkV2YWwsIG5leHRUZXN0KSk7Cit9CisKK2Z1bmN0aW9uIGV4dGVu
c2lvbl90ZXN0RXZhbEluSUZyYW1lQmFkT3B0aW9uKG5leHRUZXN0KSAKK3sKKyAgICB2YXIgdXJs
ID0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODAwMC9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMt
ZnJhbWUtZXZhbC5odG1sJzsKKyAgICB2YXIgb3JpZ2luID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAw
MCIKKyAgICB2YXIgb3B0aW9ucyA9IHsKKyAgICAgICAgZnJhbWVVUkw6IHVybCwKKyAgICAgICAg
c2NyaXB0RXhlY3V0aW9uQ29udGV4dDogImJvZ3VzIgorICAgIH07CisgICAgdmFyIGxvYyA9ICJ3
aW5kb3cubG9jYXRpb24ucGF0aG5hbWUiOworICAgIHdlYkluc3BlY3Rvci5pbnNwZWN0ZWRXaW5k
b3cuZXZhbChsb2MsIG9wdGlvbnMsIGNhbGxiYWNrQW5kTmV4dFRlc3QoZXh0ZW5zaW9uX29uRXZh
bCwgbmV4dFRlc3QpKTsKK30KKworZnVuY3Rpb24gZXh0ZW5zaW9uX29uRXZhbCh2YWx1ZSwgaXNF
eGNlcHRpb24pCit7CisgICAgb3V0cHV0KCJFdmFsdWF0ZTogIiArIEpTT04uc3RyaW5naWZ5KHZh
bHVlKSArICIgKGV4Y2VwdGlvbjogIiArIGlzRXhjZXB0aW9uICsgIikiKTsKK30KKworPC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+Cis8cD5UZXN0cyBXZWJJbnNw
ZWN0b3IgZXh0ZW5zaW9uIEFQSTwvcD4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvZXh0ZW5zaW9u
cy1mcmFtZS1ldmFsLmh0bWwiPjwvaWZyYW1lPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL2V4dGVuc2lvbnMt
ZnJhbWUtZXZhbC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvcmVzb3Vy
Y2VzL2V4dGVuc2lvbnMtZnJhbWUtZXZhbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUwMzI3MWMxN2RiZmNi
ZTc5YTMzNjlmYjU3N2JiNGM1NDY2MGIzMWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvZXh0ZW5zaW9ucy1mcmFtZS1ldmFsLmh0
bWwKQEAgLTAsMCArMSw2IEBACis8aHRtbD4KKzxzY3JpcHQ+CisvLyBTb21lIEpTIHRvIGNyZWF0
ZSBhIGNvbnRleHQKK3dpbmRvdy5pQW1BbklGcmFtZSA9IHRydWU7Cis8L3NjcmlwdD4KKzwvaHRt
bD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>