<?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>34930</bug_id>
          
          <creation_ts>2010-02-14 09:49:05 -0800</creation_ts>
          <short_desc>Implement interactive validation for forms</short_desc>
          <delta_ts>2010-04-09 11:06:02 -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>Forms</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>
          
          <blocked>28649</blocked>
    
    <blocked>37345</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kent Tamura">tkent</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>jwalden+bwo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>webmaster</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>190330</commentid>
    <comment_count>0</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-14 09:49:05 -0800</bug_when>
    <thetext>Implement interactive validation for forms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190331</commentid>
    <comment_count>1</comment_count>
      <attachid>48728</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-14 10:02:54 -0800</bug_when>
    <thetext>Created attachment 48728
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190332</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-14 10:14:01 -0800</bug_when>
    <thetext>Attachment 48728 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/266857</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>191487</commentid>
    <comment_count>3</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-02-18 01:33:39 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Attachment 48728 [details] did not build on chromium:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/266857

&gt; ../../WebCore/html/HTMLFormElement.cpp:319: error: invalid use of incomplete type ‘struct WebCore::DOMWindow’

I&apos;ll fix this on the next patch update or landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202505</commentid>
    <comment_count>4</comment_count>
      <attachid>48728</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-22 08:26:06 -0700</bug_when>
    <thetext>Comment on attachment 48728
Proposed patch

This looks reasonable, but you need to spin up a new patch because this break the Chromium build and there are few nits:

+ contorol
^^ Typo

+ unsigned i

We usually use int for these sorts of loops.

+ message.replace(&quot;%name&quot;, unhandled-&gt;name());

Please use String::format()

I&apos;m also not super excited about adding a bunch of random arguments to these functions.  Can we abstract this better somehow?  Also, the loop in HTMLFormElement::prepareSubmit is pretty complicated, mostly just so we can print more messages to the console.  Can we simplify this somehow?

Sorry for the delay in reviewing your patch (and the lame review).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202669</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-22 12:11:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; + message.replace(&quot;%name&quot;, unhandled-&gt;name());
&gt; 
&gt; Please use String::format()

I&apos;m not sure that&apos;s better. A replace is safer and possibly faster. And String::format doesn&apos;t handle non-ASCII characters well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203003</commentid>
    <comment_count>6</comment_count>
      <attachid>51414</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 05:28:07 -0700</bug_when>
    <thetext>Created attachment 51414
Proposed patch (rev.2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203005</commentid>
    <comment_count>7</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-03-23 05:37:23 -0700</bug_when>
    <thetext>Thank you for reviewing!

(In reply to comment #4)
&gt; + contorol
&gt; ^^ Typo

Fixed.

&gt; + unsigned i
&gt; We usually use int for these sorts of loops.

I don&apos;t agree with it. &apos;int&apos; makes a warning about signed vs. unsigned in this case, and the number of &quot;for (unsigned&quot; is greater than &quot;for (size_t&quot; in WebCore.

&gt; I&apos;m also not super excited about adding a bunch of random arguments to these
&gt; functions.  Can we abstract this better somehow? 

I have no good idea.  As for the additional parameter of checkValidity(), it was planed when checkValidity() was added.  The proposed patch for the original checkValidity() had the parameter for the preparation of this change, but it was removed during the code review.

&gt; Also, the loop in
&gt; HTMLFormElement::prepareSubmit is pretty complicated, mostly just so we can
&gt; print more messages to the console.  Can we simplify this somehow?

I improved it a little.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204272</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-03-25 15:56:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; + message.replace(&quot;%name&quot;, unhandled-&gt;name());
&gt; &gt; 
&gt; &gt; Please use String::format()
&gt; 
&gt; I&apos;m not sure that&apos;s better. A replace is safer and possibly faster. And
&gt; String::format doesn&apos;t handle non-ASCII characters well.

Ah, interesting.  The other parts of the codebase I&apos;ve seen have used format, but it&apos;s good to understand the trade-offs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209024</commentid>
    <comment_count>9</comment_count>
      <attachid>52630</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-06 06:52:32 -0700</bug_when>
    <thetext>Created attachment 52630
Proposed patch (rev.3)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209025</commentid>
    <comment_count>10</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-06 06:53:42 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Created an attachment (id=52630) [details]
&gt; Proposed patch (rev.3)

- Fixed whitespace in a comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209181</commentid>
    <comment_count>11</comment_count>
      <attachid>52630</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-06 12:42:11 -0700</bug_when>
    <thetext>Comment on attachment 52630
Proposed patch (rev.3)

&gt; -            form()-&gt;prepareSubmit(evt);
&gt; +            form()-&gt;prepareSubmit(evt, this);

Why is this needed? I would think that either event-&gt;target() or event-&gt;currentTarget() would give us the element.

&gt; -bool HTMLFormControlElement::checkValidity()
&gt; +bool HTMLFormControlElement::checkValidity(Vector&lt;HTMLFormControlElement*&gt;* unhandledInvalidControls)

This vector should hold RefPtr&lt;HTMLFormControlElement&gt; instead of a raw pointer. Dispatching to arbitrary JavaScript code could easily make these elements go away, so we can&apos;t just hold a raw pointer to them.

We should construct test cases with tricky event handlers for the invalid event to see if we can reproduce these kinds of bad behavior. It&apos;s critical we not introduce something that could be exploited as a security vulnerability.

&gt; -        dispatchEvent(Event::create(eventNames().invalidEvent, false, true));
&gt; +        bool needsDefaultAction = dispatchEvent(Event::create(eventNames().invalidEvent, false, true));
&gt; +        if (needsDefaultAction &amp;&amp; unhandledInvalidControls)
&gt; +            unhandledInvalidControls-&gt;append(this);

What guarantees that &quot;this&quot; is still good? I think it&apos;s possible that the event dispatch could remove the last reference to this form control element and so it could be deallocated by the time we return. Same comment as above.

&gt; +                HTMLFormControlElement* unhandled = unhandledInvalidControls[i];
&gt; +                if (unhandled-&gt;isFocusable()) {
&gt; +                    unhandled-&gt;scrollIntoViewIfNeeded(false);
&gt; +                    unhandled-&gt;focus();
&gt; +                    break;
&gt; +                }

We should think through the case where this control is no longer in the document, or not visible.

&gt; +            // Warn about all of unforcusable controls.

Typo: &quot;unforcusable&quot;.

&gt; +            Frame* frame = document()-&gt;frame();

Scrolling and focusing may have triggered an event handler, which may have deleted this form element. So calling document() at this point may not work. Need to double check that we handle that case. Similar issue with the code later on that sets m_insubmit to false.

&gt; +            for (unsigned i = 0; frame &amp;&amp; i &lt; unhandledInvalidControls.size(); ++i) {
&gt; +                HTMLFormControlElement* unhandled = unhandledInvalidControls[i];
&gt; +                if (unhandled-&gt;isFocusable())
&gt; +                    continue;
&gt; +                String message(&quot;An invalid form control with name=&apos;%name&apos; is not user-editable.&quot;);
&gt; +                message.replace(&quot;%name&quot;, unhandled-&gt;name());
&gt; +                frame-&gt;domWindow()-&gt;console()-&gt;addMessage(HTMLMessageSource, LogMessageType, ErrorMessageLevel, message, 0, document()-&gt;url().string());
&gt; +            }

I don&apos;t completely understand the goal here. You say &quot;not user-editable&quot; even though the code checks &quot;isFocusable&quot;. Could you give a concrete exmple so I can understand why this is useful?

&gt; +    return !unhandledInvalidControls.size();

I think this would read better if you used the isEmpty function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209368</commentid>
    <comment_count>12</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-06 18:06:21 -0700</bug_when>
    <thetext>Thank you for reviewing!
Your review is definitely helpful.

(In reply to comment #11)
&gt; (From update of attachment 52630 [details])
&gt; &gt; -            form()-&gt;prepareSubmit(evt);
&gt; &gt; +            form()-&gt;prepareSubmit(evt, this);
&gt; 
&gt; Why is this needed? I would think that either event-&gt;target() or
&gt; event-&gt;currentTarget() would give us the element.

You&apos;re right.  Removed the parameter.

&gt; &gt; -bool HTMLFormControlElement::checkValidity()
&gt; &gt; +bool HTMLFormControlElement::checkValidity(Vector&lt;HTMLFormControlElement*&gt;* unhandledInvalidControls)
&gt; 
&gt; This vector should hold RefPtr&lt;HTMLFormControlElement&gt; instead of a raw
&gt; pointer. Dispatching to arbitrary JavaScript code could easily make these
&gt; elements go away, so we can&apos;t just hold a raw pointer to them.

I see.  I have added a test which removed a node in an event handler, and confirmed it caused a crash.
I changed it to RefPtr&lt;HTMLFormControlElement&gt;.

&gt; &gt; -        dispatchEvent(Event::create(eventNames().invalidEvent, false, true));
&gt; &gt; +        bool needsDefaultAction = dispatchEvent(Event::create(eventNames().invalidEvent, false, true));
&gt; &gt; +        if (needsDefaultAction &amp;&amp; unhandledInvalidControls)
&gt; &gt; +            unhandledInvalidControls-&gt;append(this);
&gt; 
&gt; What guarantees that &quot;this&quot; is still good? I think it&apos;s possible that the event
&gt; dispatch could remove the last reference to this form control element and so it
&gt; could be deallocated by the time we return. Same comment as above.

Added protections for &apos;this&apos; by RefPtr.

&gt; &gt; +                HTMLFormControlElement* unhandled = unhandledInvalidControls[i];
&gt; &gt; +                if (unhandled-&gt;isFocusable()) {
&gt; &gt; +                    unhandled-&gt;scrollIntoViewIfNeeded(false);
&gt; &gt; +                    unhandled-&gt;focus();
&gt; &gt; +                    break;
&gt; &gt; +                }
&gt; 
&gt; We should think through the case where this control is no longer in the
&gt; document, or not visible.

Added another check for isFocusable() before focus().

&gt; &gt; +            // Warn about all of unforcusable controls.
&gt; 
&gt; Typo: &quot;unforcusable&quot;.

Fixed.

&gt; 
&gt; &gt; +            Frame* frame = document()-&gt;frame();
&gt; 
&gt; Scrolling and focusing may have triggered an event handler, which may have
&gt; deleted this form element. So calling document() at this point may not work.
&gt; Need to double check that we handle that case. Similar issue with the code
&gt; later on that sets m_insubmit to false.

Added protection for the form element by RefPtr.


&gt; &gt; +            for (unsigned i = 0; frame &amp;&amp; i &lt; unhandledInvalidControls.size(); ++i) {
&gt; &gt; +                HTMLFormControlElement* unhandled = unhandledInvalidControls[i];
&gt; &gt; +                if (unhandled-&gt;isFocusable())
&gt; &gt; +                    continue;
&gt; &gt; +                String message(&quot;An invalid form control with name=&apos;%name&apos; is not user-editable.&quot;);
&gt; &gt; +                message.replace(&quot;%name&quot;, unhandled-&gt;name());
&gt; &gt; +                frame-&gt;domWindow()-&gt;console()-&gt;addMessage(HTMLMessageSource, LogMessageType, ErrorMessageLevel, message, 0, document()-&gt;url().string());
&gt; &gt; +            }
&gt; 
&gt; I don&apos;t completely understand the goal here. You say &quot;not user-editable&quot; even
&gt; though the code checks &quot;isFocusable&quot;. Could you give a concrete exmple so I can
&gt; understand why this is useful?

I changed &quot;not user-editable&quot; to &quot;not focusable&quot;.  It was confusing.
HTML5 spec asks to warn about this case.  It is useful for page authors to notify that users can not make this form valid.

&gt; &gt; +    return !unhandledInvalidControls.size();
&gt; 
&gt; I think this would read better if you used the isEmpty function.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209369</commentid>
    <comment_count>13</comment_count>
      <attachid>52689</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-06 18:08:58 -0700</bug_when>
    <thetext>Created attachment 52689
Proposed patch (rev.4)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209377</commentid>
    <comment_count>14</comment_count>
      <attachid>52691</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-06 18:20:05 -0700</bug_when>
    <thetext>Created attachment 52691
Proposed patch (rev.5)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209452</commentid>
    <comment_count>15</comment_count>
      <attachid>52691</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-06 22:28:47 -0700</bug_when>
    <thetext>Comment on attachment 52691
Proposed patch (rev.5)

Getting better, but I still think this needs work.

&gt; +     if (needsDefaultAction &amp;&amp; unhandledInvalidControls &amp;&amp; inDocument())
&gt; +         unhandledInvalidControls-&gt;append(this);

Besides checking inDocument() I think you might want to check that it&apos;s still in the same document, and hasn&apos;t been moved into another.

&gt; +    // Interactive validation must be done before dispatching the submit event.
&gt; +    HTMLFormControlElement* submitElement = 0;
&gt; +    Node* targetNode = event-&gt;target()-&gt;toNode();
&gt; +    if (targetNode &amp;&amp; targetNode-&gt;isElementNode()) {
&gt; +        Element* targetElement = static_cast&lt;Element*&gt;(targetNode);
&gt; +        if (targetElement-&gt;isFormControlElement())
&gt; +            submitElement = static_cast&lt;HTMLFormControlElement*&gt;(targetElement);
&gt; +    }

Seems like all that logic could go after the !noValidate() check, inside an if statement.

&gt; +                ASSERT(unhandled-&gt;hasOneRef());

This assertion is wrong. How can you be sure this has exactly one ref? I think perhaps you misunderstand the meaning of the hasOneRef function. There&apos;s really no way to assert that the pointer is in a RefPtr, but there&apos;s no need to assert that either.

&gt; +                if (unhandled-&gt;isFocusable()) {
&gt; +                    unhandled-&gt;scrollIntoViewIfNeeded(false);
&gt; +                    // scrollIntoViewIfNeeded() dispatches events, so the state
&gt; +                    // of &apos;unhandled&apos; might be changed.
&gt; +                    if (unhandled-&gt;isFocusable()) {
&gt; +                        unhandled-&gt;focus();
&gt; +                        break;
&gt; +                    }
&gt; +                }

I think you should go further and say &quot;the state of &apos;unhandled&apos; might be changed so it&apos;s no longer focusable.&quot;

But further, is isFocusable the only check you need to make? Don&apos;t we need to check other things like inDocument, too? Probably also need to check it&apos;s still in the same document and hasn&apos;t been moved into another.

&gt; +            // Warn about all of unforcusable controls.

Typo: &quot;unforcusable&quot;.

&gt; +bool HTMLFormElement::checkValidity(Vector&lt;RefPtr&lt;HTMLFormControlElement&gt; &gt;&amp; unhandledInvalidControls)
&gt; +{
&gt; +    RefPtr&lt;HTMLFormElement&gt; protector(this);
&gt;      for (unsigned i = 0; i &lt; formElements.size(); ++i) {
&gt;          HTMLFormControlElement* control = formElements[i];
&gt; +        control-&gt;checkValidity(&amp;unhandledInvalidControls);
&gt;      }
&gt; +    return unhandledInvalidControls.isEmpty();
&gt;  }

The name &quot;checkValidity&quot; doesn&apos;t seem quite right for this function. I would call it something more like collectUnhandledInvalidControls. I also think there&apos;s no need to have it return a boolean. The caller can check if the vector is empty or not.

I don&apos;t understand, though, why these are &quot;unhandled invalid controls&quot; rather than just &quot;invalid controls&quot;. What are &quot;handled invalid controls&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209543</commentid>
    <comment_count>16</comment_count>
      <attachid>52717</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-07 02:23:34 -0700</bug_when>
    <thetext>Created attachment 52717
Proposed patch (rev.6)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209545</commentid>
    <comment_count>17</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-07 02:34:00 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; +     if (needsDefaultAction &amp;&amp; unhandledInvalidControls &amp;&amp; inDocument())
&gt; &gt; +         unhandledInvalidControls-&gt;append(this);
&gt; 
&gt; Besides checking inDocument() I think you might want to check that it&apos;s still
&gt; in the same document, and hasn&apos;t been moved into another.

Oh, I thought a node couldn&apos;t be moved to another document.  Right, Webkit supports node adopting.
I added document() check.

&gt; 
&gt; &gt; +    // Interactive validation must be done before dispatching the submit event.
&gt; &gt; +    HTMLFormControlElement* submitElement = 0;
&gt; &gt; +    Node* targetNode = event-&gt;target()-&gt;toNode();
&gt; &gt; +    if (targetNode &amp;&amp; targetNode-&gt;isElementNode()) {
&gt; &gt; +        Element* targetElement = static_cast&lt;Element*&gt;(targetNode);
&gt; &gt; +        if (targetElement-&gt;isFormControlElement())
&gt; &gt; +            submitElement = static_cast&lt;HTMLFormControlElement*&gt;(targetElement);
&gt; &gt; +    }
&gt; 
&gt; Seems like all that logic could go after the !noValidate() check, inside an if
&gt; statement.

Right.  Fixed.
And I moved the additional code in prepareSubmit() to another function.

&gt; &gt; +                ASSERT(unhandled-&gt;hasOneRef());
&gt; 
&gt; This assertion is wrong. How can you be sure this has exactly one ref? I think
&gt; perhaps you misunderstand the meaning of the hasOneRef function. There&apos;s really
&gt; no way to assert that the pointer is in a RefPtr, but there&apos;s no need to assert
&gt; that either.

I misunderstood it was refCount() &gt; 0.  Removed.

&gt; &gt; +                if (unhandled-&gt;isFocusable()) {
&gt; &gt; +                    unhandled-&gt;scrollIntoViewIfNeeded(false);
&gt; &gt; +                    // scrollIntoViewIfNeeded() dispatches events, so the state
&gt; &gt; +                    // of &apos;unhandled&apos; might be changed.
&gt; &gt; +                    if (unhandled-&gt;isFocusable()) {
&gt; &gt; +                        unhandled-&gt;focus();
&gt; &gt; +                        break;
&gt; &gt; +                    }
&gt; &gt; +                }
&gt; 
&gt; I think you should go further and say &quot;the state of &apos;unhandled&apos; might be
&gt; changed so it&apos;s no longer focusable.&quot;
&gt; 
&gt; But further, is isFocusable the only check you need to make? Don&apos;t we need to
&gt; check other things like inDocument, too? Probably also need to check it&apos;s still
&gt; in the same document and hasn&apos;t been moved into another.

Add document() check and updated the comment.
I don&apos;t think inDocument check is required because a focusable element must be inDocument().

&gt; &gt; +            // Warn about all of unforcusable controls.
&gt; 
&gt; Typo: &quot;unforcusable&quot;.

Oops, fixed.

&gt; &gt; +bool HTMLFormElement::checkValidity(Vector&lt;RefPtr&lt;HTMLFormControlElement&gt; &gt;&amp; unhandledInvalidControls)
&gt; &gt; +{
&gt; &gt; +    RefPtr&lt;HTMLFormElement&gt; protector(this);
&gt; &gt;      for (unsigned i = 0; i &lt; formElements.size(); ++i) {
&gt; &gt;          HTMLFormControlElement* control = formElements[i];
&gt; &gt; +        control-&gt;checkValidity(&amp;unhandledInvalidControls);
&gt; &gt;      }
&gt; &gt; +    return unhandledInvalidControls.isEmpty();
&gt; &gt;  }
&gt; 
&gt; The name &quot;checkValidity&quot; doesn&apos;t seem quite right for this function. I would
&gt; call it something more like collectUnhandledInvalidControls. I also think
&gt; there&apos;s no need to have it return a boolean. The caller can check if the vector
&gt; is empty or not.

I changed it to &quot;void collectUnhandledInvalidControls()&quot;.

&gt; I don&apos;t understand, though, why these are &quot;unhandled invalid controls&quot; rather
&gt; than just &quot;invalid controls&quot;. What are &quot;handled invalid controls&quot;?

It means, invalid controls of which &apos;invalid&apos; event was canceled are not registered into the vector.
&quot;Unhandled invalid controls&quot; is a term in the HTML5 specification.
http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#constraint-validation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210418</commentid>
    <comment_count>18</comment_count>
      <attachid>52900</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-08 15:12:41 -0700</bug_when>
    <thetext>Created attachment 52900
Proposed patch (rev.7)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210419</commentid>
    <comment_count>19</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-08 15:13:10 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Created an attachment (id=52900) [details]
&gt; Proposed patch (rev.7)

* Fixed a typo in a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210767</commentid>
    <comment_count>20</comment_count>
      <attachid>52900</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-09 09:38:27 -0700</bug_when>
    <thetext>Comment on attachment 52900
Proposed patch (rev.7)

Basics look great here, but the edge cases are still not quite right.

&gt; +description(&apos;Test if the form is submitted when an &quot;invalid&quot; evnet for a control is canceled.&apos;);

Typo: &quot;evnet&quot;

&gt; +    Document* originalDocument = document();

This should be a RefPtr. I don&apos;t know what guarantees the document will still be around after dispatching the event in pathological cases. There there may be some subtle guarantee I can&apos;t spot, but I think it would be best to not make the code depend on something that subtle when using a RefPtr would eliminate the risk.

Also, the document == originalDocument check does not replace the inDocument check. I&apos;m not sure why you removed the inDocument check. That covers elements that are no longer in the document tree. I think you should have a test case that covers that and restore the inDocument check.

&gt; +    HTMLFormControlElement* submitElement = 0;
&gt; +    Node* targetNode = event-&gt;target()-&gt;toNode();
&gt; +    if (targetNode &amp;&amp; targetNode-&gt;isElementNode()) {
&gt; +        Element* targetElement = static_cast&lt;Element*&gt;(targetNode);
&gt; +        if (targetElement-&gt;isFormControlElement())
&gt; +            submitElement = static_cast&lt;HTMLFormControlElement*&gt;(targetElement);
&gt; +    }

Breaking this out into a helper function would make the code easier to read. Just a suggestion -- the function this code is in is getting a bit long.

&gt; +            Document* originalDocument = unhandled-&gt;document();

May need to be a RefPtr for the same reason as above. Same inDocument issue as above.

&gt; +    Frame* frame = document()-&gt;frame();
&gt; +    for (unsigned i = 0; frame &amp;&amp; i &lt; unhandledInvalidControls.size(); ++i) {

Doesn&apos;t make sense to have &quot;frame&quot; in the loop condition. The value of &quot;frame&quot; does not change as we iterate through the loop.

&gt; +    RefPtr&lt;HTMLFormElement&gt; protector(this);
&gt; +    for (unsigned i = 0; i &lt; formElements.size(); ++i)
&gt; +        formElements[i]-&gt;checkValidity(&amp;unhandledInvalidControls);
&gt;  }

The protector here doesn&apos;t seem to cover all the issues. The code iterates the form elements vector while it may be changing. This means that we could end up iterating the same element more than once or skipping an element if an element is removed or added earlier in the vector than where we are in the iteration. We should figure out how we want to handle cases where the event dispatch adds or removes elements from the form. One approach would be to copy the elements into a Vector&lt;RefPtr&lt;...&gt;&gt; before we begin and iterate that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210790</commentid>
    <comment_count>21</comment_count>
      <attachid>52964</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-09 10:28:16 -0700</bug_when>
    <thetext>Created attachment 52964
Proposed patch (rev.8)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210796</commentid>
    <comment_count>22</comment_count>
      <attachid>52966</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-09 10:35:48 -0700</bug_when>
    <thetext>Created attachment 52966
Proposed patch (rev.9)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210797</commentid>
    <comment_count>23</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-09 10:36:14 -0700</bug_when>
    <thetext>Thank you for really helpful review!

(In reply to comment #20)
&gt; &gt; +description(&apos;Test if the form is submitted when an &quot;invalid&quot; evnet for a control is canceled.&apos;);
&gt; Typo: &quot;evnet&quot;

Fixed. Fixed another &quot;evnet&quot; too.

&gt; &gt; +    Document* originalDocument = document();
&gt; 
&gt; This should be a RefPtr. I don&apos;t know what guarantees the document will still
&gt; be around after dispatching the event in pathological cases. There there may be
&gt; some subtle guarantee I can&apos;t spot, but I think it would be best to not make
&gt; the code depend on something that subtle when using a RefPtr would eliminate
&gt; the risk.

I see.  Changed to RefPtr&lt;Document&gt;.

&gt; Also, the document == originalDocument check does not replace the inDocument
&gt; check. I&apos;m not sure why you removed the inDocument check. That covers elements
&gt; that are no longer in the document tree. I think you should have a test case
&gt; that covers that and restore the inDocument check.

Fixed.

&gt; &gt; +    HTMLFormControlElement* submitElement = 0;
&gt; &gt; +    Node* targetNode = event-&gt;target()-&gt;toNode();
&gt; &gt; +    if (targetNode &amp;&amp; targetNode-&gt;isElementNode()) {
&gt; &gt; +        Element* targetElement = static_cast&lt;Element*&gt;(targetNode);
&gt; &gt; +        if (targetElement-&gt;isFormControlElement())
&gt; &gt; +            submitElement = static_cast&lt;HTMLFormControlElement*&gt;(targetElement);
&gt; &gt; +    }
&gt; 
&gt; Breaking this out into a helper function would make the code easier to read.
&gt; Just a suggestion -- the function this code is in is getting a bit long.

Made a function.

&gt; &gt; +            Document* originalDocument = unhandled-&gt;document();
&gt; May need to be a RefPtr for the same reason as above. Same inDocument issue as
&gt; above.

Fixed.

&gt; &gt; +    Frame* frame = document()-&gt;frame();
&gt; &gt; +    for (unsigned i = 0; frame &amp;&amp; i &lt; unhandledInvalidControls.size(); ++i) {
&gt; 
&gt; Doesn&apos;t make sense to have &quot;frame&quot; in the loop condition. The value of &quot;frame&quot;
&gt; does not change as we iterate through the loop.

Fixed.

&gt; &gt; +    RefPtr&lt;HTMLFormElement&gt; protector(this);
&gt; &gt; +    for (unsigned i = 0; i &lt; formElements.size(); ++i)
&gt; &gt; +        formElements[i]-&gt;checkValidity(&amp;unhandledInvalidControls);
&gt; &gt;  }
&gt; 
&gt; The protector here doesn&apos;t seem to cover all the issues. The code iterates the
&gt; form elements vector while it may be changing. This means that we could end up
&gt; iterating the same element more than once or skipping an element if an element
&gt; is removed or added earlier in the vector than where we are in the iteration.
&gt; We should figure out how we want to handle cases where the event dispatch adds
&gt; or removes elements from the form. One approach would be to copy the elements
&gt; into a Vector&lt;RefPtr&lt;...&gt;&gt; before we begin and iterate that.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210801</commentid>
    <comment_count>24</comment_count>
      <attachid>52966</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-09 10:41:26 -0700</bug_when>
    <thetext>Comment on attachment 52966
Proposed patch (rev.9)

&gt; +static inline HTMLFormControlElement* submitElementFrom(const Event* event)

I&apos;d call it submitElementFromEvent instead of leaving the proposition hanging here.

&gt; +    // Copy formElments because event handlers called from

Typo: formElments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210802</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-09 10:41:51 -0700</bug_when>
    <thetext>Could still use some more test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210806</commentid>
    <comment_count>26</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-09 10:44:45 -0700</bug_when>
    <thetext>&gt; Also, the document == originalDocument check does not replace the inDocument
&gt; check. I&apos;m not sure why you removed the inDocument check. That covers elements
&gt; that are no longer in the document tree. I think you should have a test case
&gt; that covers that and restore the inDocument check.

I had no idea to make a condition of &quot;isFocusable() &amp;&amp; !inDocument()&quot;.
interactive-validation-remove-node-in-handler.html removes an invalid control from the document, and it becomes !isFocusable().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210810</commentid>
    <comment_count>27</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-09 10:51:36 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 52966 [details])
&gt; &gt; +static inline HTMLFormControlElement* submitElementFrom(const Event* event)
&gt; 
&gt; I&apos;d call it submitElementFromEvent instead of leaving the proposition hanging
&gt; here.

Fixed.

&gt; &gt; +    // Copy formElments because event handlers called from
&gt; Typo: formElments.

Fixed.


(In reply to comment #25)
&gt; Could still use some more test coverage.

Filed Bug#37345.

I&apos;ll commit the patch with the above fixed.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210811</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-09 10:55:31 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; &gt; Also, the document == originalDocument check does not replace the inDocument
&gt; &gt; check. I&apos;m not sure why you removed the inDocument check. That covers elements
&gt; &gt; that are no longer in the document tree. I think you should have a test case
&gt; &gt; that covers that and restore the inDocument check.
&gt; 
&gt; I had no idea to make a condition of &quot;isFocusable() &amp;&amp; !inDocument()&quot;.
&gt; interactive-validation-remove-node-in-handler.html removes an invalid control
&gt; from the document, and it becomes !isFocusable().

Good point. I&apos;m not sure that condition exists. There are 7 different isFocusable functions, so you&apos;d have to read all of them to double check and figure out what test cases to construct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210816</commentid>
    <comment_count>29</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-04-09 11:06:02 -0700</bug_when>
    <thetext>Landed as r57346.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48728</attachid>
            <date>2010-02-14 10:02:54 -0800</date>
            <delta_ts>2010-03-23 05:28:00 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-34930-20100215030251.patch</filename>
            <type>text/plain</type>
            <size>22150</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNTc5NWI5Li4zMmE1NWJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDIt
MTQgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qczogQWRkZWQu
CisKIDIwMTAtMDItMTMgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBbUXRdIFNraXAgbmV3IHRlc3QgdGhhdCBmYWlscy4gU2VlIGh0dHBzOi8vd2Via2l0
Lm9yZy9iLzM0OTE4LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1Zh
bGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NWM2MzZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorVGVz
dHMgZm9yIGNoZWNrVmFsaWRpdHkoKSB3aXRoIGludmFsaWQgZXZuZXQgY2FuY2VsaW5nCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisiaW52YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNl
bGVkLgorUEFTUyBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgbm90aGluZ0xpc3Rl
bmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlzIHRy
dWUKK1BBU1MgaW52YWxpZEZpcmVkID0gZmFsc2U7ICFmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBp
bnZhbGlkRmlyZWQgaXMgdHJ1ZQorCisiaW52YWxpZCIgZXZlbnQgaXMgY2FuY2VsZWQuCitQQVNT
IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBjYW5jZWxMaXN0ZW5lciwgZmFsc2Up
OyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCBpcyB0cnVlCitQQVNTIGlu
dmFsaWRGaXJlZCA9IGZhbHNlOyBmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQg
aXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5j
ZWwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTMxNzU0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1s
CkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQ0Y2UwCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxp
ZGF0aW9uLWNhbmNlbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitUZXN0IGlmIHRoZSBm
b3JtIGlzIHN1Ym1pdHRlZCB3aGVuIGFuICJpbnZhbGlkIiBldm5ldCBmb3IgYSBjb250cm9sIGlz
IGNhbmNlbGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUaGUgZm9y
bSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2VhcmNoLmluZGV4T2Yo
ImkwPSIpICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJjMzQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNl
bC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJp
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sIj4KKzxpbnB1dCB0eXBlPWhpZGRlbiBu
YW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCByZXF1aXJlZCBpZD0i
aTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2hlbiBhbiAiaW52YWxpZCIg
ZXZuZXQgZm9yIGEgY29udHJvbCBpcyBjYW5jZWxlZC4nKTsKKworZnVuY3Rpb24gY2FuY2VsKGV2
ZW50KSB7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworZnVuY3Rpb24gc3RhcnRP
clZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAg
IGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLicpOworICAgICAgICBz
aG91bGRCZVRydWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAg
ICAgICBkZWJ1ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpMCcp
LmFkZEV2ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBjYW5jZWwsIGZhbHNlKTsKKyAgICAgICAgLy8g
SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhlIHN1Ym1p
dCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xpY2soKTsK
KyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7CisgICAg
fQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1u
b3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41ODk4OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDkgQEAKK1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0dG9u
IHdpdGggZm9ybW5vdmFsaWRhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIFRoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFy
Y2guaW5kZXhPZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1u
b3ZhbGlkYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42OWRiNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9p
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKQEAgLTAsMCArMSwzOCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24t
Zm9ybW5vdmFsaWRhdGUuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQg
dmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0
eXBlPXN1Ym1pdCBpZD0icyIgZm9ybW5vdmFsaWRhdGU+Cis8L2Zvcm0+Cis8c2NyaXB0PgorZGVz
Y3JpcHRpb24oJ1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0
dG9uIHdpdGggZm9ybW5vdmFsaWRhdGUuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7
CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVlcnku
aW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2VkKCdU
aGUgZm9ybSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxkQmVUcnVl
KCdsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAgZGVidWco
J1RFU1QgQ09NUExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlk
YXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMgbm90
IHN1Ym1pdHRlZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9u
bG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3Zh
bGlkYXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zYTViY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsOSBAQAorVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFsaWRhdGUgaXMgc3VibWl0
dGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUaGUgZm9ybSBzaG91
bGQgbm90IGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIp
ICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzhhNmYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92
YWxpZGF0ZS5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0
aW9uPSJpbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbCIgbm92YWxpZGF0ZT4K
KzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQg
bmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwv
Zm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFs
aWRhdGUgaXMgc3VibWl0dGVkLicpOworCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAg
IHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4
T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZv
cm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnbG9j
YXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xJyk7CisgICAgICAgIGRlYnVnKCdURVNU
IENPTVBMRVRFJyk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9u
LiBVc2UgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzJykuY2xpY2soKTsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJt
aXR0ZWQuJyk7CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQg
PSBzdGFydE9yVmVyaWZ5OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1wcmV2ZW50ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc1ZmQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDkgQEAKK1Rlc3QgaWYgYW4gaW52YWxpZCBjb250cm9sIHByZXZlbnRzIGludGVyYWN0aXZlIGZv
cm0gc3VibWlzc2lvbiwgYW5kIHRoZSBmaXJzdCBpbnZhbGlkIGZvY3VzYWJsZSBjb250cm9sIGdl
dHMgZm9jdXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3Jt
IHdhcyBub3Qgc3VibWl0dGVkCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImkyIikKK1RFU1QgQ09NUExFVEUKKyAgIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZl
bnRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmFjNTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0g
aWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwiPgorPGlu
cHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPXRydWU+Cis8aW5wdXQgbmFtZT1p
MCByZXF1aXJlZCBpZD1pMCB2YWx1ZT0iYWJjIj4KKzxpbnB1dCBuYW1lPWkxIHJlcXVpcmVkIGlk
PWkxIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorPGlucHV0IG5hbWU9aTIgcmVxdWlyZWQgaWQ9aTI+
Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9cz4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bignVGVzdCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJhY3RpdmUgZm9ybSBz
dWJtaXNzaW9uLCBhbmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNvbnRyb2wgZ2V0cyBm
b2N1cy4nKTsKKworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3
aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9
dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3VsZCBub3Qg
YmUgc3VibWl0dGVkLicpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvcmNlIHRvIHJlbmRl
ciB0aGUgZm9ybS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYiKS5vZmZzZXRX
aWR0aDsKKyAgICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0
aW9uLiBVc2UgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdzJykuY2xpY2soKTsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gd2FzIG5vdCBz
dWJtaXR0ZWQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQnLCAn
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImkyIiknKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09N
UExFVEUnKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0
LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9z
Y3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODI4M2IxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzCkBAIC0wLDAgKzEs
MzIgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgY2hlY2tWYWxpZGl0eSgpIHdpdGggaW52YWxp
ZCBldm5ldCBjYW5jZWxpbmcnKTsKKwordmFyIHBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYXJlbnQpOworcGFyZW50Lmlu
bmVySFRNTCA9ICc8Zm9ybT48aW5wdXQgbmFtZT1pIHJlcXVpcmVkPjwvZm9ybT4nOwordmFyIGZv
cm0gPSBwYXJlbnQuZmlyc3RDaGlsZDsKK3ZhciBpbnB1dCA9IGZvcm0uZmlyc3RDaGlsZDsKKwor
ZGVidWcoJyJpbnZhbGlkIiBldmVudCBpcyBub3QgY2FuY2VsZWQuJyk7Cit2YXIgaW52YWxpZEZp
cmVkICA9IGZhbHNlOwordmFyIG5vdGhpbmdMaXN0ZW5lciA9IHt9Oworbm90aGluZ0xpc3RlbmVy
LmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpbnZhbGlkRmlyZWQgPSB0cnVl
OworfTsKK3Nob3VsZEJlVHJ1ZSgnaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIG5v
dGhpbmdMaXN0ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRG
aXJlZCcpOworc2hvdWxkQmVUcnVlKCdpbnZhbGlkRmlyZWQgPSBmYWxzZTsgIWZvcm0uY2hlY2tW
YWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCcpOworaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcign
aW52YWxpZCcsIG5vdGhpbmdMaXN0ZW5lciwgZmFsc2UpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
ImludmFsaWQiIGV2ZW50IGlzIGNhbmNlbGVkLicpOworaW52YWxpZEZpcmVkID0gZmFsc2U7Cit2
YXIgY2FuY2VsTGlzdGVuZXIgPSB7fTsKK2NhbmNlbExpc3RlbmVyLmhhbmRsZUV2ZW50ID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICBpbnZhbGlkRmlyZWQgPSB0cnVlOworICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Cit9OworLy8gRXZlbiBpZiAnaW52YWxpZCcgaXMgY2FuY2VsZWQsIHRoZSBp
bnB1dC5jaGVja1ZhbGlkaXR5KCkgcmVzdWx0IGlzIHN0aWxsIGZhbHNlLgorc2hvdWxkQmVUcnVl
KCdpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgY2FuY2VsTGlzdGVuZXIsIGZhbHNl
KTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsKKy8vIGZvcm0uY2hl
Y2tWYWxpZGl0eSgpIHNob3VsZCBiZSB0cnVlLgorc2hvdWxkQmVUcnVlKCdpbnZhbGlkRmlyZWQg
PSBmYWxzZTsgZm9ybS5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkJyk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkOTYxY2YwLi43OTY3M2M1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBA
CisyMDEwLTAyLTE0ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgaW50ZXJh
Y3RpdmUgdmFsaWRhdGlvbiBmb3IgZm9ybXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDkzMAorCisgICAgICAgIC0gUGFzcyBhIHN1Ym1pdCBidXR0
b24gaW5mb3JtYXRpb24gdG8gSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KCkKKyAgICAg
ICAgLSBjaGVja1ZhbGlkaXR5KCkgc3VwcG9ydHMgdW5oYW5kbGVkIGludmFsaWQgY29udHJvbCBs
aXN0CisgICAgICAgIC0gcHJlcGFyZVN1Ym1pdCgpIHByZXZlbnRzIHRoZSBzdWJtaXNzaW9uIGlm
IG5laXRoZXIgbm9WYWxpZGF0ZQorICAgICAgICAgIG5vciBmb3JtTm9WYWxpZGF0ZSBpcyBzcGVj
aWZpZWQsIGFuZCBmb2N1c2VzIG9uIHRoZSBmaXJzdCBpbnZhbGlkCisgICAgICAgICAgY29udHJv
bCBvZiB3aGljaCAiaW52YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNlbGVkLgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3Zh
bGlkYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1wcmV2ZW50ZWQuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgICAgUGFzcyB0aGUgYnV0dG9uIGluc3RhbmNlIHRvIHByZXBhcmVTdWJt
aXQoKSB0byBjaGVjayBmb3JtTm9WYWxpZGF0ZS4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6Y2hlY2tWYWxpZGl0eSk6CisgICAgICAgICAgSWYgdGhlIGNvbnRyb2wgaXMgaW52YWxpZCBh
bmQgdGhlICJpbnZhbGlkIiBpcyBub3QgY2FuY2VsZWQsCisgICAgICAgICAgcHVzaCB0aGUgY29u
dHJvbCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdENsaWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cHJlcGFyZVN1Ym1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAg
ICAgICAgIFBhc3MgdGhlIGJ1dHRvbiBpbnN0YW5jZSB0byBwcmVwYXJlU3VibWl0KCkgdG8gY2hl
Y2sgZm9ybU5vVmFsaWRhdGUuCisKIDIwMTAtMDItMTMgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1M
QnV0dG9uRWxlbWVudC5jcHAKaW5kZXggMzk4Nzg1OS4uYzRjMjk5NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEJ1
dHRvbkVsZW1lbnQuY3BwCkBAIC0xMDMsNyArMTAzLDcgQEAgdm9pZCBIVE1MQnV0dG9uRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQogICAgIGlmIChldnQtPnR5cGUoKSA9
PSBldmVudE5hbWVzKCkuRE9NQWN0aXZhdGVFdmVudCAmJiAhZGlzYWJsZWQoKSkgewogICAgICAg
ICBpZiAoZm9ybSgpICYmIG1fdHlwZSA9PSBTVUJNSVQpIHsKICAgICAgICAgICAgIG1fYWN0aXZl
U3VibWl0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvcm0oKS0+cHJlcGFyZVN1Ym1pdChldnQpOwor
ICAgICAgICAgICAgZm9ybSgpLT5wcmVwYXJlU3VibWl0KGV2dCwgdGhpcyk7CiAgICAgICAgICAg
ICBtX2FjdGl2ZVN1Ym1pdCA9IGZhbHNlOyAvLyBpbiBjYXNlIHdlIHdlcmUgY2FuY2VsZWQKICAg
ICAgICAgfQogICAgICAgICBpZiAoZm9ybSgpICYmIG1fdHlwZSA9PSBSRVNFVCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCA2ZjI0ZTBjLi5iOTVjOGUzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0zMTksMTAgKzMxOSwxMiBA
QCB2b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnNldE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2so
KQogICAgIC8vIEZJWE1FOiBTaG93L2hpZGUgYSB2YWxpZGF0aW9uIG1lc3NhZ2UuCiB9CiAKLWJv
b2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpCitib29sIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewogICAgIGlmICh3aWxsVmFsaWRhdGUo
KSAmJiAhaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoRXZl
bnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkp
OworICAgICAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRpc3BhdGNoRXZlbnQoRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkpOworICAgICAg
ICBpZiAobmVlZHNEZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKKyAg
ICAgICAgICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9scy0+YXBwZW5kKHRoaXMpOwogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aAppbmRleCAxMTcwODdiLi4wMGQyODM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgd2ls
bFZhbGlkYXRlKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAg
Ym9vbCBjaGVja1ZhbGlkaXR5KCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50Kj4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDApOwogICAg
IC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWludCBvciBj
b250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2so
KTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAppbmRleCAyZjg4ODk0Li44ZTQ4YTQ0IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmNwcApAQCAtMTkwLDcgKzE5MCw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXRD
bGljayhFdmVudCogZXZlbnQpCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFzdWJtaXRGb3Vu
ZCkgLy8gc3VibWl0IHRoZSBmb3JtIHdpdGhvdXQgYSBzdWJtaXQgb3IgaW1hZ2UgaW5wdXQKLSAg
ICAgICAgcHJlcGFyZVN1Ym1pdChldmVudCk7CisgICAgICAgIHByZXBhcmVTdWJtaXQoZXZlbnQs
IDApOwogfQogCiBUZXh0RW5jb2RpbmcgSFRNTEZvcm1FbGVtZW50OjpkYXRhRW5jb2RpbmcoKSBj
b25zdApAQCAtMjg4LDcgKzI4OCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojppc01haWx0b0Zv
cm0oKSBjb25zdAogICAgIHJldHVybiBwcm90b2NvbElzKG1fdXJsLCAibWFpbHRvIik7CiB9CiAK
LWJvb2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCkKK2Jvb2wg
SFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCwgSFRNTEZvcm1Db250
cm9sRWxlbWVudCogc3VibWl0RWxlbWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpOwogICAgIGlmIChtX2luc3VibWl0IHx8ICFmcmFtZSkKQEAgLTI5Nyw2ICsy
OTcsMzMgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQoRXZlbnQqIGV2ZW50
KQogICAgIG1faW5zdWJtaXQgPSB0cnVlOwogICAgIG1fZG9pbmdzdWJtaXQgPSBmYWxzZTsKIAor
ICAgIC8vIEludGVyYWN0aXZlIHZhbGlkYXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBkaXNwYXRj
aGluZyB0aGUgc3VibWl0IGV2ZW50LgorICAgIGlmICghbm9WYWxpZGF0ZSgpICYmICghc3VibWl0
RWxlbWVudCB8fCAhc3VibWl0RWxlbWVudC0+Zm9ybU5vVmFsaWRhdGUoKSkpIHsKKyAgICAgICAg
VmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7
CisgICAgICAgIGlmICghY2hlY2tWYWxpZGl0eSh1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpKSB7
CisgICAgICAgICAgICAvLyBUaGUgZm9ybSBoYXMgaW52YWxpZCBjb250cm9scy4gQWJvcnQgc3Vi
bWlzc2lvbi4KKyAgICAgICAgICAgIGJvb2wgZm91bmRGb2N1c2FibGUgPSBmYWxzZTsKKyAgICAg
ICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CisgICAgICAgICAgICAv
LyBGb2N1cyBvbiB0aGUgZmlyc3QgZm9yY3VzYWJsZSBjb250b3JvbCwgYW5kIHdhcm4gYWJvdXQg
YWxsIG9mIHVuZm9yY3VzYWJsZSBjb250cm9scy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiB1bmhhbmRsZWQgPSB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHNbaV07CisgICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1
c2FibGUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kRm9jdXNhYmxlKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VuZEZvY3VzYWJsZSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgICAgICB1bmhhbmRsZWQtPnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1cygpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmcmFtZSkgeworICAgICAgICAg
ICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSgiQW4gaW52YWxpZCBmb3JtIGNvbnRyb2wgd2l0aCBu
YW1lPSclbmFtZScgaXMgbm90IHVzZXItZWRpdGFibGUuIik7CisgICAgICAgICAgICAgICAgICAg
IG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCB1bmhhbmRsZWQtPm5hbWUoKSk7CisgICAgICAgICAg
ICAgICAgICAgIGZyYW1lLT5kb21XaW5kb3coKS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEhUTUxN
ZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2Us
IDAsIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2luc3VibWl0ID0gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgdHJ1ZSwgdHJ1ZSkpICYmICFt
X2RvaW5nc3VibWl0KQogICAgICAgICBtX2RvaW5nc3VibWl0ID0gdHJ1ZTsKIApAQCAtNjEyLDE2
ICs2MzksMTcgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpkZWZh
dWx0QnV0dG9uKCkgY29uc3QKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHko
KQogewotICAgIC8vIFRPRE86IENoZWNrIGZvciB1bmhhbmRsZWQgaW52YWxpZCBjb250cm9scywg
c2VlICMyNzQ1MiBmb3IgdGlwcy4KKyAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
IHVuaGFuZGxlZDsKKyAgICByZXR1cm4gY2hlY2tWYWxpZGl0eSh1bmhhbmRsZWQpOworfQogCi0g
ICAgYm9vbCBoYXNPbmx5VmFsaWRDb250cm9scyA9IHRydWU7Citib29sIEhUTUxGb3JtRWxlbWVu
dDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiB1bmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMpCit7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1F
bGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBj
b250cm9sID0gZm9ybUVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmNoZWNrVmFs
aWRpdHkoKSkKLSAgICAgICAgICAgIGhhc09ubHlWYWxpZENvbnRyb2xzID0gZmFsc2U7CisgICAg
ICAgIGNvbnRyb2wtPmNoZWNrVmFsaWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250cm9scyk7CiAg
ICAgfQotCi0gICAgcmV0dXJuIGhhc09ubHlWYWxpZENvbnRyb2xzOworICAgIHJldHVybiAhdW5o
YW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PiBIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRGb3JBbGlhcyhjb25zdCBBdG9t
aWNTdHJpbmcmIGFsaWFzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCmluZGV4IGMwY2UzZTMuLjM5N2Ji
NDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAorKysgYi9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAg
IHZvaWQgcmVnaXN0ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKICAgICB2b2lkIHJl
bW92ZUltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVudCopOwogCi0gICAgYm9vbCBwcmVwYXJlU3Vi
bWl0KEV2ZW50Kik7CisgICAgYm9vbCBwcmVwYXJlU3VibWl0KEV2ZW50KiwgSFRNTEZvcm1Db250
cm9sRWxlbWVudCopOwogICAgIHZvaWQgc3VibWl0KEZyYW1lKiBqYXZhU2NyaXB0QWN0aXZlRnJh
bWUgPSAwKTsKICAgICB2b2lkIHJlc2V0KCk7CiAKQEAgLTEzNyw2ICsxMzcsNyBAQCBwcml2YXRl
OgogICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFyeSk7CiAgICAg
dW5zaWduZWQgZm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAg
Ym9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mKTsKIAog
ICAgIGZyaWVuZCBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAppbmRleCA1YjkxMjNkLi4xMDJjYzFhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTElucHV0RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCkBAIC0yMTE4LDcgKzIxMTgsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRF
dmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKICAgICAgICAgICAgICAgICAvLyBldmVudCAoaWYgYW55
KSBoZXJlIGluc3RlYWQgb2YgcmVseWluZyBvbiB0aGUgdmFyaWFibGVzIHNldCBhYm92ZSB3aGVu
CiAgICAgICAgICAgICAgICAgLy8gcHJvY2Vzc2luZyB0aGUgY2xpY2sgZXZlbnQuIEV2ZW4gYmV0
dGVyLCBhcHBlbmRGb3JtRGF0YSBjb3VsZCBwYXNzIHRoZQogICAgICAgICAgICAgICAgIC8vIGV2
ZW50IGluLCBhbmQgdGhlbiB3ZSBjb3VsZCBnZXQgcmlkIG9mIG1feFBvcyBhbmQgbV95UG9zIGFs
dG9nZXRoZXIhCi0gICAgICAgICAgICAgICAgaWYgKCFmb3JtKCktPnByZXBhcmVTdWJtaXQoZXZ0
KSkgeworICAgICAgICAgICAgICAgIGlmICghZm9ybSgpLT5wcmVwYXJlU3VibWl0KGV2dCwgdGhp
cykpIHsKICAgICAgICAgICAgICAgICAgICAgbV94UG9zID0gMDsKICAgICAgICAgICAgICAgICAg
ICAgbV95UG9zID0gMDsKICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51414</attachid>
            <date>2010-03-23 05:28:07 -0700</date>
            <delta_ts>2010-04-06 06:52:25 -0700</delta_ts>
            <desc>Proposed patch (rev.2)</desc>
            <filename>bug-34930-20100323212804.patch</filename>
            <type>text/plain</type>
            <size>22400</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmMGY0ZTM3Li5kMTQzNGQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDMt
MjMgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qczogQWRkZWQu
CisKIDIwMTAtMDMtMjMgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgcmVtb3ZlIGZsYWt5IHRhZyBpbiB3ZWJzb2NrZXQgdGVzdHMuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzYzNmUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHkt
Y2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0cyBmb3IgY2hlY2tWYWxp
ZGl0eSgpIHdpdGggaW52YWxpZCBldm5ldCBjYW5jZWxpbmcKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKKyJpbnZhbGlkIiBldmVudCBpcyBub3QgY2FuY2VsZWQuCitQQVNTIGlucHV0
LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsgIWlu
cHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQgaXMgdHJ1ZQorUEFTUyBpbnZhbGlk
RmlyZWQgPSBmYWxzZTsgIWZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCBpcyB0
cnVlCisKKyJpbnZhbGlkIiBldmVudCBpcyBjYW5jZWxlZC4KK1BBU1MgaW5wdXQuYWRkRXZlbnRM
aXN0ZW5lcigiaW52YWxpZCIsIGNhbmNlbExpc3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1Zh
bGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlzIHRydWUKK1BBU1MgaW52YWxpZEZpcmVkID0gZmFs
c2U7IGZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCBpcyB0cnVlCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sIGIvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzE3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwKQEAgLTAsMCArMSwxMyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lu
dGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyZDRjZTAKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVk
IHdoZW4gYW4gImludmFsaWQiIGV2bmV0IGZvciBhIGNvbnRyb2wgaXMgY2FuY2VsZWQuCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3JtIHNob3VsZCBub3QgYmUg
c3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEgaXMg
dHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjU5MmMzNDYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLmh0bWwKQEAgLTAsMCAr
MSw0MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlk
YXRpb24tY2FuY2VsLmh0bWwiPgorPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZh
bHVlPSJ0cnVlIj4KKzxpbnB1dCBuYW1lPWkwIHJlcXVpcmVkIGlkPSJpMCI+Cis8aW5wdXQgdHlw
ZT1zdWJtaXQgaWQ9InMiPgorPC9mb3JtPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0IGlm
IHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aGVuIGFuICJpbnZhbGlkIiBldm5ldCBmb3IgYSBjb250
cm9sIGlzIGNhbmNlbGVkLicpOworCitmdW5jdGlvbiBjYW5jZWwoZXZlbnQpIHsKKyAgICBldmVu
dC5wcmV2ZW50RGVmYXVsdCgpOworfQorCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAg
IHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4
T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZv
cm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnbG9j
YXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xJyk7CisgICAgICAgIGRlYnVnKCdURVNU
IENPTVBMRVRFJyk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2kwJykuYWRkRXZlbnRMaXN0ZW5l
cignaW52YWxpZCcsIGNhbmNlbCwgZmFsc2UpOworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6
OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0RmFp
bGVkKCdUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRlZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0
ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OTg4YjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGVzdCBpZiB0
aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCBhIHN1Ym1pdCBidXR0b24gd2l0aCBmb3Jtbm92YWxp
ZGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgVGhlIGZvcm0gc2hv
dWxkIG5vdCBiZSBzdWJtaXR0ZWQuCitQQVNTIGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0i
KSAhPSAtMSBpcyB0cnVlCitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxp
ZGF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZGI2OTgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbApAQCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zh
c3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8
Zm9ybSBpZD1mIGFjdGlvbj0iaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS5o
dG1sIj4KKzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8
aW5wdXQgbmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJz
IiBmb3Jtbm92YWxpZGF0ZT4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBp
ZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCBhIHN1Ym1pdCBidXR0b24gd2l0aCBmb3Jtbm92
YWxpZGF0ZS4nKTsKKworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkg
PSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0
ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RQYXNzZWQoJ1RoZSBmb3JtIHNob3VsZCBu
b3QgYmUgc3VibWl0dGVkLicpOworICAgICAgICBzaG91bGRCZVRydWUoJ2xvY2F0aW9uLnNlYXJj
aC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAgICAgICBkZWJ1ZygnVEVTVCBDT01QTEVURScp
OworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tpcHMgdmFsaWRhdGlvbi4gVXNlIHRoZSBz
dWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncycpLmNsaWNr
KCk7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHdhcyBub3Qgc3VibWl0dGVkLicpOwor
ICAgIH0KK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cub25sb2FkID0gc3RhcnRPclZl
cmlmeTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNh
NWJjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitU
ZXN0IGlmIHRoZSBmb3JtIHdpdGggbm92YWxpZGF0ZSBpcyBzdWJtaXR0ZWQuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0
dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQor
VEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3OGE2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwKQEAg
LTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4K
KzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZl
LXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1sIiBub3ZhbGlkYXRlPgorPGlucHV0IHR5cGU9aGlk
ZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPSJ0cnVlIj4KKzxpbnB1dCBuYW1lPWkwIHJlcXVpcmVk
IGlkPSJpMCI+Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9InMiPgorPC9mb3JtPgorPHNjcmlwdD4K
K2Rlc2NyaXB0aW9uKCdUZXN0IGlmIHRoZSBmb3JtIHdpdGggbm92YWxpZGF0ZSBpcyBzdWJtaXR0
ZWQuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7CisgICAgdmFyIHF1ZXJ5ID0gd2lu
ZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVlcnkuaW5kZXhPZignc3VibWl0dGVkPXRy
dWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2VkKCdUaGUgZm9ybSBzaG91bGQgbm90IGJl
IHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdsb2NhdGlvbi5zZWFyY2guaW5k
ZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09NUExFVEUnKTsKKyAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBI
VE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVzZSB0aGUgc3VibWl0
IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKS5jbGljaygpOwor
ICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRlZC4nKTsKKyAgICB9
Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZDk0NAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFs
aWRhdGlvbi1wcmV2ZW50ZWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBAQAorVGVzdCBpZiBh
biBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJhY3RpdmUgZm9ybSBzdWJtaXNzaW9uLCBh
bmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNvbnRyb2wgZ2V0cyBmb2N1cy4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0
ZWQKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBpcyBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgiaTIiKQorVEVTVCBDT01QTEVURQorICAgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwgYi9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVmYWM1NgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQu
aHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10
ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlv
biI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9ybSBpZD1mIGFjdGlvbj0iaW50
ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4g
bmFtZT1zdWJtaXR0ZWQgdmFsdWU9dHJ1ZT4KKzxpbnB1dCBuYW1lPWkwIHJlcXVpcmVkIGlkPWkw
IHZhbHVlPSJhYmMiPgorPGlucHV0IG5hbWU9aTEgcmVxdWlyZWQgaWQ9aTEgc3R5bGU9ImRpc3Bs
YXk6bm9uZSI+Cis8aW5wdXQgbmFtZT1pMiByZXF1aXJlZCBpZD1pMj4KKzxpbnB1dCB0eXBlPXN1
Ym1pdCBpZD1zPgorPC9mb3JtPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0IGlmIGFuIGlu
dmFsaWQgY29udHJvbCBwcmV2ZW50cyBpbnRlcmFjdGl2ZSBmb3JtIHN1Ym1pc3Npb24sIGFuZCB0
aGUgZmlyc3QgaW52YWxpZCBmb2N1c2FibGUgY29udHJvbCBnZXRzIGZvY3VzLicpOworCitmdW5j
dGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAgIHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5z
ZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRm9yY2UgdG8gcmVuZGVyIHRoZSBmb3JtLgorICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZiIpLm9mZnNldFdpZHRoOworICAgICAgICAv
LyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVzZSB0aGUgc3Vi
bWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKS5jbGljaygp
OworICAgICAgICB0ZXN0UGFzc2VkKCdUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRlZCcpOworICAg
ICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYWN0aXZlRWxlbWVudCcsICdkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiaTIiKScpOworICAgICAgICBkZWJ1ZygnVEVTVCBDT01QTEVURScpOworICAgIH0K
KworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit3aW5k
b3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvY2hlY2tWYWxp
ZGl0eS1jYW5jZWwuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVj
a1ZhbGlkaXR5LWNhbmNlbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
MjgzYjExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQt
dGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMKQEAgLTAsMCArMSwzMiBAQAorZGVzY3JpcHRp
b24oJ1Rlc3RzIGZvciBjaGVja1ZhbGlkaXR5KCkgd2l0aCBpbnZhbGlkIGV2bmV0IGNhbmNlbGlu
ZycpOworCit2YXIgcGFyZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Citkb2N1
bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudCk7CitwYXJlbnQuaW5uZXJIVE1MID0gJzxmb3Jt
PjxpbnB1dCBuYW1lPWkgcmVxdWlyZWQ+PC9mb3JtPic7Cit2YXIgZm9ybSA9IHBhcmVudC5maXJz
dENoaWxkOwordmFyIGlucHV0ID0gZm9ybS5maXJzdENoaWxkOworCitkZWJ1ZygnImludmFsaWQi
IGV2ZW50IGlzIG5vdCBjYW5jZWxlZC4nKTsKK3ZhciBpbnZhbGlkRmlyZWQgID0gZmFsc2U7Cit2
YXIgbm90aGluZ0xpc3RlbmVyID0ge307Citub3RoaW5nTGlzdGVuZXIuaGFuZGxlRXZlbnQgPSBm
dW5jdGlvbihldmVudCkgeworICAgIGludmFsaWRGaXJlZCA9IHRydWU7Cit9Oworc2hvdWxkQmVU
cnVlKCdpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgbm90aGluZ0xpc3RlbmVyLCBm
YWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkJyk7CitzaG91bGRC
ZVRydWUoJ2ludmFsaWRGaXJlZCA9IGZhbHNlOyAhZm9ybS5jaGVja1ZhbGlkaXR5KCkgJiYgaW52
YWxpZEZpcmVkJyk7CitpbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKCdpbnZhbGlkJywgbm90aGlu
Z0xpc3RlbmVyLCBmYWxzZSk7CisKK2RlYnVnKCcnKTsKK2RlYnVnKCciaW52YWxpZCIgZXZlbnQg
aXMgY2FuY2VsZWQuJyk7CitpbnZhbGlkRmlyZWQgPSBmYWxzZTsKK3ZhciBjYW5jZWxMaXN0ZW5l
ciA9IHt9OworY2FuY2VsTGlzdGVuZXIuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldmVudCkgewor
ICAgIGludmFsaWRGaXJlZCA9IHRydWU7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK307
CisvLyBFdmVuIGlmICdpbnZhbGlkJyBpcyBjYW5jZWxlZCwgdGhlIGlucHV0LmNoZWNrVmFsaWRp
dHkoKSByZXN1bHQgaXMgc3RpbGwgZmFsc2UuCitzaG91bGRCZVRydWUoJ2lucHV0LmFkZEV2ZW50
TGlzdGVuZXIoImludmFsaWQiLCBjYW5jZWxMaXN0ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tW
YWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCcpOworLy8gZm9ybS5jaGVja1ZhbGlkaXR5KCkgc2hv
dWxkIGJlIHRydWUuCitzaG91bGRCZVRydWUoJ2ludmFsaWRGaXJlZCA9IGZhbHNlOyBmb3JtLmNo
ZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDU5NWZmMWEuLmY5OGZiMzUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNDEgQEAKIDIwMTAtMDMtMjMgIEtl
bnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxpZGF0aW9u
IGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0OTMwCisKKyAgICAgICAgLSBQYXNzIGEgc3VibWl0IGJ1dHRvbiBpbmZvcm1hdGlvbiB0
byBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQoKQorICAgICAgICAtIGNoZWNrVmFsaWRp
dHkoKSBzdXBwb3J0cyB1bmhhbmRsZWQgaW52YWxpZCBjb250cm9sIGxpc3QKKyAgICAgICAgLSBw
cmVwYXJlU3VibWl0KCkgcHJldmVudHMgdGhlIHN1Ym1pc3Npb24gaWYgbmVpdGhlciBub1ZhbGlk
YXRlCisgICAgICAgICAgbm9yIGZvcm1Ob1ZhbGlkYXRlIGlzIHNwZWNpZmllZCwgYW5kIGZvY3Vz
ZXMgb24gdGhlIGZpcnN0IGludmFsaWQKKyAgICAgICAgICBjb250cm9sIG9mIHdoaWNoICJpbnZh
bGlkIiBldmVudCBpcyBub3QgY2FuY2VsZWQuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZm9ybXMv
Y2hlY2tWYWxpZGl0eS1jYW5jZWwuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbAorICAg
ICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5o
dG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAg
ICBQYXNzIHRoZSBidXR0b24gaW5zdGFuY2UgdG8gcHJlcGFyZVN1Ym1pdCgpIHRvIGNoZWNrIGZv
cm1Ob1ZhbGlkYXRlLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5
KToKKyAgICAgICAgICBJZiB0aGUgY29udHJvbCBpcyBpbnZhbGlkIGFuZCB0aGUgImludmFsaWQi
IGlzIG5vdCBjYW5jZWxlZCwKKyAgICAgICAgICBwdXNoIHRoZSBjb250cm9sIHRvIHRoZSBzcGVj
aWZpZWQgdmVjdG9yLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgor
ICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGb3JtRWxlbWVudDo6c3VibWl0Q2xpY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50OjpwcmVwYXJlU3VibWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVu
dDo6Y2hlY2tWYWxpZGl0eSk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAg
ICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcik6CisgICAgICAgICAgUGFzcyB0aGUg
YnV0dG9uIGluc3RhbmNlIHRvIHByZXBhcmVTdWJtaXQoKSB0byBjaGVjayBmb3JtTm9WYWxpZGF0
ZS4KKworMjAxMC0wMy0yMyAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KIAogICAgICAgICBBZGQgY2hlY2tzIGlmIHNl
dE5lZWRzV2lsbFZhbGlkYXRlQ2hlY2soKSBhbmQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9I
VE1MQnV0dG9uRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3Bw
CmluZGV4IDM5ODc4NTkuLmM0YzI5OTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MQnV0
dG9uRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcApA
QCAtMTAzLDcgKzEwMyw3IEBAIHZvaWQgSFRNTEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2dCkKICAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLkRP
TUFjdGl2YXRlRXZlbnQgJiYgIWRpc2FibGVkKCkpIHsKICAgICAgICAgaWYgKGZvcm0oKSAmJiBt
X3R5cGUgPT0gU1VCTUlUKSB7CiAgICAgICAgICAgICBtX2FjdGl2ZVN1Ym1pdCA9IHRydWU7Ci0g
ICAgICAgICAgICBmb3JtKCktPnByZXBhcmVTdWJtaXQoZXZ0KTsKKyAgICAgICAgICAgIGZvcm0o
KS0+cHJlcGFyZVN1Ym1pdChldnQsIHRoaXMpOwogICAgICAgICAgICAgbV9hY3RpdmVTdWJtaXQg
PSBmYWxzZTsgLy8gaW4gY2FzZSB3ZSB3ZXJlIGNhbmNlbGVkCiAgICAgICAgIH0KICAgICAgICAg
aWYgKGZvcm0oKSAmJiBtX3R5cGUgPT0gUkVTRVQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5jcHAKaW5kZXggYzliM2NjNC4uMjYxZDExMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMzMxLDEwICszMzEsMTIgQEAgU3RyaW5nIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKICAgICByZXR1cm4gdmFsaWRpdHko
KS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
OjpjaGVja1ZhbGlkaXR5KCkKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxp
ZGl0eShWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KiB1bmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMpCiB7CiAgICAgaWYgKHdpbGxWYWxpZGF0ZSgpICYmICFpc1ZhbGlkRm9ybUNvbnRyb2xF
bGVtZW50KCkpIHsKLSAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5pbnZhbGlkRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIGJvb2wgbmVlZHNEZWZh
dWx0QWN0aW9uID0gZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZh
bGlkRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24g
JiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQorICAgICAgICAgICAgdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmluZGV4IDliNmM5NDMuLmFlYTljN2Mg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaApAQCAtMTA4LDcgKzEwOCw3IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZh
bGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgYm9vbCBjaGVja1ZhbGlkaXR5KCk7CisgICAgYm9vbCBj
aGVja1ZhbGlkaXR5KFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4qIHVuaGFuZGxlZElu
dmFsaWRDb250cm9scyA9IDApOwogICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZh
bGlkYXRpb24gY29uc3RyYWludCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9p
ZCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNv
bnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5j
cHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBiZGFjMjhhLi4wMzUx
YTRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5j
bHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKKyNpbmNsdWRlICJE
T01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtMTg4LDcgKzE4OSw3IEBAIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpzdWJtaXRDbGljayhFdmVudCogZXZlbnQpCiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKCFzdWJtaXRGb3VuZCkgLy8gc3VibWl0IHRoZSBmb3JtIHdpdGhvdXQgYSBzdWJtaXQgb3Ig
aW1hZ2UgaW5wdXQKLSAgICAgICAgcHJlcGFyZVN1Ym1pdChldmVudCk7CisgICAgICAgIHByZXBh
cmVTdWJtaXQoZXZlbnQsIDApOwogfQogCiBUZXh0RW5jb2RpbmcgSFRNTEZvcm1FbGVtZW50Ojpk
YXRhRW5jb2RpbmcoKSBjb25zdApAQCAtMjE5LDcgKzIyMCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVt
ZW50Ojppc01haWx0b0Zvcm0oKSBjb25zdAogICAgIHJldHVybiBwcm90b2NvbElzKG1fdXJsLCAi
bWFpbHRvIik7CiB9CiAKLWJvb2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50
KiBldmVudCkKK2Jvb2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBldmVu
dCwgSFRNTEZvcm1Db250cm9sRWxlbWVudCogc3VibWl0RWxlbWVudCkKIHsKICAgICBGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIGlmIChtX2luc3VibWl0IHx8ICFmcmFt
ZSkKQEAgLTIyOCw2ICsyMjksMzUgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJt
aXQoRXZlbnQqIGV2ZW50KQogICAgIG1faW5zdWJtaXQgPSB0cnVlOwogICAgIG1fZG9pbmdzdWJt
aXQgPSBmYWxzZTsKIAorICAgIC8vIEludGVyYWN0aXZlIHZhbGlkYXRpb24gbXVzdCBiZSBkb25l
IGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgc3VibWl0IGV2ZW50LgorICAgIGlmICghbm9WYWxpZGF0
ZSgpICYmICghc3VibWl0RWxlbWVudCB8fCAhc3VibWl0RWxlbWVudC0+Zm9ybU5vVmFsaWRhdGUo
KSkpIHsKKyAgICAgICAgVmVjdG9yPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPiB1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHM7CisgICAgICAgIC8vIElmIHRoZSBmb3JtIGhhcyBpbnZhbGlkIGNvbnRy
b2xzLCAgYWJvcnQgc3VibWlzc2lvbi4KKyAgICAgICAgaWYgKCFjaGVja1ZhbGlkaXR5KHVuaGFu
ZGxlZEludmFsaWRDb250cm9scykpIHsKKyAgICAgICAgICAgIC8vIEZvY3VzIG9uIHRoZSBmaXJz
dCBmb3JjdXNhYmxlIGNvbnRyb2wuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzW2ldOworICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5zY3JvbGxJbnRvVmlld0lmTmVlZGVk
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1cygpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAvLyBXYXJuIGFib3V0IGFsbCBvZiB1bmZvcmN1c2FibGUgY29udHJvbHMuCisg
ICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgZnJhbWUgJiYgaSA8IHVuaGFuZGxlZEludmFsaWRDb250
cm9scy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqIHVuaGFuZGxlZCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXTsKKyAgICAgICAgICAg
ICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbWVzc2FnZSgiQW4gaW52YWxpZCBmb3Jt
IGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90IHVzZXItZWRpdGFibGUuIik7CisgICAg
ICAgICAgICAgICAgbWVzc2FnZS5yZXBsYWNlKCIlbmFtZSIsIHVuaGFuZGxlZC0+bmFtZSgpKTsK
KyAgICAgICAgICAgICAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUoKS0+YWRkTWVzc2Fn
ZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCBt
ZXNzYWdlLCAwLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBtX2luc3VibWl0ID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRl
KGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgdHJ1ZSwgdHJ1ZSkpICYmICFtX2RvaW5nc3VibWl0
KQogICAgICAgICBtX2RvaW5nc3VibWl0ID0gdHJ1ZTsKIApAQCAtNTQxLDE2ICs1NzEsMTcgQEAg
SFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0QnV0dG9uKCkg
Y29uc3QKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKQogewotICAgIC8v
IFRPRE86IENoZWNrIGZvciB1bmhhbmRsZWQgaW52YWxpZCBjb250cm9scywgc2VlICMyNzQ1MiBm
b3IgdGlwcy4KKyAgICBWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+IHVuaGFuZGxlZDsK
KyAgICByZXR1cm4gY2hlY2tWYWxpZGl0eSh1bmhhbmRsZWQpOworfQogCi0gICAgYm9vbCBoYXNP
bmx5VmFsaWRDb250cm9scyA9IHRydWU7Citib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxp
ZGl0eShWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+JiB1bmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMpCit7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXpl
KCk7ICsraSkgewogICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9y
bUVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmNoZWNrVmFsaWRpdHkoKSkKLSAg
ICAgICAgICAgIGhhc09ubHlWYWxpZENvbnRyb2xzID0gZmFsc2U7CisgICAgICAgIGNvbnRyb2wt
PmNoZWNrVmFsaWRpdHkoJnVuaGFuZGxlZEludmFsaWRDb250cm9scyk7CiAgICAgfQotCi0gICAg
cmV0dXJuIGhhc09ubHlWYWxpZENvbnRyb2xzOworICAgIHJldHVybiAhdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzLnNpemUoKTsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PiBIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRGb3JBbGlhcyhjb25zdCBBdG9taWNTdHJpbmcmIGFs
aWFzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oIGIvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCmluZGV4IDQ0YmY2MjguLjJlNGRhOWEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmgKQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0
ZXJJbWdFbGVtZW50KEhUTUxJbWFnZUVsZW1lbnQqKTsKICAgICB2b2lkIHJlbW92ZUltZ0VsZW1l
bnQoSFRNTEltYWdlRWxlbWVudCopOwogCi0gICAgYm9vbCBwcmVwYXJlU3VibWl0KEV2ZW50Kik7
CisgICAgYm9vbCBwcmVwYXJlU3VibWl0KEV2ZW50KiwgSFRNTEZvcm1Db250cm9sRWxlbWVudCop
OwogICAgIHZvaWQgc3VibWl0KEZyYW1lKiBqYXZhU2NyaXB0QWN0aXZlRnJhbWUgPSAwKTsKICAg
ICB2b2lkIHJlc2V0KCk7CiAKQEAgLTEzNyw2ICsxMzcsNyBAQCBwcml2YXRlOgogICAgIFRleHRF
bmNvZGluZyBkYXRhRW5jb2RpbmcoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBj
cmVhdGVGb3JtRGF0YSgpOwogICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXgoSFRNTEZvcm1D
b250cm9sRWxlbWVudCopOworICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8SFRNTEZvcm1D
b250cm9sRWxlbWVudCo+Jik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9u
OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9XZWJD
b3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggNmEyMTRhYi4uODk0Y2QwZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUv
aHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtMjE0Nyw3ICsyMTQ3LDcgQEAgdm9pZCBIVE1M
SW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCiAgICAgICAgICAg
ICAgICAgLy8gZXZlbnQgKGlmIGFueSkgaGVyZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhlIHZh
cmlhYmxlcyBzZXQgYWJvdmUgd2hlbgogICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcgdGhl
IGNsaWNrIGV2ZW50LiBFdmVuIGJldHRlciwgYXBwZW5kRm9ybURhdGEgY291bGQgcGFzcyB0aGUK
ICAgICAgICAgICAgICAgICAvLyBldmVudCBpbiwgYW5kIHRoZW4gd2UgY291bGQgZ2V0IHJpZCBv
ZiBtX3hQb3MgYW5kIG1feVBvcyBhbHRvZ2V0aGVyIQotICAgICAgICAgICAgICAgIGlmICghZm9y
bSgpLT5wcmVwYXJlU3VibWl0KGV2dCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZvcm0oKS0+
cHJlcGFyZVN1Ym1pdChldnQsIHRoaXMpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1feFBvcyA9
IDA7CiAgICAgICAgICAgICAgICAgICAgIG1feVBvcyA9IDA7CiAgICAgICAgICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52630</attachid>
            <date>2010-04-06 06:52:32 -0700</date>
            <delta_ts>2010-04-06 18:08:51 -0700</delta_ts>
            <desc>Proposed patch (rev.3)</desc>
            <filename>bug-34930-20100406225230.patch</filename>
            <type>text/plain</type>
            <size>22366</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMDY5MTI1Li44ZjVmNmUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDQt
MDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qczogQWRkZWQu
CisKIDIwMTAtMDQtMDYgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgTm90IHJldmlld2VkOiByZWJhc2VsaW5pbmcgQ2hyb21pdW0gbGF5b3V0IHRlc3Qg
ZXhwZWN0YXRpb25zLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1Zh
bGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi40NWM2MzZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNiBAQAorVGVz
dHMgZm9yIGNoZWNrVmFsaWRpdHkoKSB3aXRoIGludmFsaWQgZXZuZXQgY2FuY2VsaW5nCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisiaW52YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNl
bGVkLgorUEFTUyBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgbm90aGluZ0xpc3Rl
bmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlzIHRy
dWUKK1BBU1MgaW52YWxpZEZpcmVkID0gZmFsc2U7ICFmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBp
bnZhbGlkRmlyZWQgaXMgdHJ1ZQorCisiaW52YWxpZCIgZXZlbnQgaXMgY2FuY2VsZWQuCitQQVNT
IGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBjYW5jZWxMaXN0ZW5lciwgZmFsc2Up
OyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCBpcyB0cnVlCitQQVNTIGlu
dmFsaWRGaXJlZCA9IGZhbHNlOyBmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQg
aXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5j
ZWwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTMxNzU0Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1s
CkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmQ0Y2UwCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxp
ZGF0aW9uLWNhbmNlbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitUZXN0IGlmIHRoZSBm
b3JtIGlzIHN1Ym1pdHRlZCB3aGVuIGFuICJpbnZhbGlkIiBldm5ldCBmb3IgYSBjb250cm9sIGlz
IGNhbmNlbGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUaGUgZm9y
bSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2VhcmNoLmluZGV4T2Yo
ImkwPSIpICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJjMzQ2Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNl
bC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJp
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sIj4KKzxpbnB1dCB0eXBlPWhpZGRlbiBu
YW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCByZXF1aXJlZCBpZD0i
aTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2hlbiBhbiAiaW52YWxpZCIg
ZXZuZXQgZm9yIGEgY29udHJvbCBpcyBjYW5jZWxlZC4nKTsKKworZnVuY3Rpb24gY2FuY2VsKGV2
ZW50KSB7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworZnVuY3Rpb24gc3RhcnRP
clZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAg
IGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRl
c3RQYXNzZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLicpOworICAgICAgICBz
aG91bGRCZVRydWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAg
ICAgICBkZWJ1ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpMCcp
LmFkZEV2ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBjYW5jZWwsIGZhbHNlKTsKKyAgICAgICAgLy8g
SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhlIHN1Ym1p
dCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xpY2soKTsK
KyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7CisgICAg
fQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1u
b3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li41ODk4OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDkgQEAKK1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0dG9u
IHdpdGggZm9ybW5vdmFsaWRhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmll
cyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQ
QVNTIFRoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFy
Y2guaW5kZXhPZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1u
b3ZhbGlkYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi42OWRiNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9p
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKQEAgLTAsMCArMSwzOCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24t
Zm9ybW5vdmFsaWRhdGUuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQg
dmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0
eXBlPXN1Ym1pdCBpZD0icyIgZm9ybW5vdmFsaWRhdGU+Cis8L2Zvcm0+Cis8c2NyaXB0PgorZGVz
Y3JpcHRpb24oJ1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0
dG9uIHdpdGggZm9ybW5vdmFsaWRhdGUuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7
CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVlcnku
aW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2VkKCdU
aGUgZm9ybSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxkQmVUcnVl
KCdsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAgZGVidWco
J1RFU1QgQ09NUExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxl
cikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlk
YXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMgbm90
IHN1Ym1pdHRlZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9u
bG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3Zh
bGlkYXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zYTViY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsOSBAQAorVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFsaWRhdGUgaXMgc3VibWl0
dGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUaGUgZm9ybSBzaG91
bGQgbm90IGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIp
ICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwgYi9MYXlv
dXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzhhNmYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92
YWxpZGF0ZS5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0
aW9uPSJpbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbCIgbm92YWxpZGF0ZT4K
KzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQg
bmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwv
Zm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFs
aWRhdGUgaXMgc3VibWl0dGVkLicpOworCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAg
IHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4
T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZv
cm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnbG9j
YXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xJyk7CisgICAgICAgIGRlYnVnKCdURVNU
IENPTVBMRVRFJyk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9u
LiBVc2UgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdzJykuY2xpY2soKTsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJt
aXR0ZWQuJyk7CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQg
PSBzdGFydE9yVmVyaWZ5OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVk
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1wcmV2ZW50ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjc1ZmQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDkgQEAKK1Rlc3QgaWYgYW4gaW52YWxpZCBjb250cm9sIHByZXZlbnRzIGludGVyYWN0aXZlIGZv
cm0gc3VibWlzc2lvbiwgYW5kIHRoZSBmaXJzdCBpbnZhbGlkIGZvY3VzYWJsZSBjb250cm9sIGdl
dHMgZm9jdXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3Jt
IHdhcyBub3Qgc3VibWl0dGVkCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImkyIikKK1RFU1QgQ09NUExFVEUKKyAgIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZl
bnRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmFjNTYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0g
aWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwiPgorPGlu
cHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPXRydWU+Cis8aW5wdXQgbmFtZT1p
MCByZXF1aXJlZCBpZD1pMCB2YWx1ZT0iYWJjIj4KKzxpbnB1dCBuYW1lPWkxIHJlcXVpcmVkIGlk
PWkxIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorPGlucHV0IG5hbWU9aTIgcmVxdWlyZWQgaWQ9aTI+
Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9cz4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlv
bignVGVzdCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJhY3RpdmUgZm9ybSBz
dWJtaXNzaW9uLCBhbmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNvbnRyb2wgZ2V0cyBm
b2N1cy4nKTsKKworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3
aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9
dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3VsZCBub3Qg
YmUgc3VibWl0dGVkLicpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvcmNlIHRvIHJlbmRl
ciB0aGUgZm9ybS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYiKS5vZmZzZXRX
aWR0aDsKKyAgICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0
aW9uLiBVc2UgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdzJykuY2xpY2soKTsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gd2FzIG5vdCBz
dWJtaXR0ZWQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQnLCAn
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImkyIiknKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09N
UExFVEUnKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQor
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0
LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9z
Y3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODI4M2IxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzCkBAIC0wLDAgKzEs
MzIgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgY2hlY2tWYWxpZGl0eSgpIHdpdGggaW52YWxp
ZCBldm5ldCBjYW5jZWxpbmcnKTsKKwordmFyIHBhcmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2RpdicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYXJlbnQpOworcGFyZW50Lmlu
bmVySFRNTCA9ICc8Zm9ybT48aW5wdXQgbmFtZT1pIHJlcXVpcmVkPjwvZm9ybT4nOwordmFyIGZv
cm0gPSBwYXJlbnQuZmlyc3RDaGlsZDsKK3ZhciBpbnB1dCA9IGZvcm0uZmlyc3RDaGlsZDsKKwor
ZGVidWcoJyJpbnZhbGlkIiBldmVudCBpcyBub3QgY2FuY2VsZWQuJyk7Cit2YXIgaW52YWxpZEZp
cmVkICA9IGZhbHNlOwordmFyIG5vdGhpbmdMaXN0ZW5lciA9IHt9Oworbm90aGluZ0xpc3RlbmVy
LmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpbnZhbGlkRmlyZWQgPSB0cnVl
OworfTsKK3Nob3VsZEJlVHJ1ZSgnaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIG5v
dGhpbmdMaXN0ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRG
aXJlZCcpOworc2hvdWxkQmVUcnVlKCdpbnZhbGlkRmlyZWQgPSBmYWxzZTsgIWZvcm0uY2hlY2tW
YWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCcpOworaW5wdXQucmVtb3ZlRXZlbnRMaXN0ZW5lcign
aW52YWxpZCcsIG5vdGhpbmdMaXN0ZW5lciwgZmFsc2UpOworCitkZWJ1ZygnJyk7CitkZWJ1Zygn
ImludmFsaWQiIGV2ZW50IGlzIGNhbmNlbGVkLicpOworaW52YWxpZEZpcmVkID0gZmFsc2U7Cit2
YXIgY2FuY2VsTGlzdGVuZXIgPSB7fTsKK2NhbmNlbExpc3RlbmVyLmhhbmRsZUV2ZW50ID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICBpbnZhbGlkRmlyZWQgPSB0cnVlOworICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7Cit9OworLy8gRXZlbiBpZiAnaW52YWxpZCcgaXMgY2FuY2VsZWQsIHRoZSBp
bnB1dC5jaGVja1ZhbGlkaXR5KCkgcmVzdWx0IGlzIHN0aWxsIGZhbHNlLgorc2hvdWxkQmVUcnVl
KCdpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgY2FuY2VsTGlzdGVuZXIsIGZhbHNl
KTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsKKy8vIGZvcm0uY2hl
Y2tWYWxpZGl0eSgpIHNob3VsZCBiZSB0cnVlLgorc2hvdWxkQmVUcnVlKCdpbnZhbGlkRmlyZWQg
PSBmYWxzZTsgZm9ybS5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkJyk7CisKK3ZhciBz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cg
Yi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5Y2QzOWIxLi4xOTA5MWQ5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBA
CisyMDEwLTA0LTA2ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgaW50ZXJh
Y3RpdmUgdmFsaWRhdGlvbiBmb3IgZm9ybXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNDkzMAorCisgICAgICAgIC0gUGFzcyBhIHN1Ym1pdCBidXR0
b24gaW5mb3JtYXRpb24gdG8gSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KCkKKyAgICAg
ICAgLSBjaGVja1ZhbGlkaXR5KCkgc3VwcG9ydHMgdW5oYW5kbGVkIGludmFsaWQgY29udHJvbCBs
aXN0CisgICAgICAgIC0gcHJlcGFyZVN1Ym1pdCgpIHByZXZlbnRzIHRoZSBzdWJtaXNzaW9uIGlm
IG5laXRoZXIgbm9WYWxpZGF0ZQorICAgICAgICAgIG5vciBmb3JtTm9WYWxpZGF0ZSBpcyBzcGVj
aWZpZWQsIGFuZCBmb2N1c2VzIG9uIHRoZSBmaXJzdCBpbnZhbGlkCisgICAgICAgICAgY29udHJv
bCBvZiB3aGljaCAiaW52YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNlbGVkLgorCisgICAgICAgIFRl
c3RzOiBmYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwKKyAgICAgICAgICAgICAg
IGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbAorICAgICAgICAg
ICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0
bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3Zh
bGlkYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1wcmV2ZW50ZWQuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcik6CisgICAgICAgICAgUGFzcyB0aGUgYnV0dG9uIGluc3RhbmNlIHRvIHByZXBhcmVTdWJt
aXQoKSB0byBjaGVjayBmb3JtTm9WYWxpZGF0ZS4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6Y2hlY2tWYWxpZGl0eSk6CisgICAgICAgICAgSWYgdGhlIGNvbnRyb2wgaXMgaW52YWxpZCBh
bmQgdGhlICJpbnZhbGlkIiBpcyBub3QgY2FuY2VsZWQsCisgICAgICAgICAgcHVzaCB0aGUgY29u
dHJvbCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdENsaWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6cHJlcGFyZVN1Ym1pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1FbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAg
ICAgICAgIFBhc3MgdGhlIGJ1dHRvbiBpbnN0YW5jZSB0byBwcmVwYXJlU3VibWl0KCkgdG8gY2hl
Y2sgZm9ybU5vVmFsaWRhdGUuCisKIDIwMTAtMDQtMDYgIE1hdHRpYXMgTmlzc2xlciAgPG1uaXNz
bGVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcCBiL1dlYkNvcmUv
aHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKaW5kZXggYjNkMzU4ZC4uOWZlYjc5NyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgSFRNTEJ1dHRv
bkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKICAgICBpZiAoZXZ0LT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLkRPTUFjdGl2YXRlRXZlbnQgJiYgIWRpc2FibGVkKCkpIHsK
ICAgICAgICAgaWYgKGZvcm0oKSAmJiBtX3R5cGUgPT0gU1VCTUlUKSB7CiAgICAgICAgICAgICBt
X2FjdGl2ZVN1Ym1pdCA9IHRydWU7Ci0gICAgICAgICAgICBmb3JtKCktPnByZXBhcmVTdWJtaXQo
ZXZ0KTsKKyAgICAgICAgICAgIGZvcm0oKS0+cHJlcGFyZVN1Ym1pdChldnQsIHRoaXMpOwogICAg
ICAgICAgICAgbV9hY3RpdmVTdWJtaXQgPSBmYWxzZTsgLy8gaW4gY2FzZSB3ZSB3ZXJlIGNhbmNl
bGVkCiAgICAgICAgIH0KICAgICAgICAgaWYgKGZvcm0oKSAmJiBtX3R5cGUgPT0gUkVTRVQpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggYWU5OTIxYS4uNzIwOGY4
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMzMxLDEwICsz
MzEsMTIgQEAgU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdl
KCkKICAgICByZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKIH0KIAotYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKK2Jvb2wgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCiB7CiAgICAgaWYgKHdpbGxWYWxpZGF0ZSgp
ICYmICFpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsKLSAgICAgICAgZGlzcGF0Y2hFdmVu
dChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZhbHNlLCB0cnVlKSk7
CisgICAgICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0gZGlzcGF0Y2hFdmVudChFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZhbHNlLCB0cnVlKSk7CisgICAgICAg
IGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQorICAg
ICAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5o
CmluZGV4IDU4YjJmYTEuLjA1MmIyNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUNvbnRyb2xFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuaApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgd2lsbFZhbGlkYXRl
KCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgYm9vbCBjaGVj
a1ZhbGlkaXR5KCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDApOwogICAgIC8vIFRoaXMg
bXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWludCBvciBjb250cm9sIHZh
bHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5Q2hlY2soKTsKICAgICB2
b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAppbmRleCBiZGFjMjhhLi44MmM5ODA3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApA
QCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAiRE9N
Rm9ybURhdGEuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtMTg4LDcg
KzE4OSw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzdWJtaXRDbGljayhFdmVudCogZXZlbnQp
CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFzdWJtaXRGb3VuZCkgLy8gc3VibWl0IHRoZSBm
b3JtIHdpdGhvdXQgYSBzdWJtaXQgb3IgaW1hZ2UgaW5wdXQKLSAgICAgICAgcHJlcGFyZVN1Ym1p
dChldmVudCk7CisgICAgICAgIHByZXBhcmVTdWJtaXQoZXZlbnQsIDApOwogfQogCiBUZXh0RW5j
b2RpbmcgSFRNTEZvcm1FbGVtZW50OjpkYXRhRW5jb2RpbmcoKSBjb25zdApAQCAtMjE5LDcgKzIy
MCw3IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojppc01haWx0b0Zvcm0oKSBjb25zdAogICAgIHJl
dHVybiBwcm90b2NvbElzKG1fdXJsLCAibWFpbHRvIik7CiB9CiAKLWJvb2wgSFRNTEZvcm1FbGVt
ZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCkKK2Jvb2wgSFRNTEZvcm1FbGVtZW50Ojpw
cmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCwgSFRNTEZvcm1Db250cm9sRWxlbWVudCogc3VibWl0
RWxlbWVudCkKIHsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAg
IGlmIChtX2luc3VibWl0IHx8ICFmcmFtZSkKQEAgLTIyOCw2ICsyMjksMzUgQEAgYm9vbCBIVE1M
Rm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQoRXZlbnQqIGV2ZW50KQogICAgIG1faW5zdWJtaXQg
PSB0cnVlOwogICAgIG1fZG9pbmdzdWJtaXQgPSBmYWxzZTsKIAorICAgIC8vIEludGVyYWN0aXZl
IHZhbGlkYXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgc3VibWl0IGV2
ZW50LgorICAgIGlmICghbm9WYWxpZGF0ZSgpICYmICghc3VibWl0RWxlbWVudCB8fCAhc3VibWl0
RWxlbWVudC0+Zm9ybU5vVmFsaWRhdGUoKSkpIHsKKyAgICAgICAgVmVjdG9yPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7CisgICAgICAgIC8vIElmIHRo
ZSBmb3JtIGhhcyBpbnZhbGlkIGNvbnRyb2xzLCBhYm9ydCBzdWJtaXNzaW9uLgorICAgICAgICBp
ZiAoIWNoZWNrVmFsaWRpdHkodW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKSkgeworICAgICAgICAg
ICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGZvcmN1c2FibGUgY29udHJvbC4KKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiB1bmhhbmRs
ZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV07CisgICAgICAgICAgICAgICAgaWYgKHVu
aGFuZGxlZC0+aXNGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgICAgICAgICB1bmhhbmRsZWQt
PnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB1bmhh
bmRsZWQtPmZvY3VzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFdhcm4gYWJvdXQgYWxsIG9mIHVu
Zm9yY3VzYWJsZSBjb250cm9scy4KKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50
KCktPmZyYW1lKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBmcmFtZSAmJiBp
IDwgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzW2ldOworICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIFN0cmluZyBt
ZXNzYWdlKCJBbiBpbnZhbGlkIGZvcm0gY29udHJvbCB3aXRoIG5hbWU9JyVuYW1lJyBpcyBub3Qg
dXNlci1lZGl0YWJsZS4iKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1l
IiwgdW5oYW5kbGVkLT5uYW1lKCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5kb21XaW5kb3co
KS0+Y29uc29sZSgpLT5hZGRNZXNzYWdlKEhUTUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgRXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDAsIGRvY3VtZW50KCktPnVybCgpLnN0cmlu
ZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zdWJtaXQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChkaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50LCB0cnVlLCB0
cnVlKSkgJiYgIW1fZG9pbmdzdWJtaXQpCiAgICAgICAgIG1fZG9pbmdzdWJtaXQgPSB0cnVlOwog
CkBAIC01NDEsMTYgKzU3MSwxNyBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVs
ZW1lbnQ6OmRlZmF1bHRCdXR0b24oKSBjb25zdAogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hl
Y2tWYWxpZGl0eSgpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHVuaGFuZGxlZCBpbnZhbGlk
IGNvbnRyb2xzLCBzZWUgIzI3NDUyIGZvciB0aXBzLgorICAgIFZlY3RvcjxIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Kj4gdW5oYW5kbGVkOworICAgIHJldHVybiBjaGVja1ZhbGlkaXR5KHVuaGFuZGxl
ZCk7Cit9CiAKLSAgICBib29sIGhhc09ubHlWYWxpZENvbnRyb2xzID0gdHJ1ZTsKK2Jvb2wgSFRN
TEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
Kj4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKK3sKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNbaV07Ci0gICAgICAgIGlmICghY29udHJv
bC0+Y2hlY2tWYWxpZGl0eSgpKQotICAgICAgICAgICAgaGFzT25seVZhbGlkQ29udHJvbHMgPSBm
YWxzZTsKKyAgICAgICAgY29udHJvbC0+Y2hlY2tWYWxpZGl0eSgmdW5oYW5kbGVkSW52YWxpZENv
bnRyb2xzKTsKICAgICB9Ci0KLSAgICByZXR1cm4gaGFzT25seVZhbGlkQ29udHJvbHM7CisgICAg
cmV0dXJuICF1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOwogfQogCiBQYXNzUmVmUHRy
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudEZvckFsaWFz
KGNvbnN0IEF0b21pY1N0cmluZyYgYWxpYXMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1FbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXggNDRi
ZjYyOC4uMmU0ZGE5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5o
CisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaApAQCAtNzgsNyArNzgsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCByZWdpc3RlckltZ0VsZW1lbnQoSFRNTEltYWdlRWxlbWVudCopOwog
ICAgIHZvaWQgcmVtb3ZlSW1nRWxlbWVudChIVE1MSW1hZ2VFbGVtZW50Kik7CiAKLSAgICBib29s
IHByZXBhcmVTdWJtaXQoRXZlbnQqKTsKKyAgICBib29sIHByZXBhcmVTdWJtaXQoRXZlbnQqLCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CiAgICAgdm9pZCBzdWJtaXQoRnJhbWUqIGphdmFTY3Jp
cHRBY3RpdmVGcmFtZSA9IDApOwogICAgIHZvaWQgcmVzZXQoKTsKIApAQCAtMTM3LDYgKzEzNyw3
IEBAIHByaXZhdGU6CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygpIGNvbnN0OwogICAg
IFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZUZvcm1EYXRhKCk7CiAgICAgdW5zaWduZWQgZm9y
bUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgYm9vbCBjaGVja1Zh
bGlkaXR5KFZlY3RvcjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4mKTsKIAogICAgIGZyaWVuZCBj
bGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1M
SW5wdXRFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRl
eCA1MjE3YmM5Li40MTBhNDM3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxl
bWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBAIC0yMTMz
LDcgKzIxMzMsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqIGV2dCkKICAgICAgICAgICAgICAgICAvLyBldmVudCAoaWYgYW55KSBoZXJlIGluc3Rl
YWQgb2YgcmVseWluZyBvbiB0aGUgdmFyaWFibGVzIHNldCBhYm92ZSB3aGVuCiAgICAgICAgICAg
ICAgICAgLy8gcHJvY2Vzc2luZyB0aGUgY2xpY2sgZXZlbnQuIEV2ZW4gYmV0dGVyLCBhcHBlbmRG
b3JtRGF0YSBjb3VsZCBwYXNzIHRoZQogICAgICAgICAgICAgICAgIC8vIGV2ZW50IGluLCBhbmQg
dGhlbiB3ZSBjb3VsZCBnZXQgcmlkIG9mIG1feFBvcyBhbmQgbV95UG9zIGFsdG9nZXRoZXIhCi0g
ICAgICAgICAgICAgICAgaWYgKCFmb3JtKCktPnByZXBhcmVTdWJtaXQoZXZ0KSkgeworICAgICAg
ICAgICAgICAgIGlmICghZm9ybSgpLT5wcmVwYXJlU3VibWl0KGV2dCwgdGhpcykpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV94UG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgbV95UG9zID0g
MDsKICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52689</attachid>
            <date>2010-04-06 18:08:58 -0700</date>
            <delta_ts>2010-04-06 18:19:58 -0700</delta_ts>
            <desc>Proposed patch (rev.4)</desc>
            <filename>bug-34930-20100407100855.patch</filename>
            <type>text/plain</type>
            <size>23585</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMDY5MTI1Li4xMjRiZjllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQt
MDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzOiBBZGRlZC4K
KwogMjAxMC0wNC0wNiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBOb3QgcmV2aWV3ZWQ6IHJlYmFzZWxpbmluZyBDaHJvbWl1bSBsYXlvdXQgdGVzdCBl
eHBlY3RhdGlvbnMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFs
aWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tW
YWxpZGl0eS1jYW5jZWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ1YzYzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2NoZWNrVmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0
cyBmb3IgY2hlY2tWYWxpZGl0eSgpIHdpdGggaW52YWxpZCBldm5ldCBjYW5jZWxpbmcKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyJpbnZhbGlkIiBldmVudCBpcyBub3QgY2FuY2Vs
ZWQuCitQQVNTIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBub3RoaW5nTGlzdGVu
ZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQgaXMgdHJ1
ZQorUEFTUyBpbnZhbGlkRmlyZWQgPSBmYWxzZTsgIWZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGlu
dmFsaWRGaXJlZCBpcyB0cnVlCisKKyJpbnZhbGlkIiBldmVudCBpcyBjYW5jZWxlZC4KK1BBU1Mg
aW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIGNhbmNlbExpc3RlbmVyLCBmYWxzZSk7
ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlzIHRydWUKK1BBU1MgaW52
YWxpZEZpcmVkID0gZmFsc2U7IGZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCBp
cyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNl
bC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzE3NTQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwK
QEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTgxMWUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rlc3QgaWYgdGhlIGZv
cm0gaXMgc3VibWl0dGVkIHdoZW4gYW4gImludmFsaWQiIGV2bmV0IGZvciBhIGNvbnRyb2wgaXMg
Y2FuY2VsZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3Jt
IHNob3VsZCBiZSBzdWJtaXR0ZWQuCitQQVNTIGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0i
KSAhPSAtMSBpcyB0cnVlCitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjMDFmYQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRt
bApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9ybSBpZD1mIGFjdGlvbj0iaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1z
dWJtaXR0ZWQgdmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4K
KzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD0icyI+Cis8L2Zvcm0+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oJ1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdoZW4gYW4gImludmFsaWQiIGV2bmV0
IGZvciBhIGNvbnRyb2wgaXMgY2FuY2VsZWQuJyk7CisKK2Z1bmN0aW9uIGNhbmNlbChldmVudCkg
eworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJp
ZnkoKSB7CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAo
cXVlcnkuaW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFz
c2VkKCdUaGUgZm9ybSBzaG91bGQgYmUgc3VibWl0dGVkLicpOworICAgICAgICBzaG91bGRCZVRy
dWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAgICAgICBkZWJ1
ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpMCcpLmFkZEV2ZW50
TGlzdGVuZXIoJ2ludmFsaWQnLCBjYW5jZWwsIGZhbHNlKTsKKyAgICAgICAgLy8gSFRNTEZvcm1F
bGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhlIHN1Ym1pdCBidXR0b24u
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xpY2soKTsKKyAgICAgICAg
dGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7CisgICAgfQorfQorCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5OworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODk4OGI3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12
YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rl
c3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0dG9uIHdpdGggZm9y
bW5vdmFsaWRhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBm
b3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFyY2guaW5kZXhP
ZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9y
bW5vdmFsaWRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWRi
Njk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2
ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9InRy
dWUiPgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0eXBlPXN1Ym1p
dCBpZD0icyIgZm9ybW5vdmFsaWRhdGU+Cis8L2Zvcm0+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
J1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0dG9uIHdpdGgg
Zm9ybW5vdmFsaWRhdGUuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7CisgICAgdmFy
IHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVlcnkuaW5kZXhPZign
c3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2VkKCdUaGUgZm9ybSBz
aG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdsb2NhdGlv
bi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09N
UExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVz
ZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Mn
KS5jbGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRl
ZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0
YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlv
bi1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zYTViY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9p
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
OSBAQAorVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFsaWRhdGUgaXMgc3VibWl0dGVkLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUaGUgZm9ybSBzaG91bGQgbm90IGJl
IHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xIGlz
IHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzhhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5o
dG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJpbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbCIgbm92YWxpZGF0ZT4KKzxpbnB1dCB0
eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCBy
ZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwvZm9ybT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFsaWRhdGUgaXMg
c3VibWl0dGVkLicpOworCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAgIHZhciBxdWVy
eSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4T2YoJ3N1Ym1p
dHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gc2hvdWxk
IG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnbG9jYXRpb24uc2Vh
cmNoLmluZGV4T2YoImkwPSIpICE9IC0xJyk7CisgICAgICAgIGRlYnVnKCdURVNUIENPTVBMRVRF
Jyk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhl
IHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xp
Y2soKTsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7
CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9y
VmVyaWZ5OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2
ZW50ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1
ZmQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rl
c3QgaWYgYW4gaW52YWxpZCBjb250cm9sIHByZXZlbnRzIGludGVyYWN0aXZlIGZvcm0gc3VibWlz
c2lvbiwgYW5kIHRoZSBmaXJzdCBpbnZhbGlkIGZvY3VzYWJsZSBjb250cm9sIGdldHMgZm9jdXMu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3JtIHdhcyBub3Qg
c3VibWl0dGVkCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImkyIikKK1RFU1QgQ09NUExFVEUKKyAgIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmFjNTYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJl
dmVudGVkLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rp
b249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwiPgorPGlucHV0IHR5cGU9
aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPXRydWU+Cis8aW5wdXQgbmFtZT1pMCByZXF1aXJl
ZCBpZD1pMCB2YWx1ZT0iYWJjIj4KKzxpbnB1dCBuYW1lPWkxIHJlcXVpcmVkIGlkPWkxIHN0eWxl
PSJkaXNwbGF5Om5vbmUiPgorPGlucHV0IG5hbWU9aTIgcmVxdWlyZWQgaWQ9aTI+Cis8aW5wdXQg
dHlwZT1zdWJtaXQgaWQ9cz4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBp
ZiBhbiBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJhY3RpdmUgZm9ybSBzdWJtaXNzaW9u
LCBhbmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNvbnRyb2wgZ2V0cyBmb2N1cy4nKTsK
KworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9j
YXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9
IC0xKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0
dGVkLicpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvcmNlIHRvIHJlbmRlciB0aGUgZm9y
bS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYiKS5vZmZzZXRXaWR0aDsKKyAg
ICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2Ug
dGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJyku
Y2xpY2soKTsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQnLCAnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImkyIiknKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09NUExFVEUnKTsK
KyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
Oword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFs
aWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVy
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQ1MzVj
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12
YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NiBAQAorU2hvdWxkIG5vdCBjcmFzaCBvciBoYXZlIGFuIGFzc2VydGlvbiBmYWlsdXJlIGlmIGEg
bm9kZSB3YXMgcmVtb3ZlZCBkdXJpbmcgYW4gImludmFsaWQiIGV2ZW50IGRpc3BhdGNoaW5nIGZv
ciB0aGUgbm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUt
bm9kZS1pbi1oYW5kbGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZl
LXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjgzN2Q3NzcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci5odG1sCkBAIC0wLDAgKzEsNTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJp
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXIuaHRtbCI+Cis8aW5w
dXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9
aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD0icyI+Cis8L2Zvcm0+
Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Nob3VsZCBub3QgY3Jhc2ggb3IgaGF2ZSBhbiBhc3Nl
cnRpb24gZmFpbHVyZSBpZiBhIG5vZGUgd2FzIHJlbW92ZWQgZHVyaW5nIGFuICJpbnZhbGlkIiBl
dmVudCBkaXNwYXRjaGluZyBmb3IgdGhlIG5vZGUuJyk7CisKK2Z1bmN0aW9uIGdjKCkgeworICAg
IGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNv
bGxlY3QoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBmb3Jj
ZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJl
Zm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3IFN0cmluZygiIik7CisgICAgfQor
fQorCitmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7CisgICAgdmFyIG5vZGUgPSBldmVudC50YXJn
ZXQ7CisgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOworICAgIGV2ZW50LnRh
cmdldCA9IG51bGw7CisgICAgZXZlbnQuY3VycmVudFRhcmdldCA9IG51bGw7CisgICAgZ2MoKTsK
K30KKworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cu
bG9jYXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScp
ICE9IC0xKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3Vi
bWl0dGVkLicpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpMCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBoYW5kbGVyLCBmYWxzZSk7CisgICAg
ICAgIC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tpcHMgdmFsaWRhdGlvbi4gVXNlIHRo
ZSBzdWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncycpLmNs
aWNrKCk7CisgICAgICAgIC8vIFNob3VsZCBoYXZlIG5vIGFzc2VydGlvbiBmYWlsdXJlcy4KKyAg
ICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7Cisg
ICAgfQorICAgIGRlYnVnKCdURVNUIENPTVBMRVRFJyk7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qcyBiL0xheW91dFRl
c3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyODNiMTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNl
bC5qcwpAQCAtMCwwICsxLDMyIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIGNoZWNrVmFsaWRp
dHkoKSB3aXRoIGludmFsaWQgZXZuZXQgY2FuY2VsaW5nJyk7CisKK3ZhciBwYXJlbnQgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFy
ZW50KTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGZvcm0+PGlucHV0IG5hbWU9aSByZXF1aXJlZD48
L2Zvcm0+JzsKK3ZhciBmb3JtID0gcGFyZW50LmZpcnN0Q2hpbGQ7Cit2YXIgaW5wdXQgPSBmb3Jt
LmZpcnN0Q2hpbGQ7CisKK2RlYnVnKCciaW52YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNlbGVkLicp
OwordmFyIGludmFsaWRGaXJlZCAgPSBmYWxzZTsKK3ZhciBub3RoaW5nTGlzdGVuZXIgPSB7fTsK
K25vdGhpbmdMaXN0ZW5lci5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaW52
YWxpZEZpcmVkID0gdHJ1ZTsKK307CitzaG91bGRCZVRydWUoJ2lucHV0LmFkZEV2ZW50TGlzdGVu
ZXIoImludmFsaWQiLCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRp
dHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnaW52YWxpZEZpcmVkID0gZmFs
c2U7ICFmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsKK2lucHV0LnJlbW92
ZUV2ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsKKworZGVi
dWcoJycpOworZGVidWcoJyJpbnZhbGlkIiBldmVudCBpcyBjYW5jZWxlZC4nKTsKK2ludmFsaWRG
aXJlZCA9IGZhbHNlOwordmFyIGNhbmNlbExpc3RlbmVyID0ge307CitjYW5jZWxMaXN0ZW5lci5o
YW5kbGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaW52YWxpZEZpcmVkID0gdHJ1ZTsK
KyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfTsKKy8vIEV2ZW4gaWYgJ2ludmFsaWQnIGlz
IGNhbmNlbGVkLCB0aGUgaW5wdXQuY2hlY2tWYWxpZGl0eSgpIHJlc3VsdCBpcyBzdGlsbCBmYWxz
ZS4KK3Nob3VsZEJlVHJ1ZSgnaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIGNhbmNl
bExpc3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVk
Jyk7CisvLyBmb3JtLmNoZWNrVmFsaWRpdHkoKSBzaG91bGQgYmUgdHJ1ZS4KK3Nob3VsZEJlVHJ1
ZSgnaW52YWxpZEZpcmVkID0gZmFsc2U7IGZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRG
aXJlZCcpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWNkMzliMS4uNDFmOTVl
MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwzMiBAQAorMjAxMC0wNC0wNiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IGludGVyYWN0aXZlIHZhbGlkYXRpb24gZm9yIGZvcm1zLgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5MzAKKworICAgICAgICAtIGNo
ZWNrVmFsaWRpdHkoKSBzdXBwb3J0cyB1bmhhbmRsZWQgaW52YWxpZCBjb250cm9sIGxpc3QKKyAg
ICAgICAgLSBwcmVwYXJlU3VibWl0KCkgcHJldmVudHMgdGhlIHN1Ym1pc3Npb24gaWYgbmVpdGhl
ciBub1ZhbGlkYXRlCisgICAgICAgICAgbm9yIGZvcm1Ob1ZhbGlkYXRlIGlzIHNwZWNpZmllZCwg
YW5kIGZvY3VzZXMgb24gdGhlIGZpcnN0IGludmFsaWQKKyAgICAgICAgICBjb250cm9sIG9mIHdo
aWNoICJpbnZhbGlkIiBldmVudCBpcyBub3QgY2FuY2VsZWQuCisKKyAgICAgICAgVGVzdHM6IGZh
c3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9m
b3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sCisgICAgICAgICAgICAgICBm
YXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbAorICAg
ICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUu
aHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXBy
ZXZlbnRlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6Y2hlY2tWYWxpZGl0eSk6CisgICAgICAgICAgSWYgdGhlIGNvbnRyb2wgaXMgaW52
YWxpZCBhbmQgdGhlICJpbnZhbGlkIiBpcyBub3QgY2FuY2VsZWQsCisgICAgICAgICAgcHVzaCB0
aGUgY29udHJvbCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KKyAgICAgICAgKiBodG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KToKKyAgICAgICAg
KiBodG1sL0hUTUxGb3JtRWxlbWVudC5oOgorCiAyMDEwLTA0LTA2ICBNYXR0aWFzIE5pc3NsZXIg
IDxtbmlzc2xlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVs
ZG1hbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNw
cCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcAppbmRleCBhZTk5MjFh
Li5kNDA3M2Q4IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCkBAIC0z
MzEsMTQgKzMzMSwxNiBAQCBTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6dmFsaWRhdGlv
bk1lc3NhZ2UoKQogICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9uTWVzc2FnZSgpOwog
fQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKQorYm9vbCBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKQogewotICAgIGlm
ICh3aWxsVmFsaWRhdGUoKSAmJiAhaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpKSB7Ci0gICAg
ICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50
LCBmYWxzZSwgdHJ1ZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHRydWU7CisgICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlkRm9ybUNvbnRyb2xF
bGVtZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEFuIGV2ZW50IGhhbmRsZXIg
Y2FuIGRlcmVmIHRoaXMgb2JqZWN0LgorICAgIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PiBwcm90ZWN0b3IodGhpcyk7CisgICAgYm9vbCBuZWVkc0RlZmF1bHRBY3Rpb24gPSBkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRy
dWUpKTsKKyAgICBpZiAobmVlZHNEZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250
cm9scyAmJiBpbkRvY3VtZW50KCkpCisgICAgICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9scy0+
YXBwZW5kKHRoaXMpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50Ojppc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5oCmluZGV4IDU4YjJmYTEuLmU1NGFhNDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuaApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgd2lsbFZhbGlkYXRlKCkgY29uc3Q7CiAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7
Ci0gICAgYm9vbCBjaGVja1ZhbGlkaXR5KCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3Rv
cjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzID0gMCk7CiAgICAgLy8gVGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBj
b25zdHJhaW50IG9yIGNvbnRyb2wgdmFsdWUgaXMgY2hhbmdlZC4KICAgICB2b2lkIHNldE5lZWRz
VmFsaWRpdHlDaGVjaygpOwogICAgIHZvaWQgc2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5n
Jik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IGJkYWMyOGEuLjkxNTQzMzUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDU1NI
ZWxwZXIuaCIKICNpbmNsdWRlICJET01Gb3JtRGF0YS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCkBAIC0yMjgsNiArMjI5LDQ4IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojpw
cmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCkKICAgICBtX2luc3VibWl0ID0gdHJ1ZTsKICAgICBt
X2RvaW5nc3VibWl0ID0gZmFsc2U7CiAKKyAgICAvLyBJbnRlcmFjdGl2ZSB2YWxpZGF0aW9uIG11
c3QgYmUgZG9uZSBiZWZvcmUgZGlzcGF0Y2hpbmcgdGhlIHN1Ym1pdCBldmVudC4KKyAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBzdWJtaXRFbGVtZW50ID0gMDsKKyAgICBOb2RlKiB0YXJnZXRO
b2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBpZiAodGFyZ2V0Tm9kZSAmJiB0
YXJnZXROb2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVudCogdGFyZ2V0RWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPih0YXJnZXROb2RlKTsKKyAgICAgICAgaWYgKHRh
cmdldEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgICAgICBzdWJtaXRF
bGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+KHRhcmdldEVsZW1l
bnQpOworICAgIH0KKyAgICBpZiAoIW5vVmFsaWRhdGUoKSAmJiAoIXN1Ym1pdEVsZW1lbnQgfHwg
IXN1Ym1pdEVsZW1lbnQtPmZvcm1Ob1ZhbGlkYXRlKCkpKSB7CisgICAgICAgIFZlY3RvcjxSZWZQ
dHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHM7Cisg
ICAgICAgIC8vIElmIHRoZSBmb3JtIGhhcyBpbnZhbGlkIGNvbnRyb2xzLCBhYm9ydCBzdWJtaXNz
aW9uLgorICAgICAgICBpZiAoIWNoZWNrVmFsaWRpdHkodW5oYW5kbGVkSW52YWxpZENvbnRyb2xz
KSkgeworICAgICAgICAgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMp
OworICAgICAgICAgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGZvY3VzYWJsZSBjb250cm9sLgor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVuaGFuZGxlZEludmFsaWRDb250
cm9scy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQqIHVuaGFuZGxlZCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodW5oYW5kbGVkLT5oYXNPbmVSZWYoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSkgeworICAgICAgICAgICAgICAgICAgICB1
bmhhbmRsZWQtPnNjcm9sbEludG9WaWV3SWZOZWVkZWQoZmFsc2UpOworICAgICAgICAgICAgICAg
ICAgICAvLyBzY3JvbGxJbnRvVmlld0lmTmVlZGVkKCkgZGlzcGF0Y2hlcyBldmVudHMsIHNvIHRo
ZSBzdGF0ZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiAndW5oYW5kbGVkJyBtaWdodCBiZSBj
aGFuZ2VkLgorICAgICAgICAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmhhbmRsZWQtPmZvY3VzKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIFdhcm4gYWJvdXQgYWxsIG9m
IHVuZm9yY3VzYWJsZSBjb250cm9scy4KKyAgICAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBmcmFtZSAm
JiBpIDwgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzW2ldLmdldCgpOworICAgICAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9j
dXNhYmxlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IFN0cmluZyBtZXNzYWdlKCJBbiBpbnZhbGlkIGZvcm0gY29udHJvbCB3aXRoIG5hbWU9JyVuYW1l
JyBpcyBub3QgZm9jdXNhYmxlLiIpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UucmVwbGFjZSgi
JW5hbWUiLCB1bmhhbmRsZWQtPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgZnJhbWUtPmRvbVdp
bmRvdygpLT5jb25zb2xlKCktPmFkZE1lc3NhZ2UoSFRNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3Nh
Z2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgbWVzc2FnZSwgMCwgZG9jdW1lbnQoKS0+dXJsKCku
c3RyaW5nKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9pbnN1Ym1pdCA9IGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCiAgICAgaWYg
KGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuc3VibWl0RXZlbnQsIHRy
dWUsIHRydWUpKSAmJiAhbV9kb2luZ3N1Ym1pdCkKICAgICAgICAgbV9kb2luZ3N1Ym1pdCA9IHRy
dWU7CiAKQEAgLTU0MSwxNiArNTg0LDE4IEBAIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxG
b3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiAKIGJvb2wgSFRNTEZvcm1FbGVtZW50
OjpjaGVja1ZhbGlkaXR5KCkKIHsKLSAgICAvLyBUT0RPOiBDaGVjayBmb3IgdW5oYW5kbGVkIGlu
dmFsaWQgY29udHJvbHMsIHNlZSAjMjc0NTIgZm9yIHRpcHMuCisgICAgVmVjdG9yPFJlZlB0cjxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IHVuaGFuZGxlZDsKKyAgICByZXR1cm4gY2hlY2tWYWxp
ZGl0eSh1bmhhbmRsZWQpOworfQogCi0gICAgYm9vbCBoYXNPbmx5VmFsaWRDb250cm9scyA9IHRy
dWU7Citib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKK3sKKyAg
ICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CiAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOwotICAgICAgICBp
ZiAoIWNvbnRyb2wtPmNoZWNrVmFsaWRpdHkoKSkKLSAgICAgICAgICAgIGhhc09ubHlWYWxpZENv
bnRyb2xzID0gZmFsc2U7CisgICAgICAgIGNvbnRyb2wtPmNoZWNrVmFsaWRpdHkoJnVuaGFuZGxl
ZEludmFsaWRDb250cm9scyk7CiAgICAgfQotCi0gICAgcmV0dXJuIGhhc09ubHlWYWxpZENvbnRy
b2xzOworICAgIHJldHVybiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuaXNFbXB0eSgpOwogfQog
CiBQYXNzUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+IEhUTUxGb3JtRWxlbWVudDo6ZWxl
bWVudEZvckFsaWFzKGNvbnN0IEF0b21pY1N0cmluZyYgYWxpYXMpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmgKaW5kZXggNDRiZjYyOC4uNzM1MDVjYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaApAQCAtMTM3
LDYgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygpIGNv
bnN0OwogICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGNyZWF0ZUZvcm1EYXRhKCk7CiAgICAgdW5z
aWduZWQgZm9ybUVsZW1lbnRJbmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgYm9v
bCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiYp
OwogCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxGb3JtQ29sbGVjdGlvbjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52691</attachid>
            <date>2010-04-06 18:20:05 -0700</date>
            <delta_ts>2010-04-07 02:23:27 -0700</delta_ts>
            <desc>Proposed patch (rev.5)</desc>
            <filename>bug-34930-20100407102003.patch</filename>
            <type>text/plain</type>
            <size>23520</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzMDY5MTI1Li4xMjRiZjllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQt
MDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzOiBBZGRlZC4K
KwogMjAxMC0wNC0wNiAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBOb3QgcmV2aWV3ZWQ6IHJlYmFzZWxpbmluZyBDaHJvbWl1bSBsYXlvdXQgdGVzdCBl
eHBlY3RhdGlvbnMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFs
aWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tW
YWxpZGl0eS1jYW5jZWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQ1YzYzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2NoZWNrVmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE2IEBACitUZXN0
cyBmb3IgY2hlY2tWYWxpZGl0eSgpIHdpdGggaW52YWxpZCBldm5ldCBjYW5jZWxpbmcKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyJpbnZhbGlkIiBldmVudCBpcyBub3QgY2FuY2Vs
ZWQuCitQQVNTIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBub3RoaW5nTGlzdGVu
ZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQgaXMgdHJ1
ZQorUEFTUyBpbnZhbGlkRmlyZWQgPSBmYWxzZTsgIWZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGlu
dmFsaWRGaXJlZCBpcyB0cnVlCisKKyJpbnZhbGlkIiBldmVudCBpcyBjYW5jZWxlZC4KK1BBU1Mg
aW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIGNhbmNlbExpc3RlbmVyLCBmYWxzZSk7
ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlzIHRydWUKK1BBU1MgaW52
YWxpZEZpcmVkID0gZmFsc2U7IGZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCBp
cyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNl
bC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzE3NTQKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwK
QEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRN
TC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNTgxMWUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rlc3QgaWYgdGhlIGZv
cm0gaXMgc3VibWl0dGVkIHdoZW4gYW4gImludmFsaWQiIGV2bmV0IGZvciBhIGNvbnRyb2wgaXMg
Y2FuY2VsZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3Jt
IHNob3VsZCBiZSBzdWJtaXR0ZWQuCitQQVNTIGxvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0i
KSAhPSAtMSBpcyB0cnVlCitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjMDFmYQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRt
bApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qt
c3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9ybSBpZD1mIGFjdGlvbj0iaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1z
dWJtaXR0ZWQgdmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4K
KzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD0icyI+Cis8L2Zvcm0+Cis8c2NyaXB0PgorZGVzY3JpcHRp
b24oJ1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdoZW4gYW4gImludmFsaWQiIGV2bmV0
IGZvciBhIGNvbnRyb2wgaXMgY2FuY2VsZWQuJyk7CisKK2Z1bmN0aW9uIGNhbmNlbChldmVudCkg
eworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJp
ZnkoKSB7CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAo
cXVlcnkuaW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFz
c2VkKCdUaGUgZm9ybSBzaG91bGQgYmUgc3VibWl0dGVkLicpOworICAgICAgICBzaG91bGRCZVRy
dWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAgICAgICBkZWJ1
ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpMCcpLmFkZEV2ZW50
TGlzdGVuZXIoJ2ludmFsaWQnLCBjYW5jZWwsIGZhbHNlKTsKKyAgICAgICAgLy8gSFRNTEZvcm1F
bGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhlIHN1Ym1pdCBidXR0b24u
CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xpY2soKTsKKyAgICAgICAg
dGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7CisgICAgfQorfQorCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5OworPC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODk4OGI3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12
YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rl
c3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0dG9uIHdpdGggZm9y
bW5vdmFsaWRhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBm
b3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFyY2guaW5kZXhP
ZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9y
bW5vdmFsaWRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWRi
Njk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2
ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFET0NU
WVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9InRy
dWUiPgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0eXBlPXN1Ym1p
dCBpZD0icyIgZm9ybW5vdmFsaWRhdGU+Cis8L2Zvcm0+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24o
J1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQgYnV0dG9uIHdpdGgg
Zm9ybW5vdmFsaWRhdGUuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7CisgICAgdmFy
IHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVlcnkuaW5kZXhPZign
c3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2VkKCdUaGUgZm9ybSBz
aG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCdsb2NhdGlv
bi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09N
UExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVz
ZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Mn
KS5jbGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRl
ZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0
YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlv
bi1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi4zYTViY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9p
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
OSBAQAorVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFsaWRhdGUgaXMgc3VibWl0dGVkLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUaGUgZm9ybSBzaG91bGQgbm90IGJl
IHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xIGlz
IHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9y
bXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzhhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5o
dG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxs
aW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJpbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbCIgbm92YWxpZGF0ZT4KKzxpbnB1dCB0
eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCBy
ZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwvZm9ybT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFsaWRhdGUgaXMg
c3VibWl0dGVkLicpOworCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAgIHZhciBxdWVy
eSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4T2YoJ3N1Ym1p
dHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gc2hvdWxk
IG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgnbG9jYXRpb24uc2Vh
cmNoLmluZGV4T2YoImkwPSIpICE9IC0xJyk7CisgICAgICAgIGRlYnVnKCdURVNUIENPTVBMRVRF
Jyk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhl
IHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xp
Y2soKTsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7
CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9y
VmVyaWZ5OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2
ZW50ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1
ZmQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rl
c3QgaWYgYW4gaW52YWxpZCBjb250cm9sIHByZXZlbnRzIGludGVyYWN0aXZlIGZvcm0gc3VibWlz
c2lvbiwgYW5kIHRoZSBmaXJzdCBpbnZhbGlkIGZvY3VzYWJsZSBjb250cm9sIGdldHMgZm9jdXMu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBmb3JtIHdhcyBub3Qg
c3VibWl0dGVkCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImkyIikKK1RFU1QgQ09NUExFVEUKKyAgIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmFjNTYKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJl
dmVudGVkLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rp
b249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwiPgorPGlucHV0IHR5cGU9
aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPXRydWU+Cis8aW5wdXQgbmFtZT1pMCByZXF1aXJl
ZCBpZD1pMCB2YWx1ZT0iYWJjIj4KKzxpbnB1dCBuYW1lPWkxIHJlcXVpcmVkIGlkPWkxIHN0eWxl
PSJkaXNwbGF5Om5vbmUiPgorPGlucHV0IG5hbWU9aTIgcmVxdWlyZWQgaWQ9aTI+Cis8aW5wdXQg
dHlwZT1zdWJtaXQgaWQ9cz4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBp
ZiBhbiBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJhY3RpdmUgZm9ybSBzdWJtaXNzaW9u
LCBhbmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNvbnRyb2wgZ2V0cyBmb2N1cy4nKTsK
KworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9j
YXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9
IC0xKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0
dGVkLicpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvcmNlIHRvIHJlbmRlciB0aGUgZm9y
bS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYiKS5vZmZzZXRXaWR0aDsKKyAg
ICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2Ug
dGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJyku
Y2xpY2soKTsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQn
KTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQnLCAnZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImkyIiknKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09NUExFVEUnKTsK
KyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
Oword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFs
aWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVy
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGQ1MzVj
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12
YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NiBAQAorU2hvdWxkIG5vdCBjcmFzaCBvciBoYXZlIGFuIGFzc2VydGlvbiBmYWlsdXJlIGlmIGEg
bm9kZSB3YXMgcmVtb3ZlZCBkdXJpbmcgYW4gImludmFsaWQiIGV2ZW50IGRpc3BhdGNoaW5nIGZv
ciB0aGUgbm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNT
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUt
bm9kZS1pbi1oYW5kbGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZl
LXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjQxNzhjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMt
dGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0
aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJp
bnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXIuaHRtbCI+Cis8aW5w
dXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9
aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD0icyI+Cis8L2Zvcm0+
Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Nob3VsZCBub3QgY3Jhc2ggb3IgaGF2ZSBhbiBhc3Nl
cnRpb24gZmFpbHVyZSBpZiBhIG5vZGUgd2FzIHJlbW92ZWQgZHVyaW5nIGFuICJpbnZhbGlkIiBl
dmVudCBkaXNwYXRjaGluZyBmb3IgdGhlIG5vZGUuJyk7CisKK2Z1bmN0aW9uIGdjKCkgeworICAg
IGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gR0NDb250cm9sbGVyLmNv
bGxlY3QoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBmb3Jj
ZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25zIGJl
Zm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3IFN0cmluZygiIik7CisgICAgfQor
fQorCitmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7CisgICAgdmFyIG5vZGUgPSBldmVudC50YXJn
ZXQ7CisgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOworICAgIGdjKCk7Cit9
CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2kwJykuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIGhhbmRsZXIsIGZhbHNlKTsKKyAg
ICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRl
eE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RQYXNzZWQoJ1RoZSBm
b3JtIHdhcyBzdWJtaXR0ZWQuJyk7CisgICAgICAgIGRlYnVnKCdURVNUIENPTVBMRVRFJyk7Cisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8g
SFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhlIHN1Ym1p
dCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xpY2soKTsK
KyAgICAgICAgLy8gU2hvdWxkIGhhdmUgbm8gYXNzZXJ0aW9uIGZhaWx1cmVzLgorICAgICAgICB0
ZXN0RmFpbGVkKCdUaGUgZm9ybSBzaG91bGQgYmUgc3VibWl0dGVkLicpOworICAgIH0KK30KKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9zY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMgYi9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjgzYjExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMKQEAg
LTAsMCArMSwzMiBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBjaGVja1ZhbGlkaXR5KCkgd2l0
aCBpbnZhbGlkIGV2bmV0IGNhbmNlbGluZycpOworCit2YXIgcGFyZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnZGl2Jyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudCk7Citw
YXJlbnQuaW5uZXJIVE1MID0gJzxmb3JtPjxpbnB1dCBuYW1lPWkgcmVxdWlyZWQ+PC9mb3JtPic7
Cit2YXIgZm9ybSA9IHBhcmVudC5maXJzdENoaWxkOwordmFyIGlucHV0ID0gZm9ybS5maXJzdENo
aWxkOworCitkZWJ1ZygnImludmFsaWQiIGV2ZW50IGlzIG5vdCBjYW5jZWxlZC4nKTsKK3ZhciBp
bnZhbGlkRmlyZWQgID0gZmFsc2U7Cit2YXIgbm90aGluZ0xpc3RlbmVyID0ge307Citub3RoaW5n
TGlzdGVuZXIuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGludmFsaWRGaXJl
ZCA9IHRydWU7Cit9Oworc2hvdWxkQmVUcnVlKCdpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZh
bGlkIiwgbm90aGluZ0xpc3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYg
aW52YWxpZEZpcmVkJyk7CitzaG91bGRCZVRydWUoJ2ludmFsaWRGaXJlZCA9IGZhbHNlOyAhZm9y
bS5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkJyk7CitpbnB1dC5yZW1vdmVFdmVudExp
c3RlbmVyKCdpbnZhbGlkJywgbm90aGluZ0xpc3RlbmVyLCBmYWxzZSk7CisKK2RlYnVnKCcnKTsK
K2RlYnVnKCciaW52YWxpZCIgZXZlbnQgaXMgY2FuY2VsZWQuJyk7CitpbnZhbGlkRmlyZWQgPSBm
YWxzZTsKK3ZhciBjYW5jZWxMaXN0ZW5lciA9IHt9OworY2FuY2VsTGlzdGVuZXIuaGFuZGxlRXZl
bnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGludmFsaWRGaXJlZCA9IHRydWU7CisgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKK307CisvLyBFdmVuIGlmICdpbnZhbGlkJyBpcyBjYW5jZWxl
ZCwgdGhlIGlucHV0LmNoZWNrVmFsaWRpdHkoKSByZXN1bHQgaXMgc3RpbGwgZmFsc2UuCitzaG91
bGRCZVRydWUoJ2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBjYW5jZWxMaXN0ZW5l
ciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCcpOworLy8g
Zm9ybS5jaGVja1ZhbGlkaXR5KCkgc2hvdWxkIGJlIHRydWUuCitzaG91bGRCZVRydWUoJ2ludmFs
aWRGaXJlZCA9IGZhbHNlOyBmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsK
KwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0No
YW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDljZDM5YjEuLjQxZjk1ZTMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMzIgQEAKKzIwMTAtMDQtMDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVu
dCBpbnRlcmFjdGl2ZSB2YWxpZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgLSBjaGVja1ZhbGlk
aXR5KCkgc3VwcG9ydHMgdW5oYW5kbGVkIGludmFsaWQgY29udHJvbCBsaXN0CisgICAgICAgIC0g
cHJlcGFyZVN1Ym1pdCgpIHByZXZlbnRzIHRoZSBzdWJtaXNzaW9uIGlmIG5laXRoZXIgbm9WYWxp
ZGF0ZQorICAgICAgICAgIG5vciBmb3JtTm9WYWxpZGF0ZSBpcyBzcGVjaWZpZWQsIGFuZCBmb2N1
c2VzIG9uIHRoZSBmaXJzdCBpbnZhbGlkCisgICAgICAgICAgY29udHJvbCBvZiB3aGljaCAiaW52
YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNlbGVkLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Zvcm1z
L2NoZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50
ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKKyAgICAgICAgICAg
ICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwKKyAg
ICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQu
aHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJl
bW92ZS1ub2RlLWluLWhhbmRsZXIuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6
OmNoZWNrVmFsaWRpdHkpOgorICAgICAgICAgIElmIHRoZSBjb250cm9sIGlzIGludmFsaWQgYW5k
IHRoZSAiaW52YWxpZCIgaXMgbm90IGNhbmNlbGVkLAorICAgICAgICAgIHB1c2ggdGhlIGNvbnRy
b2wgdG8gdGhlIHNwZWNpZmllZCB2ZWN0b3IuCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSk6CisgICAgICAgICogaHRtbC9I
VE1MRm9ybUVsZW1lbnQuaDoKKwogMjAxMC0wNC0wNiAgTWF0dGlhcyBOaXNzbGVyICA8bW5pc3Ns
ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggYWU5OTIxYS4uZDQwNzNk
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCisr
KyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMzMxLDE0ICsz
MzEsMTYgQEAgU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdl
KCkKICAgICByZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRhdGlvbk1lc3NhZ2UoKTsKIH0KIAotYm9v
bCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKK2Jvb2wgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKIHsKLSAgICBpZiAod2lsbFZh
bGlkYXRlKCkgJiYgIWlzVmFsaWRGb3JtQ29udHJvbEVsZW1lbnQoKSkgewotICAgICAgICBkaXNw
YXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2Us
IHRydWUpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OworICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBBbiBldmVudCBoYW5kbGVyIGNhbiBkZXJl
ZiB0aGlzIG9iamVjdC4KKyAgICBSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gcHJvdGVj
dG9yKHRoaXMpOworICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0gZGlzcGF0Y2hFdmVudChF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZhbHNlLCB0cnVlKSk7Cisg
ICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMgJiYg
aW5Eb2N1bWVudCgpKQorICAgICAgICB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0
aGlzKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVs
ZW1lbnQuaAppbmRleCA1OGIyZmExLi5lNTRhYTQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmgKQEAgLTEwOCw3ICsxMDgsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIHdpbGxW
YWxpZGF0ZSgpIGNvbnN0OwogICAgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOwotICAgIGJv
b2wgY2hlY2tWYWxpZGl0eSgpOworICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRy
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDAp
OwogICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWlu
dCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5
Q2hlY2soKTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBiZGFjMjhhLi45MTU0MzM1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgi
CiAjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgpAQCAtMjI4LDYgKzIyOSw0OCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6cHJlcGFyZVN1
Ym1pdChFdmVudCogZXZlbnQpCiAgICAgbV9pbnN1Ym1pdCA9IHRydWU7CiAgICAgbV9kb2luZ3N1
Ym1pdCA9IGZhbHNlOwogCisgICAgLy8gSW50ZXJhY3RpdmUgdmFsaWRhdGlvbiBtdXN0IGJlIGRv
bmUgYmVmb3JlIGRpc3BhdGNoaW5nIHRoZSBzdWJtaXQgZXZlbnQuCisgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudCogc3VibWl0RWxlbWVudCA9IDA7CisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2
ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7CisgICAgaWYgKHRhcmdldE5vZGUgJiYgdGFyZ2V0Tm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAgICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4odGFyZ2V0Tm9kZSk7CisgICAgICAgIGlmICh0YXJnZXRFbGVt
ZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICAgICAgc3VibWl0RWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KTsKKyAg
ICB9CisgICAgaWYgKCFub1ZhbGlkYXRlKCkgJiYgKCFzdWJtaXRFbGVtZW50IHx8ICFzdWJtaXRF
bGVtZW50LT5mb3JtTm9WYWxpZGF0ZSgpKSkgeworICAgICAgICBWZWN0b3I8UmVmUHRyPEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ+ID4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzOworICAgICAgICAv
LyBJZiB0aGUgZm9ybSBoYXMgaW52YWxpZCBjb250cm9scywgYWJvcnQgc3VibWlzc2lvbi4KKyAg
ICAgICAgaWYgKCFjaGVja1ZhbGlkaXR5KHVuaGFuZGxlZEludmFsaWRDb250cm9scykpIHsKKyAg
ICAgICAgICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKKyAgICAg
ICAgICAgIC8vIEZvY3VzIG9uIHRoZSBmaXJzdCBmb2N1c2FibGUgY29udHJvbC4KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiB1bmhh
bmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHVuaGFuZGxlZC0+aGFzT25lUmVmKCkpOworICAgICAgICAgICAgICAgIGlmICh1
bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVk
LT5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgLy8g
c2Nyb2xsSW50b1ZpZXdJZk5lZWRlZCgpIGRpc3BhdGNoZXMgZXZlbnRzLCBzbyB0aGUgc3RhdGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gb2YgJ3VuaGFuZGxlZCcgbWlnaHQgYmUgY2hhbmdlZC4K
KyAgICAgICAgICAgICAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5oYW5kbGVkLT5mb2N1cygpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBXYXJuIGFib3V0IGFsbCBvZiB1bmZvcmN1
c2FibGUgY29udHJvbHMuCisgICAgICAgICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5m
cmFtZSgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgZnJhbWUgJiYgaSA8IHVu
aGFuZGxlZEludmFsaWRDb250cm9scy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIHVuaGFuZGxlZCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9s
c1tpXS5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgp
KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
bWVzc2FnZSgiQW4gaW52YWxpZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90
IGZvY3VzYWJsZS4iKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwg
dW5oYW5kbGVkLT5uYW1lKCkpOworICAgICAgICAgICAgICAgIGZyYW1lLT5kb21XaW5kb3coKS0+
Y29uc29sZSgpLT5hZGRNZXNzYWdlKEhUTUxNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwg
RXJyb3JNZXNzYWdlTGV2ZWwsIG1lc3NhZ2UsIDAsIGRvY3VtZW50KCktPnVybCgpLnN0cmluZygp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1faW5zdWJtaXQgPSBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChkaXNwYXRj
aEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50LCB0cnVlLCB0cnVl
KSkgJiYgIW1fZG9pbmdzdWJtaXQpCiAgICAgICAgIG1fZG9pbmdzdWJtaXQgPSB0cnVlOwogCkBA
IC01NDEsMTYgKzU4NCwxOCBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVsZW1l
bnQ6OmRlZmF1bHRCdXR0b24oKSBjb25zdAogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tW
YWxpZGl0eSgpCiB7Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHVuaGFuZGxlZCBpbnZhbGlkIGNv
bnRyb2xzLCBzZWUgIzI3NDUyIGZvciB0aXBzLgorICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4gPiB1bmhhbmRsZWQ7CisgICAgcmV0dXJuIGNoZWNrVmFsaWRpdHkodW5o
YW5kbGVkKTsKK30KIAotICAgIGJvb2wgaGFzT25seVZhbGlkQ29udHJvbHMgPSB0cnVlOworYm9v
bCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PiA+JiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCit7CisgICAgUmVmUHRy
PEhUTUxGb3JtRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOwogICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBmb3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgSFRNTEZvcm1Db250
cm9sRWxlbWVudCogY29udHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKCFjb250
cm9sLT5jaGVja1ZhbGlkaXR5KCkpCi0gICAgICAgICAgICBoYXNPbmx5VmFsaWRDb250cm9scyA9
IGZhbHNlOworICAgICAgICBjb250cm9sLT5jaGVja1ZhbGlkaXR5KCZ1bmhhbmRsZWRJbnZhbGlk
Q29udHJvbHMpOwogICAgIH0KLQotICAgIHJldHVybiBoYXNPbmx5VmFsaWRDb250cm9sczsKKyAg
ICByZXR1cm4gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLmlzRW1wdHkoKTsKIH0KIAogUGFzc1Jl
ZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiBIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRGb3JB
bGlhcyhjb25zdCBBdG9taWNTdHJpbmcmIGFsaWFzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCmluZGV4
IDQ0YmY2MjguLjczNTA1Y2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKQEAgLTEzNyw2ICsxMzcs
NyBAQCBwcml2YXRlOgogICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcoKSBjb25zdDsKICAg
ICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YSgpOwogICAgIHVuc2lnbmVkIGZv
cm1FbGVtZW50SW5kZXgoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIGJvb2wgY2hlY2tW
YWxpZGl0eShWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4mKTsKIAogICAg
IGZyaWVuZCBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52717</attachid>
            <date>2010-04-07 02:23:34 -0700</date>
            <delta_ts>2010-04-08 15:12:33 -0700</delta_ts>
            <desc>Proposed patch (rev.6)</desc>
            <filename>bug-34930-20100407182332.patch</filename>
            <type>text/plain</type>
            <size>24675</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxYzcyN2I5Li41MzM2Y2YzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQt
MDcgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzOiBBZGRlZC4K
KwogMjAxMC0wNC0wNyAgSmFpbWUgWWFwICA8amFpbWV5YXBAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWM2MzZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSwxNiBAQAorVGVzdHMgZm9yIGNoZWNrVmFsaWRpdHkoKSB3aXRoIGludmFsaWQgZXZu
ZXQgY2FuY2VsaW5nCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisiaW52YWxpZCIg
ZXZlbnQgaXMgbm90IGNhbmNlbGVkLgorUEFTUyBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZh
bGlkIiwgbm90aGluZ0xpc3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYg
aW52YWxpZEZpcmVkIGlzIHRydWUKK1BBU1MgaW52YWxpZEZpcmVkID0gZmFsc2U7ICFmb3JtLmNo
ZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQgaXMgdHJ1ZQorCisiaW52YWxpZCIgZXZlbnQg
aXMgY2FuY2VsZWQuCitQQVNTIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBjYW5j
ZWxMaXN0ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJl
ZCBpcyB0cnVlCitQQVNTIGludmFsaWRGaXJlZCA9IGZhbHNlOyBmb3JtLmNoZWNrVmFsaWRpdHko
KSAmJiBpbnZhbGlkRmlyZWQgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
Y2hlY2tWYWxpZGl0eS1jYW5jZWwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tW
YWxpZGl0eS1jYW5jZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5k
OTMxNzU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1Zh
bGlkaXR5LWNhbmNlbC5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NoZWNrVmFs
aWRpdHktY2FuY2VsLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNh
bmNlbC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZh
bGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jZDU4MTFlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5
IEBACitUZXN0IGlmIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aGVuIGFuICJpbnZhbGlkIiBldm5l
dCBmb3IgYSBjb250cm9sIGlzIGNhbmNlbGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBUaGUgZm9ybSBzaG91bGQgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5z
ZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNh
bmNlbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9u
LWNhbmNlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzAxZmEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZh
bGlkYXRpb24tY2FuY2VsLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0g
aWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLmh0bWwiPgorPGlucHV0
IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPSJ0cnVlIj4KKzxpbnB1dCBuYW1lPWkw
IHJlcXVpcmVkIGlkPSJpMCI+Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9InMiPgorPC9mb3JtPgor
PHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0IGlmIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aGVu
IGFuICJpbnZhbGlkIiBldm5ldCBmb3IgYSBjb250cm9sIGlzIGNhbmNlbGVkLicpOworCitmdW5j
dGlvbiBjYW5jZWwoZXZlbnQpIHsKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfQorCitm
dW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAgIHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlv
bi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEp
IHsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4nKTsK
KyAgICAgICAgc2hvdWxkQmVUcnVlKCdsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0g
LTEnKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09NUExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaTAnKS5hZGRFdmVudExpc3RlbmVyKCdpbnZhbGlkJywgY2FuY2VsLCBmYWxzZSk7Cisg
ICAgICAgIC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tpcHMgdmFsaWRhdGlvbi4gVXNl
IHRoZSBzdWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncycp
LmNsaWNrKCk7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHdhcyBub3Qgc3VibWl0dGVk
LicpOworICAgIH0KK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cub25sb2FkID0gc3Rh
cnRPclZlcmlmeTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRl
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1mb3Jtbm92YWxpZGF0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTg5ODhiNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSw5IEBACitUZXN0IGlmIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIGEgc3Vi
bWl0IGJ1dHRvbiB3aXRoIGZvcm1ub3ZhbGlkYXRlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBUaGUgZm9ybSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9j
YXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUK
KyAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1mb3Jtbm92YWxpZGF0ZS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFj
dGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjlkYjY5OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS5odG1sCkBAIC0w
LDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJpbnRlcmFjdGl2ZS12
YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwiPgorPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9
c3VibWl0dGVkIHZhbHVlPSJ0cnVlIj4KKzxpbnB1dCBuYW1lPWkwIHJlcXVpcmVkIGlkPSJpMCI+
Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9InMiIGZvcm1ub3ZhbGlkYXRlPgorPC9mb3JtPgorPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0IGlmIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCB3aXRoIGEg
c3VibWl0IGJ1dHRvbiB3aXRoIGZvcm1ub3ZhbGlkYXRlLicpOworCitmdW5jdGlvbiBzdGFydE9y
VmVyaWZ5KCkgeworICAgIHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAg
aWYgKHF1ZXJ5LmluZGV4T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVz
dFBhc3NlZCgnVGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgICAgIHNo
b3VsZEJlVHJ1ZSgnbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xJyk7CisgICAg
ICAgIGRlYnVnKCdURVNUIENPTVBMRVRFJyk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25l
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBz
a2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdzJykuY2xpY2soKTsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZv
cm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
K3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tbm92YWxpZGF0ZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lu
dGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E1YmNhNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK1Rlc3QgaWYgdGhlIGZvcm0gd2l0aCBub3ZhbGlkYXRl
IGlzIHN1Ym1pdHRlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgVGhl
IGZvcm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuCitQQVNTIGxvY2F0aW9uLnNlYXJjaC5pbmRl
eE9mKCJpMD0iKSAhPSAtMSBpcyB0cnVlCitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFs
aWRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc4YTZmCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxp
ZGF0aW9uLW5vdmFsaWRhdGUuaHRtbApAQCAtMCwwICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3Qv
anMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9y
bSBpZD1mIGFjdGlvbj0iaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwiIG5v
dmFsaWRhdGU+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9InRydWUi
PgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0eXBlPXN1Ym1pdCBp
ZD0icyI+Cis8L2Zvcm0+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgaWYgdGhlIGZvcm0g
d2l0aCBub3ZhbGlkYXRlIGlzIHN1Ym1pdHRlZC4nKTsKKworZnVuY3Rpb24gc3RhcnRPclZlcmlm
eSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlmIChx
dWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RQYXNz
ZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLicpOworICAgICAgICBzaG91bGRC
ZVRydWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAgICAgICBk
ZWJ1ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tpcHMg
dmFsaWRhdGlvbi4gVXNlIHRoZSBzdWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgncycpLmNsaWNrKCk7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHdh
cyBub3Qgc3VibWl0dGVkLicpOworICAgIH0KK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit3aW5k
b3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9u
LXByZXZlbnRlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi43NWZkOTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSw5IEBACitUZXN0IGlmIGFuIGludmFsaWQgY29udHJvbCBwcmV2ZW50cyBpbnRl
cmFjdGl2ZSBmb3JtIHN1Ym1pc3Npb24sIGFuZCB0aGUgZmlyc3QgaW52YWxpZCBmb2N1c2FibGUg
Y29udHJvbCBnZXRzIGZvY3VzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRlZAorUEFTUyBkb2N1bWVudC5hY3RpdmVFbGVtZW50
IGlzIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpMiIpCitURVNUIENPTVBMRVRFCisgICAKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1w
cmV2ZW50ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1wcmV2ZW50ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
ZWZhYzU2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFj
dGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4v
Li4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxmb3JtIGlkPWYgYWN0aW9uPSJpbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5o
dG1sIj4KKzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT10cnVlPgorPGlu
cHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9aTAgdmFsdWU9ImFiYyI+Cis8aW5wdXQgbmFtZT1pMSBy
ZXF1aXJlZCBpZD1pMSBzdHlsZT0iZGlzcGxheTpub25lIj4KKzxpbnB1dCBuYW1lPWkyIHJlcXVp
cmVkIGlkPWkyPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPXM+Cis8L2Zvcm0+Cis8c2NyaXB0Pgor
ZGVzY3JpcHRpb24oJ1Rlc3QgaWYgYW4gaW52YWxpZCBjb250cm9sIHByZXZlbnRzIGludGVyYWN0
aXZlIGZvcm0gc3VibWlzc2lvbiwgYW5kIHRoZSBmaXJzdCBpbnZhbGlkIGZvY3VzYWJsZSBjb250
cm9sIGdldHMgZm9jdXMuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7CisgICAgdmFy
IHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVlcnkuaW5kZXhPZign
c3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSBz
aG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBGb3Jj
ZSB0byByZW5kZXIgdGhlIGZvcm0uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJm
Iikub2Zmc2V0V2lkdGg7CisgICAgICAgIC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tp
cHMgdmFsaWRhdGlvbi4gVXNlIHRoZSBzdWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncycpLmNsaWNrKCk7CisgICAgICAgIHRlc3RQYXNzZWQoJ1RoZSBmb3Jt
IHdhcyBub3Qgc3VibWl0dGVkJyk7CisgICAgICAgIHNob3VsZEJlKCdkb2N1bWVudC5hY3RpdmVF
bGVtZW50JywgJ2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpMiIpJyk7CisgICAgICAgIGRlYnVn
KCdURVNUIENPTVBMRVRFJyk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5OworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVt
b3ZlLW5vZGUtaW4taGFuZGxlci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOGNjMGZjNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Zm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDggQEAKK1Nob3VsZCBub3QgY3Jhc2ggb3IgaGF2ZSBhbiBhc3Nl
cnRpb24gZmFpbHVyZSBpZiBhIG5vZGUgd2FzIHJlbW92ZWQgZHVyaW5nIGFuICJpbnZhbGlkIiBl
dmVudCBkaXNwYXRjaGluZyBmb3IgdGhlIG5vZGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIFRoZSBmb3JtIHdhcyBzdWJtaXR0ZWQuCitURVNUIENPTVBMRVRFCisgCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24t
cmVtb3ZlLW5vZGUtaW4taGFuZGxlci5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXIuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTc4Y2FjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWlu
LWhhbmRsZXIuaHRtbApAQCAtMCwwICsxLDUzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291
cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9ybSBpZD1mIGFj
dGlvbj0iaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWwi
PgorPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPSJ0cnVlIj4KKzxpbnB1
dCBuYW1lPWkwIHJlcXVpcmVkIGlkPSJpMCI+Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9InMiPgor
PC9mb3JtPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdTaG91bGQgbm90IGNyYXNoIG9yIGhhdmUg
YW4gYXNzZXJ0aW9uIGZhaWx1cmUgaWYgYSBub2RlIHdhcyByZW1vdmVkIGR1cmluZyBhbiAiaW52
YWxpZCIgZXZlbnQgZGlzcGF0Y2hpbmcgZm9yIHRoZSBub2RlLicpOworCitmdW5jdGlvbiBnYygp
IHsKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxlcikKKyAgICAgICAgcmV0dXJuIEdDQ29udHJv
bGxlci5jb2xsZWN0KCk7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7IC8v
ID4gZm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIChGRiByZXF1aXJlcyBhYm91dCA5SyBhbGxvY2F0
aW9ucyBiZWZvcmUgYSBjb2xsZWN0KQorICAgICAgICB2YXIgcyA9IG5ldyBTdHJpbmcoIiIpOwor
ICAgIH0KK30KKworZnVuY3Rpb24gaGFuZGxlcihldmVudCkgeworICAgIHZhciBub2RlID0gZXZl
bnQudGFyZ2V0OworICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTsKKyAgICBn
YygpOworfQorCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdpMCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBoYW5kbGVyLCBmYWxz
ZSk7CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVl
cnkuaW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2Vk
KCdUaGUgZm9ybSB3YXMgc3VibWl0dGVkLicpOworICAgICAgICBkZWJ1ZygnVEVTVCBDT01QTEVU
RScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tpcHMgdmFsaWRhdGlvbi4gVXNlIHRo
ZSBzdWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncycpLmNs
aWNrKCk7CisgICAgICAgIC8vIFNob3VsZCBoYXZlIG5vIGFzc2VydGlvbiBmYWlsdXJlcy4KKyAg
ICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4nKTsKKyAgICB9
Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7
Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzIGIvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI4M2IxMQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2Vs
LmpzCkBAIC0wLDAgKzEsMzIgQEAKK2Rlc2NyaXB0aW9uKCdUZXN0cyBmb3IgY2hlY2tWYWxpZGl0
eSgpIHdpdGggaW52YWxpZCBldm5ldCBjYW5jZWxpbmcnKTsKKwordmFyIHBhcmVudCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYXJl
bnQpOworcGFyZW50LmlubmVySFRNTCA9ICc8Zm9ybT48aW5wdXQgbmFtZT1pIHJlcXVpcmVkPjwv
Zm9ybT4nOwordmFyIGZvcm0gPSBwYXJlbnQuZmlyc3RDaGlsZDsKK3ZhciBpbnB1dCA9IGZvcm0u
Zmlyc3RDaGlsZDsKKworZGVidWcoJyJpbnZhbGlkIiBldmVudCBpcyBub3QgY2FuY2VsZWQuJyk7
Cit2YXIgaW52YWxpZEZpcmVkICA9IGZhbHNlOwordmFyIG5vdGhpbmdMaXN0ZW5lciA9IHt9Owor
bm90aGluZ0xpc3RlbmVyLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpbnZh
bGlkRmlyZWQgPSB0cnVlOworfTsKK3Nob3VsZEJlVHJ1ZSgnaW5wdXQuYWRkRXZlbnRMaXN0ZW5l
cigiaW52YWxpZCIsIG5vdGhpbmdMaXN0ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0
eSgpICYmIGludmFsaWRGaXJlZCcpOworc2hvdWxkQmVUcnVlKCdpbnZhbGlkRmlyZWQgPSBmYWxz
ZTsgIWZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCcpOworaW5wdXQucmVtb3Zl
RXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIG5vdGhpbmdMaXN0ZW5lciwgZmFsc2UpOworCitkZWJ1
ZygnJyk7CitkZWJ1ZygnImludmFsaWQiIGV2ZW50IGlzIGNhbmNlbGVkLicpOworaW52YWxpZEZp
cmVkID0gZmFsc2U7Cit2YXIgY2FuY2VsTGlzdGVuZXIgPSB7fTsKK2NhbmNlbExpc3RlbmVyLmhh
bmRsZUV2ZW50ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpbnZhbGlkRmlyZWQgPSB0cnVlOwor
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9OworLy8gRXZlbiBpZiAnaW52YWxpZCcgaXMg
Y2FuY2VsZWQsIHRoZSBpbnB1dC5jaGVja1ZhbGlkaXR5KCkgcmVzdWx0IGlzIHN0aWxsIGZhbHNl
Lgorc2hvdWxkQmVUcnVlKCdpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgY2FuY2Vs
TGlzdGVuZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQn
KTsKKy8vIGZvcm0uY2hlY2tWYWxpZGl0eSgpIHNob3VsZCBiZSB0cnVlLgorc2hvdWxkQmVUcnVl
KCdpbnZhbGlkRmlyZWQgPSBmYWxzZTsgZm9ybS5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZp
cmVkJyk7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMzExMzUxLi5hMjJiYzAy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM4IEBACisyMDEwLTA0LTA3ICBLZW50IFRhbXVyYSAgPHRrZW50QGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bXBsZW1lbnQgaW50ZXJhY3RpdmUgdmFsaWRhdGlvbiBmb3IgZm9ybXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDkzMAorCisgICAgICAgIC0gSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpIHN1cHBvcnRzIHVuaGFuZGxlZCBp
bnZhbGlkIGNvbnRyb2wgbGlzdAorICAgICAgICAtIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJ
bnRlcmFjdGl2ZWx5KCkgY2FsbGVkIGZyb20gcHJlcGFyZVN1Ym1pdCgpCisgICAgICAgICAgcHJl
dmVudHMgdGhlIHN1Ym1pc3Npb24gaWYgbmVpdGhlciBub1ZhbGlkYXRlIG5vciBmb3JtTm9WYWxp
ZGF0ZSBpcworICAgICAgICAgIHNwZWNpZmllZCwgYW5kIGZvY3VzZXMgb24gdGhlIGZpcnN0IGlu
dmFsaWQgY29udHJvbCBvZiB3aGljaCAiaW52YWxpZCIKKyAgICAgICAgICBldmVudCBpcyBub3Qg
Y2FuY2VsZWQuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5j
ZWwuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9u
LWNhbmNlbC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9m
b3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sCisgICAgICAgICAgICAg
ICBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci5odG1sCisKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSk6Cisg
ICAgICAgICAgSWYgdGhlIGNvbnRyb2wgaXMgaW52YWxpZCBhbmQgdGhlICJpbnZhbGlkIiBpcyBu
b3QgY2FuY2VsZWQsCisgICAgICAgICAgcHVzaCB0aGUgY29udHJvbCB0byB0aGUgc3BlY2lmaWVk
IHZlY3Rvci4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9y
bUVsZW1lbnQ6OnZhbGlkYXRlSW50ZXJhY3RpdmVseSk6CisgICAgICAgICBUaGUgbWFpbiBwYXJ0
IG9mIHRoZSBpbnRlcmFjdGl2ZSB2YWxpZGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZv
cm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KToKKyAgICAgICAgIENhbGxzIHZhbGlkYXRlSW50ZXJh
Y3RpdmVseSgpLgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlk
aXR5KToKKyAgICAgICAgIFVzZXMgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scygpLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojpjb2xsZWN0VW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5oOgorCiAyMDEwLTA0
LTA3ICBKYWltZSBZYXAgIDxqYWltZXlhcEBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFl1cnkgU2VtaWtoYXRza3kuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5j
cHAKaW5kZXggYWU5OTIxYS4uZDdkYjljZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxG
b3JtQ29udHJvbEVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcApAQCAtMzMxLDE0ICszMzEsMTcgQEAgU3RyaW5nIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ6OnZhbGlkYXRpb25NZXNzYWdlKCkKICAgICByZXR1cm4gdmFsaWRpdHkoKS0+dmFsaWRh
dGlvbk1lc3NhZ2UoKTsKIH0KIAotYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1Zh
bGlkaXR5KCkKK2Jvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eShWZWN0
b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250
cm9scykKIHsKLSAgICBpZiAod2lsbFZhbGlkYXRlKCkgJiYgIWlzVmFsaWRGb3JtQ29udHJvbEVs
ZW1lbnQoKSkgewotICAgICAgICBkaXNwYXRjaEV2ZW50KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOworICAgIGlmICghd2lsbFZhbGlkYXRlKCkgfHwgaXNW
YWxpZEZvcm1Db250cm9sRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBB
biBldmVudCBoYW5kbGVyIGNhbiBkZXJlZiB0aGlzIG9iamVjdC4KKyAgICBSZWZQdHI8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAgIERvY3VtZW50KiBvcmlnaW5h
bERvY3VtZW50ID0gZG9jdW1lbnQoKTsKKyAgICBib29sIG5lZWRzRGVmYXVsdEFjdGlvbiA9IGRp
c3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuaW52YWxpZEV2ZW50LCBmYWxz
ZSwgdHJ1ZSkpOworICAgIGlmIChuZWVkc0RlZmF1bHRBY3Rpb24gJiYgdW5oYW5kbGVkSW52YWxp
ZENvbnRyb2xzICYmIGluRG9jdW1lbnQoKSAmJiBvcmlnaW5hbERvY3VtZW50ID09IGRvY3VtZW50
KCkpCisgICAgICAgIHVuaGFuZGxlZEludmFsaWRDb250cm9scy0+YXBwZW5kKHRoaXMpOworICAg
IHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oCmlu
ZGV4IDU4YjJmYTEuLmU1NGFhNDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
aApAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgd2lsbFZhbGlkYXRlKCkg
Y29uc3Q7CiAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgYm9vbCBjaGVja1Zh
bGlkaXR5KCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1D
b250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CiAgICAgLy8g
VGhpcyBtdXN0IGJlIGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRy
b2wgdmFsdWUgaXMgY2hhbmdlZC4KICAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwog
ICAgIHZvaWQgc2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuY3BwCmluZGV4IGJkYWMyOGEuLjhiNmI5MDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
Y3BwCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRl
ICJET01Gb3JtRGF0YS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC0y
MTksNiArMjIwLDU4IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojppc01haWx0b0Zvcm0oKSBjb25z
dAogICAgIHJldHVybiBwcm90b2NvbElzKG1fdXJsLCAibWFpbHRvIik7CiB9CiAKK2Jvb2wgSFRN
TEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkoRXZlbnQqIGV2ZW50KQoreworICAg
IEFTU0VSVChldmVudCk7CisgICAgaWYgKG5vVmFsaWRhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBzdWJtaXRFbGVtZW50ID0gMDsKKyAg
ICBOb2RlKiB0YXJnZXROb2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBpZiAo
dGFyZ2V0Tm9kZSAmJiB0YXJnZXROb2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxl
bWVudCogdGFyZ2V0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPih0YXJnZXROb2RlKTsK
KyAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAg
ICAgICAgICBzdWJtaXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVu
dCo+KHRhcmdldEVsZW1lbnQpOworICAgIH0KKyAgICBpZiAoc3VibWl0RWxlbWVudCAmJiBzdWJt
aXRFbGVtZW50LT5mb3JtTm9WYWxpZGF0ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlk
Q29udHJvbHM7CisgICAgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyh1bmhhbmRsZWRJ
bnZhbGlkQ29udHJvbHMpOworICAgIGlmICh1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiB0aGUgZm9ybSBoYXMgaW52YWxp
ZCBjb250cm9scywgYWJvcnQgc3VibWlzc2lvbi4KKworICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1l
bnQ+IHByb3RlY3Rvcih0aGlzKTsKKyAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxl
IGNvbnRyb2wuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVuaGFuZGxlZEludmFsaWRD
b250cm9scy5zaXplKCk7ICsraSkgeworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiB1
bmhhbmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgIGlm
ICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkpIHsKKyAgICAgICAgICAgIERvY3VtZW50KiBvcmln
aW5hbERvY3VtZW50ID0gdW5oYW5kbGVkLT5kb2N1bWVudCgpOworICAgICAgICAgICAgdW5oYW5k
bGVkLT5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKKyAgICAgICAgICAgIC8vIHNjcm9s
bEludG9WaWV3SWZOZWVkZWQoKSBkaXNwYXRjaGVzIGV2ZW50cywgc28gdGhlIHN0YXRlCisgICAg
ICAgICAgICAvLyBvZiAndW5oYW5kbGVkJyBtaWdodCBiZSBjaGFuZ2VkIHNvIGl0J3Mgbm8gbG9u
Z2VyIGZvY3VzYWJsZSBvcgorICAgICAgICAgICAgLy8gbW92ZWQgdG8gYW5vdGhlciBkb2N1bWVu
dC4KKyAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkgJiYgb3JpZ2luYWxE
b2N1bWVudCA9PSB1bmhhbmRsZWQtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB1bmhh
bmRsZWQtPmZvY3VzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisgICAgLy8gV2FybiBhYm91dCBhbGwgb2YgdW5mb2N1c2FibGUgY29u
dHJvbHMuCisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBmcmFtZSAmJiBpIDwgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHVuaGFuZGxlZCA9
IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKHVuaGFuZGxl
ZC0+aXNGb2N1c2FibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTdHJpbmcg
bWVzc2FnZSgiQW4gaW52YWxpZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90
IGZvY3VzYWJsZS4iKTsKKyAgICAgICAgbWVzc2FnZS5yZXBsYWNlKCIlbmFtZSIsIHVuaGFuZGxl
ZC0+bmFtZSgpKTsKKyAgICAgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPmFkZE1l
c3NhZ2UoSFRNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZl
bCwgbWVzc2FnZSwgMCwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIH0KKyAgICBt
X2luc3VibWl0ID0gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIEhUTUxGb3Jt
RWxlbWVudDo6cHJlcGFyZVN1Ym1pdChFdmVudCogZXZlbnQpCiB7CiAgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTIyOCw2ICsyODEsMTAgQEAgYm9vbCBIVE1MRm9y
bUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQoRXZlbnQqIGV2ZW50KQogICAgIG1faW5zdWJtaXQgPSB0
cnVlOwogICAgIG1fZG9pbmdzdWJtaXQgPSBmYWxzZTsKIAorICAgIC8vIEludGVyYWN0aXZlIHZh
bGlkYXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgc3VibWl0IGV2ZW50
LgorICAgIGlmICghdmFsaWRhdGVJbnRlcmFjdGl2ZWx5KGV2ZW50KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCiAgICAgaWYgKGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkuc3VibWl0RXZlbnQsIHRydWUsIHRydWUpKSAmJiAhbV9kb2luZ3N1Ym1pdCkKICAgICAgICAg
bV9kb2luZ3N1Ym1pdCA9IHRydWU7CiAKQEAgLTU0MSwxNiArNTk4LDE2IEBAIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiAKIGJv
b2wgSFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKIHsKLSAgICAvLyBUT0RPOiBDaGVj
ayBmb3IgdW5oYW5kbGVkIGludmFsaWQgY29udHJvbHMsIHNlZSAjMjc0NTIgZm9yIHRpcHMuCi0K
LSAgICBib29sIGhhc09ubHlWYWxpZENvbnRyb2xzID0gdHJ1ZTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNbaV07Ci0gICAgICAgIGlmICgh
Y29udHJvbC0+Y2hlY2tWYWxpZGl0eSgpKQotICAgICAgICAgICAgaGFzT25seVZhbGlkQ29udHJv
bHMgPSBmYWxzZTsKLSAgICB9CisgICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PiA+IGNvbnRyb2xzOworICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoY29u
dHJvbHMpOworICAgIHJldHVybiBjb250cm9scy5pc0VtcHR5KCk7Cit9CiAKLSAgICByZXR1cm4g
aGFzT25seVZhbGlkQ29udHJvbHM7Cit2b2lkIEhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVuaGFu
ZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+
ID4mIHVuaGFuZGxlZEludmFsaWRDb250cm9scykKK3sKKyAgICBSZWZQdHI8SFRNTEZvcm1FbGVt
ZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1F
bGVtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgZm9ybUVsZW1lbnRzW2ldLT5jaGVja1ZhbGlk
aXR5KCZ1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQ+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudEZvckFsaWFzKGNvbnN0IEF0
b21pY1N0cmluZyYgYWxpYXMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVt
ZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXggNDRiZjYyOC4uZWZj
ZWM4ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1dl
YkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaApAQCAtMTM3LDYgKzEzNywxMSBAQCBwcml2YXRl
OgogICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcoKSBjb25zdDsKICAgICBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBjcmVhdGVGb3JtRGF0YSgpOwogICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5k
ZXgoSFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUg
c3VibWlzc2lvbiBzaG91bGQgYmUgcHJvY2VlZWRlZC4KKyAgICBib29sIHZhbGlkYXRlSW50ZXJh
Y3RpdmVseShFdmVudCopOworICAgIC8vIFZhbGlkYXRlcyBlYWNoIG9mIHRoZSBjb250cm9scywg
YW5kIHN0b3JlcyBjb250cm9scyBvZiB3aGljaCAnaW52YWxpZCcKKyAgICAvLyBldmVudCB3YXMg
bm90IGNhbmNlbGVkIHRvIHRoZSBzcGVjaWZpZWQgdmVjdG9yLgorICAgIHZvaWQgY29sbGVjdFVu
aGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+ID4mKTsKIAogICAgIGZyaWVuZCBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52900</attachid>
            <date>2010-04-08 15:12:41 -0700</date>
            <delta_ts>2010-04-09 10:28:08 -0700</delta_ts>
            <desc>Proposed patch (rev.7)</desc>
            <filename>bug-34930-20100409071238.patch</filename>
            <type>text/plain</type>
            <size>24671</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmY2IxMjI3Li4xMDViZjk1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQt
MDggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzOiBBZGRlZC4K
KwogMjAxMC0wNC0wOCAgWXV6byBGdWppc2hpbWEgIDx5dXpvQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YzYzNmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE2IEBACitUZXN0cyBmb3IgY2hlY2tWYWxpZGl0eSgpIHdpdGggaW52YWxpZCBldm5ldCBj
YW5jZWxpbmcKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyJpbnZhbGlkIiBldmVu
dCBpcyBub3QgY2FuY2VsZWQuCitQQVNTIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQi
LCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZh
bGlkRmlyZWQgaXMgdHJ1ZQorUEFTUyBpbnZhbGlkRmlyZWQgPSBmYWxzZTsgIWZvcm0uY2hlY2tW
YWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCBpcyB0cnVlCisKKyJpbnZhbGlkIiBldmVudCBpcyBj
YW5jZWxlZC4KK1BBU1MgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIGNhbmNlbExp
c3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlz
IHRydWUKK1BBU1MgaW52YWxpZEZpcmVkID0gZmFsc2U7IGZvcm0uY2hlY2tWYWxpZGl0eSgpICYm
IGludmFsaWRGaXJlZCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVj
a1ZhbGlkaXR5LWNhbmNlbC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9jaGVja1ZhbGlk
aXR5LWNhbmNlbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzE3
NTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFsaWRp
dHktY2FuY2VsLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0
eS1jYW5jZWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2Vs
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1jYW5jZWwtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmNkNTgxMWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2lu
dGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAK
K1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdoZW4gYW4gImludmFsaWQiIGV2bmV0IGZv
ciBhIGNvbnRyb2wgaXMgY2FuY2VsZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitQQVNTIFRoZSBmb3JtIHNob3VsZCBiZSBzdWJtaXR0ZWQuCitQQVNTIGxvY2F0aW9uLnNlYXJj
aC5pbmRleE9mKCJpMD0iKSAhPSAtMSBpcyB0cnVlCitURVNUIENPTVBMRVRFCisgCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2Vs
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2Fu
Y2VsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VjMDFmYQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1jYW5jZWwuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVz
b3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlk
PSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9ybSBpZD1m
IGFjdGlvbj0iaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwuaHRtbCI+Cis8aW5wdXQgdHlw
ZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9aTAgcmVx
dWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD0icyI+Cis8L2Zvcm0+Cis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oJ1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdoZW4gYW4g
ImludmFsaWQiIGV2bmV0IGZvciBhIGNvbnRyb2wgaXMgY2FuY2VsZWQuJyk7CisKK2Z1bmN0aW9u
IGNhbmNlbChldmVudCkgeworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9CisKK2Z1bmN0
aW9uIHN0YXJ0T3JWZXJpZnkoKSB7CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNl
YXJjaDsKKyAgICBpZiAocXVlcnkuaW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgewor
ICAgICAgICB0ZXN0UGFzc2VkKCdUaGUgZm9ybSBzaG91bGQgYmUgc3VibWl0dGVkLicpOworICAg
ICAgICBzaG91bGRCZVRydWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScp
OworICAgICAgICBkZWJ1ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpMCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBjYW5jZWwsIGZhbHNlKTsKKyAgICAg
ICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhl
IHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xp
Y2soKTsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQuJyk7
CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9y
VmVyaWZ5OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9u
LWZvcm1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi41ODk4OGI3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDkgQEAKK1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJtaXQg
YnV0dG9uIHdpdGggZm9ybW5vdmFsaWRhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitQQVNTIFRoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlv
bi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9u
LWZvcm1ub3ZhbGlkYXRlLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZl
LXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42OWRiNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKQEAgLTAsMCAr
MSwzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlk
YXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJt
aXR0ZWQgdmFsdWU9InRydWUiPgorPGlucHV0IG5hbWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxp
bnB1dCB0eXBlPXN1Ym1pdCBpZD0icyIgZm9ybW5vdmFsaWRhdGU+Cis8L2Zvcm0+Cis8c2NyaXB0
PgorZGVzY3JpcHRpb24oJ1Rlc3QgaWYgdGhlIGZvcm0gaXMgc3VibWl0dGVkIHdpdGggYSBzdWJt
aXQgYnV0dG9uIHdpdGggZm9ybW5vdmFsaWRhdGUuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJp
ZnkoKSB7CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAo
cXVlcnkuaW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFz
c2VkKCdUaGUgZm9ybSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxk
QmVUcnVlKCdsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAg
ZGVidWcoJ1RFU1QgQ09NUExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICB9IGVsc2UgeworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBz
IHZhbGlkYXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3
YXMgbm90IHN1Ym1pdHRlZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2lu
ZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlv
bi1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zYTViY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsOSBAQAorVGVzdCBpZiB0aGUgZm9ybSB3aXRoIG5vdmFsaWRhdGUgaXMg
c3VibWl0dGVkLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBUaGUgZm9y
bSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2VhcmNoLmluZGV4T2Yo
ImkwPSIpICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0
ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NzhhNmYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tbm92YWxpZGF0ZS5odG1sCkBAIC0wLDAgKzEsMzggQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlk
PWYgYWN0aW9uPSJpbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRtbCIgbm92YWxp
ZGF0ZT4KKzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8
aW5wdXQgbmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJz
Ij4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSB3aXRo
IG5vdmFsaWRhdGUgaXMgc3VibWl0dGVkLicpOworCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkg
eworICAgIHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5
LmluZGV4T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgn
VGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgICAgIHNob3VsZEJlVHJ1
ZSgnbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0xJyk7CisgICAgICAgIGRlYnVn
KCdURVNUIENPTVBMRVRFJyk7CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxp
ZGF0aW9uLiBVc2UgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdzJykuY2xpY2soKTsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gd2FzIG5v
dCBzdWJtaXR0ZWQuJyk7CisgICAgfQorfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5v
bmxvYWQgPSBzdGFydE9yVmVyaWZ5OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJl
dmVudGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1wcmV2ZW50ZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjc1ZmQ5NDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDkgQEAKK1Rlc3QgaWYgYW4gaW52YWxpZCBjb250cm9sIHByZXZlbnRzIGludGVyYWN0
aXZlIGZvcm0gc3VibWlzc2lvbiwgYW5kIHRoZSBmaXJzdCBpbnZhbGlkIGZvY3VzYWJsZSBjb250
cm9sIGdldHMgZm9jdXMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRo
ZSBmb3JtIHdhcyBub3Qgc3VibWl0dGVkCitQQVNTIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgaXMg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImkyIikKK1RFU1QgQ09NUExFVEUKKyAgIApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZl
bnRlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9u
LXByZXZlbnRlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZmFj
NTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZl
LXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwKQEAgLTAsMCArMSw0MyBAQAorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9m
YXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
ZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
PGZvcm0gaWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwi
PgorPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPXRydWU+Cis8aW5wdXQg
bmFtZT1pMCByZXF1aXJlZCBpZD1pMCB2YWx1ZT0iYWJjIj4KKzxpbnB1dCBuYW1lPWkxIHJlcXVp
cmVkIGlkPWkxIHN0eWxlPSJkaXNwbGF5Om5vbmUiPgorPGlucHV0IG5hbWU9aTIgcmVxdWlyZWQg
aWQ9aTI+Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9cz4KKzwvZm9ybT4KKzxzY3JpcHQ+CitkZXNj
cmlwdGlvbignVGVzdCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJhY3RpdmUg
Zm9ybSBzdWJtaXNzaW9uLCBhbmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNvbnRyb2wg
Z2V0cyBmb2N1cy4nKTsKKworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVl
cnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJt
aXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3Vs
ZCBub3QgYmUgc3VibWl0dGVkLicpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEZvcmNlIHRv
IHJlbmRlciB0aGUgZm9ybS4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImYiKS5v
ZmZzZXRXaWR0aDsKKyAgICAgICAgLy8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2
YWxpZGF0aW9uLiBVc2UgdGhlIHN1Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdzJykuY2xpY2soKTsKKyAgICAgICAgdGVzdFBhc3NlZCgnVGhlIGZvcm0gd2Fz
IG5vdCBzdWJtaXR0ZWQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2RvY3VtZW50LmFjdGl2ZUVsZW1l
bnQnLCAnZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImkyIiknKTsKKyAgICAgICAgZGVidWcoJ1RF
U1QgQ09NUExFVEUnKTsKKyAgICB9CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
aW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUt
bm9kZS1pbi1oYW5kbGVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44Y2MwZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXItZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsOCBAQAorU2hvdWxkIG5vdCBjcmFzaCBvciBoYXZlIGFuIGFzc2VydGlv
biBmYWlsdXJlIGlmIGEgbm9kZSB3YXMgcmVtb3ZlZCBkdXJpbmcgYW4gImludmFsaWQiIGV2ZW50
IGRpc3BhdGNoaW5nIGZvciB0aGUgbm9kZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgVGhlIGZvcm0gd2FzIHN1Ym1pdHRlZC4KK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1v
dmUtbm9kZS1pbi1oYW5kbGVyLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxNzhjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFu
ZGxlci5odG1sCkBAIC0wLDAgKzEsNTMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2Vz
L2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2Ny
aXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlkPWYgYWN0aW9u
PSJpbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXIuaHRtbCI+Cis8
aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9InRydWUiPgorPGlucHV0IG5h
bWU9aTAgcmVxdWlyZWQgaWQ9ImkwIj4KKzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD0icyI+Cis8L2Zv
cm0+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oJ1Nob3VsZCBub3QgY3Jhc2ggb3IgaGF2ZSBhbiBh
c3NlcnRpb24gZmFpbHVyZSBpZiBhIG5vZGUgd2FzIHJlbW92ZWQgZHVyaW5nIGFuICJpbnZhbGlk
IiBldmVudCBkaXNwYXRjaGluZyBmb3IgdGhlIG5vZGUuJyk7CisKK2Z1bmN0aW9uIGdjKCkgewor
ICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICByZXR1cm4gR0NDb250cm9sbGVy
LmNvbGxlY3QoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsgLy8gPiBm
b3JjZSBnYXJiYWdlIGNvbGxlY3Rpb24gKEZGIHJlcXVpcmVzIGFib3V0IDlLIGFsbG9jYXRpb25z
IGJlZm9yZSBhIGNvbGxlY3QpCisgICAgICAgIHZhciBzID0gbmV3IFN0cmluZygiIik7CisgICAg
fQorfQorCitmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7CisgICAgdmFyIG5vZGUgPSBldmVudC50
YXJnZXQ7CisgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOworICAgIGdjKCk7
Cit9CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnkoKSB7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2kwJykuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIGhhbmRsZXIsIGZhbHNlKTsK
KyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlmIChxdWVyeS5p
bmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RQYXNzZWQoJ1Ro
ZSBmb3JtIHdhcyBzdWJtaXR0ZWQuJyk7CisgICAgICAgIGRlYnVnKCdURVNUIENPTVBMRVRFJyk7
CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gSFRNTEZvcm1FbGVtZW50OjpzdWJtaXQoKSBza2lwcyB2YWxpZGF0aW9uLiBVc2UgdGhlIHN1
Ym1pdCBidXR0b24uCisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzJykuY2xpY2so
KTsKKyAgICAgICAgLy8gU2hvdWxkIGhhdmUgbm8gYXNzZXJ0aW9uIGZhaWx1cmVzLgorICAgICAg
ICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSBzaG91bGQgYmUgc3VibWl0dGVkLicpOworICAgIH0KK30K
KworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9m
b3Jtcy9zY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMgYi9MYXlvdXRUZXN0cy9m
YXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjgzYjExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9zY3JpcHQtdGVzdHMvY2hlY2tWYWxpZGl0eS1jYW5jZWwuanMK
QEAgLTAsMCArMSwzMiBAQAorZGVzY3JpcHRpb24oJ1Rlc3RzIGZvciBjaGVja1ZhbGlkaXR5KCkg
d2l0aCBpbnZhbGlkIGV2bmV0IGNhbmNlbGluZycpOworCit2YXIgcGFyZW50ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhcmVudCk7
CitwYXJlbnQuaW5uZXJIVE1MID0gJzxmb3JtPjxpbnB1dCBuYW1lPWkgcmVxdWlyZWQ+PC9mb3Jt
Pic7Cit2YXIgZm9ybSA9IHBhcmVudC5maXJzdENoaWxkOwordmFyIGlucHV0ID0gZm9ybS5maXJz
dENoaWxkOworCitkZWJ1ZygnImludmFsaWQiIGV2ZW50IGlzIG5vdCBjYW5jZWxlZC4nKTsKK3Zh
ciBpbnZhbGlkRmlyZWQgID0gZmFsc2U7Cit2YXIgbm90aGluZ0xpc3RlbmVyID0ge307Citub3Ro
aW5nTGlzdGVuZXIuaGFuZGxlRXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGludmFsaWRG
aXJlZCA9IHRydWU7Cit9Oworc2hvdWxkQmVUcnVlKCdpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJp
bnZhbGlkIiwgbm90aGluZ0xpc3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkg
JiYgaW52YWxpZEZpcmVkJyk7CitzaG91bGRCZVRydWUoJ2ludmFsaWRGaXJlZCA9IGZhbHNlOyAh
Zm9ybS5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkJyk7CitpbnB1dC5yZW1vdmVFdmVu
dExpc3RlbmVyKCdpbnZhbGlkJywgbm90aGluZ0xpc3RlbmVyLCBmYWxzZSk7CisKK2RlYnVnKCcn
KTsKK2RlYnVnKCciaW52YWxpZCIgZXZlbnQgaXMgY2FuY2VsZWQuJyk7CitpbnZhbGlkRmlyZWQg
PSBmYWxzZTsKK3ZhciBjYW5jZWxMaXN0ZW5lciA9IHt9OworY2FuY2VsTGlzdGVuZXIuaGFuZGxl
RXZlbnQgPSBmdW5jdGlvbihldmVudCkgeworICAgIGludmFsaWRGaXJlZCA9IHRydWU7CisgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKK307CisvLyBFdmVuIGlmICdpbnZhbGlkJyBpcyBjYW5j
ZWxlZCwgdGhlIGlucHV0LmNoZWNrVmFsaWRpdHkoKSByZXN1bHQgaXMgc3RpbGwgZmFsc2UuCitz
aG91bGRCZVRydWUoJ2lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImludmFsaWQiLCBjYW5jZWxMaXN0
ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJlZCcpOwor
Ly8gZm9ybS5jaGVja1ZhbGlkaXR5KCkgc2hvdWxkIGJlIHRydWUuCitzaG91bGRCZVRydWUoJ2lu
dmFsaWRGaXJlZCA9IGZhbHNlOyBmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQn
KTsKKwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGIyMjc0NTMuLmRlODA1ZjQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzggQEAKKzIwMTAtMDQtMDggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBpbnRlcmFjdGl2ZSB2YWxpZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgLSBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkgc3VwcG9ydHMgdW5oYW5kbGVkIGludmFs
aWQgY29udHJvbCBsaXN0CisgICAgICAgIC0gSFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVy
YWN0aXZlbHkoKSBjYWxsZWQgZnJvbSBwcmVwYXJlU3VibWl0KCkKKyAgICAgICAgICBwcmV2ZW50
cyB0aGUgc3VibWlzc2lvbiBpZiBuZWl0aGVyIG5vVmFsaWRhdGUgbm9yIGZvcm1Ob1ZhbGlkYXRl
IGlzCisgICAgICAgICAgc3BlY2lmaWVkLCBhbmQgZm9jdXNlcyBvbiB0aGUgZmlyc3QgaW52YWxp
ZCBjb250cm9sIG9mIHdoaWNoICJpbnZhbGlkIgorICAgICAgICAgIGV2ZW50IGlzIG5vdCBjYW5j
ZWxlZC4KKworICAgICAgICBUZXN0czogZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5o
dG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2Fu
Y2VsLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlv
bi1mb3Jtbm92YWxpZGF0ZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJldmVudGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZh
c3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0
bWwKKworICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KToKKyAgICAg
ICAgICBJZiB0aGUgY29udHJvbCBpcyBpbnZhbGlkIGFuZCB0aGUgImludmFsaWQiIGlzIG5vdCBj
YW5jZWxlZCwKKyAgICAgICAgICBwdXNoIHRoZSBjb250cm9sIHRvIHRoZSBzcGVjaWZpZWQgdmVj
dG9yLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxl
bWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KToKKyAgICAgICAgIFRoZSBtYWluIHBhcnQgb2Yg
dGhlIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVs
ZW1lbnQ6OnByZXBhcmVTdWJtaXQpOgorICAgICAgICAgQ2FsbHMgdmFsaWRhdGVJbnRlcmFjdGl2
ZWx5KCkuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkp
OgorICAgICAgICAgVXNlcyBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKCkuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisKIDIwMTAtMDQtMDcg
IERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9s
aXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDRi
NTE2NjYuLmE4YzEzNWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAK
QEAgLTMyOSwxNCArMzI5LDE3IEBAIFN0cmluZyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp2YWxp
ZGF0aW9uTWVzc2FnZSgpCiAgICAgcmV0dXJuIHZhbGlkaXR5KCktPnZhbGlkYXRpb25NZXNzYWdl
KCk7CiB9CiAKLWJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpCiti
b29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoVmVjdG9yPFJlZlB0cjxI
VE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+KiB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpCiB7Ci0g
ICAgaWYgKHdpbGxWYWxpZGF0ZSgpICYmICFpc1ZhbGlkRm9ybUNvbnRyb2xFbGVtZW50KCkpIHsK
LSAgICAgICAgZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlk
RXZlbnQsIGZhbHNlLCB0cnVlKSk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIXdpbGxWYWxpZGF0ZSgpIHx8IGlzVmFsaWRGb3JtQ29u
dHJvbEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gQW4gZXZlbnQgaGFu
ZGxlciBjYW4gZGVyZWYgdGhpcyBvYmplY3QuCisgICAgUmVmUHRyPEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQ+IHByb3RlY3Rvcih0aGlzKTsKKyAgICBEb2N1bWVudCogb3JpZ2luYWxEb2N1bWVudCA9
IGRvY3VtZW50KCk7CisgICAgYm9vbCBuZWVkc0RlZmF1bHRBY3Rpb24gPSBkaXNwYXRjaEV2ZW50
KEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmludmFsaWRFdmVudCwgZmFsc2UsIHRydWUpKTsK
KyAgICBpZiAobmVlZHNEZWZhdWx0QWN0aW9uICYmIHVuaGFuZGxlZEludmFsaWRDb250cm9scyAm
JiBpbkRvY3VtZW50KCkgJiYgb3JpZ2luYWxEb2N1bWVudCA9PSBkb2N1bWVudCgpKQorICAgICAg
ICB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMtPmFwcGVuZCh0aGlzKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aXNWYWxpZEZvcm1Db250cm9s
RWxlbWVudCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuaAppbmRleCBkMWVlMDEy
Li4wMDQ1ZmJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgKQEAgLTEwOCw3
ICsxMDgsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgd2lsbFZhbGlkYXRlKCkgY29u
c3Q7CiAgICAgU3RyaW5nIHZhbGlkYXRpb25NZXNzYWdlKCk7Ci0gICAgYm9vbCBjaGVja1ZhbGlk
aXR5KCk7CisgICAgYm9vbCBjaGVja1ZhbGlkaXR5KFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzID0gMCk7CiAgICAgLy8gVGhp
cyBtdXN0IGJlIGNhbGxlZCB3aGVuIGEgdmFsaWRhdGlvbiBjb25zdHJhaW50IG9yIGNvbnRyb2wg
dmFsdWUgaXMgY2hhbmdlZC4KICAgICB2b2lkIHNldE5lZWRzVmFsaWRpdHlDaGVjaygpOwogICAg
IHZvaWQgc2V0Q3VzdG9tVmFsaWRpdHkoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwCmluZGV4IGJkYWMyOGEuLjhiNmI5MDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9I
VE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3Bw
CkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJE
T01Gb3JtRGF0YS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCkBAIC0yMTks
NiArMjIwLDU4IEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50Ojppc01haWx0b0Zvcm0oKSBjb25zdAog
ICAgIHJldHVybiBwcm90b2NvbElzKG1fdXJsLCAibWFpbHRvIik7CiB9CiAKK2Jvb2wgSFRNTEZv
cm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkoRXZlbnQqIGV2ZW50KQoreworICAgIEFT
U0VSVChldmVudCk7CisgICAgaWYgKG5vVmFsaWRhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBzdWJtaXRFbGVtZW50ID0gMDsKKyAgICBO
b2RlKiB0YXJnZXROb2RlID0gZXZlbnQtPnRhcmdldCgpLT50b05vZGUoKTsKKyAgICBpZiAodGFy
Z2V0Tm9kZSAmJiB0YXJnZXROb2RlLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgRWxlbWVu
dCogdGFyZ2V0RWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPih0YXJnZXROb2RlKTsKKyAg
ICAgICAgaWYgKHRhcmdldEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAg
ICAgICBzdWJtaXRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEZvcm1Db250cm9sRWxlbWVudCo+
KHRhcmdldEVsZW1lbnQpOworICAgIH0KKyAgICBpZiAoc3VibWl0RWxlbWVudCAmJiBzdWJtaXRF
bGVtZW50LT5mb3JtTm9WYWxpZGF0ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFZl
Y3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiB1bmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHM7CisgICAgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyh1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMpOworICAgIGlmICh1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBJZiB0aGUgZm9ybSBoYXMgaW52YWxpZCBj
b250cm9scywgYWJvcnQgc3VibWlzc2lvbi4KKworICAgIFJlZlB0cjxIVE1MRm9ybUVsZW1lbnQ+
IHByb3RlY3Rvcih0aGlzKTsKKyAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZm9jdXNhYmxlIGNv
bnRyb2wuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHVuaGFuZGxlZEludmFsaWRDb250
cm9scy5zaXplKCk7ICsraSkgeworICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiB1bmhh
bmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7CisgICAgICAgIGlmICh1
bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkpIHsKKyAgICAgICAgICAgIERvY3VtZW50KiBvcmlnaW5h
bERvY3VtZW50ID0gdW5oYW5kbGVkLT5kb2N1bWVudCgpOworICAgICAgICAgICAgdW5oYW5kbGVk
LT5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTsKKyAgICAgICAgICAgIC8vIHNjcm9sbElu
dG9WaWV3SWZOZWVkZWQoKSBkaXNwYXRjaGVzIGV2ZW50cywgc28gdGhlIHN0YXRlCisgICAgICAg
ICAgICAvLyBvZiAndW5oYW5kbGVkJyBtaWdodCBiZSBjaGFuZ2VkIHNvIGl0J3Mgbm8gbG9uZ2Vy
IGZvY3VzYWJsZSBvcgorICAgICAgICAgICAgLy8gbW92ZWQgdG8gYW5vdGhlciBkb2N1bWVudC4K
KyAgICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkgJiYgb3JpZ2luYWxEb2N1
bWVudCA9PSB1bmhhbmRsZWQtPmRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgICAgICB1bmhhbmRs
ZWQtPmZvY3VzKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgLy8gV2FybiBhYm91dCBhbGwgb2YgdW5mb2N1c2FibGUgY29udHJv
bHMuCisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBmcmFtZSAmJiBpIDwgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHVuaGFuZGxlZCA9IHVu
aGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKHVuaGFuZGxlZC0+
aXNGb2N1c2FibGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTdHJpbmcgbWVz
c2FnZSgiQW4gaW52YWxpZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90IGZv
Y3VzYWJsZS4iKTsKKyAgICAgICAgbWVzc2FnZS5yZXBsYWNlKCIlbmFtZSIsIHVuaGFuZGxlZC0+
bmFtZSgpKTsKKyAgICAgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xlKCktPmFkZE1lc3Nh
Z2UoSFRNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
bWVzc2FnZSwgMCwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIH0KKyAgICBtX2lu
c3VibWl0ID0gZmFsc2U7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBib29sIEhUTUxGb3JtRWxl
bWVudDo6cHJlcGFyZVN1Ym1pdChFdmVudCogZXZlbnQpCiB7CiAgICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQoKS0+ZnJhbWUoKTsKQEAgLTIyOCw2ICsyODEsMTAgQEAgYm9vbCBIVE1MRm9ybUVs
ZW1lbnQ6OnByZXBhcmVTdWJtaXQoRXZlbnQqIGV2ZW50KQogICAgIG1faW5zdWJtaXQgPSB0cnVl
OwogICAgIG1fZG9pbmdzdWJtaXQgPSBmYWxzZTsKIAorICAgIC8vIEludGVyYWN0aXZlIHZhbGlk
YXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBkaXNwYXRjaGluZyB0aGUgc3VibWl0IGV2ZW50Lgor
ICAgIGlmICghdmFsaWRhdGVJbnRlcmFjdGl2ZWx5KGV2ZW50KSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCiAgICAgaWYgKGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
c3VibWl0RXZlbnQsIHRydWUsIHRydWUpKSAmJiAhbV9kb2luZ3N1Ym1pdCkKICAgICAgICAgbV9k
b2luZ3N1Ym1pdCA9IHRydWU7CiAKQEAgLTU0MSwxNiArNTk4LDE2IEBAIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIEhUTUxGb3JtRWxlbWVudDo6ZGVmYXVsdEJ1dHRvbigpIGNvbnN0CiAKIGJvb2wg
SFRNTEZvcm1FbGVtZW50OjpjaGVja1ZhbGlkaXR5KCkKIHsKLSAgICAvLyBUT0RPOiBDaGVjayBm
b3IgdW5oYW5kbGVkIGludmFsaWQgY29udHJvbHMsIHNlZSAjMjc0NTIgZm9yIHRpcHMuCi0KLSAg
ICBib29sIGhhc09ubHlWYWxpZENvbnRyb2xzID0gdHJ1ZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtRWxlbWVudHNbaV07Ci0gICAgICAgIGlmICghY29u
dHJvbC0+Y2hlY2tWYWxpZGl0eSgpKQotICAgICAgICAgICAgaGFzT25seVZhbGlkQ29udHJvbHMg
PSBmYWxzZTsKLSAgICB9CisgICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50
PiA+IGNvbnRyb2xzOworICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoY29udHJv
bHMpOworICAgIHJldHVybiBjb250cm9scy5pc0VtcHR5KCk7Cit9CiAKLSAgICByZXR1cm4gaGFz
T25seVZhbGlkQ29udHJvbHM7Cit2b2lkIEhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVuaGFuZGxl
ZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4m
IHVuaGFuZGxlZEludmFsaWRDb250cm9scykKK3sKKyAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50
PiBwcm90ZWN0b3IodGhpcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVt
ZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgZm9ybUVsZW1lbnRzW2ldLT5jaGVja1ZhbGlkaXR5
KCZ1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpOwogfQogCiBQYXNzUmVmUHRyPEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQ+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudEZvckFsaWFzKGNvbnN0IEF0b21p
Y1N0cmluZyYgYWxpYXMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXggNDRiZjYyOC4uOTIzYzcz
NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaApAQCAtMTM3LDYgKzEzNywxMSBAQCBwcml2YXRlOgog
ICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcoKSBjb25zdDsKICAgICBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBjcmVhdGVGb3JtRGF0YSgpOwogICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXgo
SFRNTEZvcm1Db250cm9sRWxlbWVudCopOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3Vi
bWlzc2lvbiBzaG91bGQgYmUgcHJvY2VlZGVkLgorICAgIGJvb2wgdmFsaWRhdGVJbnRlcmFjdGl2
ZWx5KEV2ZW50Kik7CisgICAgLy8gVmFsaWRhdGVzIGVhY2ggb2YgdGhlIGNvbnRyb2xzLCBhbmQg
c3RvcmVzIGNvbnRyb2xzIG9mIHdoaWNoICdpbnZhbGlkJworICAgIC8vIGV2ZW50IHdhcyBub3Qg
Y2FuY2VsZWQgdG8gdGhlIHNwZWNpZmllZCB2ZWN0b3IuCisgICAgdm9pZCBjb2xsZWN0VW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzKFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4g
PiYpOwogCiAgICAgZnJpZW5kIGNsYXNzIEhUTUxGb3JtQ29sbGVjdGlvbjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52964</attachid>
            <date>2010-04-09 10:28:16 -0700</date>
            <delta_ts>2010-04-09 10:35:41 -0700</delta_ts>
            <desc>Proposed patch (rev.8)</desc>
            <filename>bug-34930-20100410022813.patch</filename>
            <type>text/plain</type>
            <size>25188</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4MmE3M2NkLi41NzQ1MjAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQt
MDggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzOiBBZGRlZC4K
KwogMjAxMC0wNC0wOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3Y2IyMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTYgQEAKK1Rlc3RzIGZvciBjaGVja1ZhbGlkaXR5KCkgd2l0aCBpbnZhbGlkIGV2ZW50
IGNhbmNlbGluZworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworImludmFsaWQiIGV2
ZW50IGlzIG5vdCBjYW5jZWxlZC4KK1BBU1MgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxp
ZCIsIG5vdGhpbmdMaXN0ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGlu
dmFsaWRGaXJlZCBpcyB0cnVlCitQQVNTIGludmFsaWRGaXJlZCA9IGZhbHNlOyAhZm9ybS5jaGVj
a1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlzIHRydWUKKworImludmFsaWQiIGV2ZW50IGlz
IGNhbmNlbGVkLgorUEFTUyBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgY2FuY2Vs
TGlzdGVuZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQg
aXMgdHJ1ZQorUEFTUyBpbnZhbGlkRmlyZWQgPSBmYWxzZTsgZm9ybS5jaGVja1ZhbGlkaXR5KCkg
JiYgaW52YWxpZEZpcmVkIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2No
ZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFs
aWRpdHktY2FuY2VsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkz
MTc1NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxp
ZGl0eS1jYW5jZWwuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jaGVja1ZhbGlk
aXR5LWNhbmNlbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5j
ZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxp
ZGF0aW9uLWNhbmNlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDczMTE3MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
aW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBA
QAorVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2hlbiBhbiAiaW52YWxpZCIgZXZlbnQg
Zm9yIGEgY29udHJvbCBpcyBjYW5jZWxlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgVGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2Vh
cmNoLmluZGV4T2YoImkwPSIpICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5j
ZWwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1j
YW5jZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODNkZGM5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxp
ZGF0aW9uLWNhbmNlbC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlk
PWYgYWN0aW9uPSJpbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sIj4KKzxpbnB1dCB0
eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCBy
ZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwvZm9ybT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2hlbiBh
biAiaW52YWxpZCIgZXZlbnQgZm9yIGEgY29udHJvbCBpcyBjYW5jZWxlZC4nKTsKKworZnVuY3Rp
b24gY2FuY2VsKGV2ZW50KSB7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworZnVu
Y3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24u
c2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7
CisgICAgICAgIHRlc3RQYXNzZWQoJ1RoZSBmb3JtIHNob3VsZCBiZSBzdWJtaXR0ZWQuJyk7Cisg
ICAgICAgIHNob3VsZEJlVHJ1ZSgnbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0x
Jyk7CisgICAgICAgIGRlYnVnKCdURVNUIENPTVBMRVRFJyk7CisgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2kwJykuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIGNhbmNlbCwgZmFsc2UpOworICAg
ICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVzZSB0
aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKS5j
bGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRlZC4n
KTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0
T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU4OTg4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsOSBAQAorVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCBhIHN1Ym1p
dCBidXR0b24gd2l0aCBmb3Jtbm92YWxpZGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgVGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuCitQQVNTIGxvY2F0
aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMSBpcyB0cnVlCitURVNUIENPTVBMRVRFCisg
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tZm9ybW5vdmFsaWRhdGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3Rp
dmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjY5ZGI2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbApAQCAtMCww
ICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9ybSBpZD1mIGFjdGlvbj0iaW50ZXJhY3RpdmUtdmFs
aWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS5odG1sIj4KKzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1
Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgor
PGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIiBmb3Jtbm92YWxpZGF0ZT4KKzwvZm9ybT4KKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCBhIHN1
Ym1pdCBidXR0b24gd2l0aCBmb3Jtbm92YWxpZGF0ZS4nKTsKKworZnVuY3Rpb24gc3RhcnRPclZl
cmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlm
IChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLicpOworICAgICAgICBzaG91
bGRCZVRydWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAgICAg
ICBkZWJ1ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tp
cHMgdmFsaWRhdGlvbi4gVXNlIHRoZSBzdWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncycpLmNsaWNrKCk7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3Jt
IHdhcyBub3Qgc3VibWl0dGVkLicpOworICAgIH0KK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit3
aW5kb3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0
aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNWJjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw5IEBACitUZXN0IGlmIHRoZSBmb3JtIHdpdGggbm92YWxpZGF0ZSBp
cyBzdWJtaXR0ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBm
b3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFyY2guaW5kZXhP
ZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlk
YXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3OGE2ZgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1ub3ZhbGlkYXRlLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0g
aWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1sIiBub3Zh
bGlkYXRlPgorPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPSJ0cnVlIj4K
KzxpbnB1dCBuYW1lPWkwIHJlcXVpcmVkIGlkPSJpMCI+Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9
InMiPgorPC9mb3JtPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0IGlmIHRoZSBmb3JtIHdp
dGggbm92YWxpZGF0ZSBpcyBzdWJtaXR0ZWQuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnko
KSB7CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVl
cnkuaW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2Vk
KCdUaGUgZm9ybSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxkQmVU
cnVlKCdsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAgZGVi
dWcoJ1RFU1QgQ09NUExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZh
bGlkYXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMg
bm90IHN1Ym1pdHRlZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93
Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1w
cmV2ZW50ZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2
ZS12YWxpZGF0aW9uLXByZXZlbnRlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzVmZDk0NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsOSBAQAorVGVzdCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJh
Y3RpdmUgZm9ybSBzdWJtaXNzaW9uLCBhbmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNv
bnRyb2wgZ2V0cyBmb2N1cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
VGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBp
cyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaTIiKQorVEVTVCBDT01QTEVURQorICAgCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJl
dmVudGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tcHJldmVudGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVm
YWM1NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3Rp
dmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8Zm9ybSBpZD1mIGFjdGlvbj0iaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQuaHRt
bCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9dHJ1ZT4KKzxpbnB1
dCBuYW1lPWkwIHJlcXVpcmVkIGlkPWkwIHZhbHVlPSJhYmMiPgorPGlucHV0IG5hbWU9aTEgcmVx
dWlyZWQgaWQ9aTEgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Cis8aW5wdXQgbmFtZT1pMiByZXF1aXJl
ZCBpZD1pMj4KKzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD1zPgorPC9mb3JtPgorPHNjcmlwdD4KK2Rl
c2NyaXB0aW9uKCdUZXN0IGlmIGFuIGludmFsaWQgY29udHJvbCBwcmV2ZW50cyBpbnRlcmFjdGl2
ZSBmb3JtIHN1Ym1pc3Npb24sIGFuZCB0aGUgZmlyc3QgaW52YWxpZCBmb2N1c2FibGUgY29udHJv
bCBnZXRzIGZvY3VzLicpOworCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAgIHZhciBx
dWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4T2YoJ3N1
Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gc2hv
dWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRm9yY2Ug
dG8gcmVuZGVyIHRoZSBmb3JtLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZiIp
Lm9mZnNldFdpZHRoOworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBz
IHZhbGlkYXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0UGFzc2VkKCdUaGUgZm9ybSB3
YXMgbm90IHN1Ym1pdHRlZCcpOworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYWN0aXZlRWxl
bWVudCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaTIiKScpOworICAgICAgICBkZWJ1Zygn
VEVTVCBDT01QTEVURScpOworICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92
ZS1ub2RlLWluLWhhbmRsZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjhjYzBmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw4IEBACitTaG91bGQgbm90IGNyYXNoIG9yIGhhdmUgYW4gYXNzZXJ0
aW9uIGZhaWx1cmUgaWYgYSBub2RlIHdhcyByZW1vdmVkIGR1cmluZyBhbiAiaW52YWxpZCIgZXZl
bnQgZGlzcGF0Y2hpbmcgZm9yIHRoZSBub2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBUaGUgZm9ybSB3YXMgc3VibWl0dGVkLgorVEVTVCBDT01QTEVURQorIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJl
bW92ZS1ub2RlLWluLWhhbmRsZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3OGNhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1o
YW5kbGVyLmh0bWwKQEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rp
b249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci5odG1sIj4K
KzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQg
bmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwv
Zm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignU2hvdWxkIG5vdCBjcmFzaCBvciBoYXZlIGFu
IGFzc2VydGlvbiBmYWlsdXJlIGlmIGEgbm9kZSB3YXMgcmVtb3ZlZCBkdXJpbmcgYW4gImludmFs
aWQiIGV2ZW50IGRpc3BhdGNoaW5nIGZvciB0aGUgbm9kZS4nKTsKKworZnVuY3Rpb24gZ2MoKSB7
CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRyb2xs
ZXIuY29sbGVjdCgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+
IGZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlv
bnMgYmVmb3JlIGEgY29sbGVjdCkKKyAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCIiKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsKKyAgICB2YXIgbm9kZSA9IGV2ZW50
LnRhcmdldDsKKyAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgZ2Mo
KTsKK30KKworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaTAnKS5hZGRFdmVudExpc3RlbmVyKCdpbnZhbGlkJywgaGFuZGxlciwgZmFsc2Up
OworICAgIHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5
LmluZGV4T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgn
VGhlIGZvcm0gd2FzIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09NUExFVEUn
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVzZSB0aGUg
c3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKS5jbGlj
aygpOworICAgICAgICAvLyBTaG91bGQgaGF2ZSBubyBhc3NlcnRpb24gZmFpbHVyZXMuCisgICAg
ICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3VsZCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgfQor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5Owor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTk2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5q
cwpAQCAtMCwwICsxLDMyIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIGNoZWNrVmFsaWRpdHko
KSB3aXRoIGludmFsaWQgZXZlbnQgY2FuY2VsaW5nJyk7CisKK3ZhciBwYXJlbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFyZW50
KTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGZvcm0+PGlucHV0IG5hbWU9aSByZXF1aXJlZD48L2Zv
cm0+JzsKK3ZhciBmb3JtID0gcGFyZW50LmZpcnN0Q2hpbGQ7Cit2YXIgaW5wdXQgPSBmb3JtLmZp
cnN0Q2hpbGQ7CisKK2RlYnVnKCciaW52YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNlbGVkLicpOwor
dmFyIGludmFsaWRGaXJlZCAgPSBmYWxzZTsKK3ZhciBub3RoaW5nTGlzdGVuZXIgPSB7fTsKK25v
dGhpbmdMaXN0ZW5lci5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaW52YWxp
ZEZpcmVkID0gdHJ1ZTsKK307CitzaG91bGRCZVRydWUoJ2lucHV0LmFkZEV2ZW50TGlzdGVuZXIo
ImludmFsaWQiLCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHko
KSAmJiBpbnZhbGlkRmlyZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnaW52YWxpZEZpcmVkID0gZmFsc2U7
ICFmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsKK2lucHV0LnJlbW92ZUV2
ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsKKworZGVidWco
JycpOworZGVidWcoJyJpbnZhbGlkIiBldmVudCBpcyBjYW5jZWxlZC4nKTsKK2ludmFsaWRGaXJl
ZCA9IGZhbHNlOwordmFyIGNhbmNlbExpc3RlbmVyID0ge307CitjYW5jZWxMaXN0ZW5lci5oYW5k
bGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaW52YWxpZEZpcmVkID0gdHJ1ZTsKKyAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfTsKKy8vIEV2ZW4gaWYgJ2ludmFsaWQnIGlzIGNh
bmNlbGVkLCB0aGUgaW5wdXQuY2hlY2tWYWxpZGl0eSgpIHJlc3VsdCBpcyBzdGlsbCBmYWxzZS4K
K3Nob3VsZEJlVHJ1ZSgnaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIGNhbmNlbExp
c3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkJyk7
CisvLyBmb3JtLmNoZWNrVmFsaWRpdHkoKSBzaG91bGQgYmUgdHJ1ZS4KK3Nob3VsZEJlVHJ1ZSgn
aW52YWxpZEZpcmVkID0gZmFsc2U7IGZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJl
ZCcpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM5MzdmMy4uYjkzZjUyNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzOCBAQAorMjAxMC0wNC0wOCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IGludGVyYWN0aXZlIHZhbGlkYXRpb24gZm9yIGZvcm1zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5MzAKKworICAgICAgICAtIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKSBzdXBwb3J0cyB1bmhhbmRsZWQgaW52
YWxpZCBjb250cm9sIGxpc3QKKyAgICAgICAgLSBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50
ZXJhY3RpdmVseSgpIGNhbGxlZCBmcm9tIHByZXBhcmVTdWJtaXQoKQorICAgICAgICAgIHByZXZl
bnRzIHRoZSBzdWJtaXNzaW9uIGlmIG5laXRoZXIgbm9WYWxpZGF0ZSBub3IgZm9ybU5vVmFsaWRh
dGUgaXMKKyAgICAgICAgICBzcGVjaWZpZWQsIGFuZCBmb2N1c2VzIG9uIHRoZSBmaXJzdCBpbnZh
bGlkIGNvbnRyb2wgb2Ygd2hpY2ggImludmFsaWQiCisgICAgICAgICAgZXZlbnQgaXMgbm90IGNh
bmNlbGVkLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2Vs
Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1j
YW5jZWwuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0
aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9y
bXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXIu
aHRtbAorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAg
ICAgICAgIElmIHRoZSBjb250cm9sIGlzIGludmFsaWQgYW5kIHRoZSAiaW52YWxpZCIgaXMgbm90
IGNhbmNlbGVkLAorICAgICAgICAgIHB1c2ggdGhlIGNvbnRyb2wgdG8gdGhlIHNwZWNpZmllZCB2
ZWN0b3IuCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkpOgorICAgICAgICAgVGhlIG1haW4gcGFydCBv
ZiB0aGUgaW50ZXJhY3RpdmUgdmFsaWRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6cHJlcGFyZVN1Ym1pdCk6CisgICAgICAgICBDYWxscyB2YWxpZGF0ZUludGVyYWN0
aXZlbHkoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0
eSk6CisgICAgICAgICBVc2VzIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVuaGFuZGxlZEludmFsaWRD
b250cm9scyk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKwogMjAxMC0wNC0w
OCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApp
bmRleCA0YjUxNjY2Li5iY2RmNDBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCkBAIC0zMjksMTQgKzMyOSwxNyBAQCBTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dmFsaWRhdGlvbk1lc3NhZ2UoKQogICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9u
TWVzc2FnZSgpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRp
dHkoKQorYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZlY3RvcjxS
ZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xz
KQogewotICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiAhaXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
aW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEFuIGV2
ZW50IGhhbmRsZXIgY2FuIGRlcmVmIHRoaXMgb2JqZWN0LgorICAgIFJlZlB0cjxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50PiBvcmln
aW5hbERvY3VtZW50KGRvY3VtZW50KCkpOworICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0g
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZh
bHNlLCB0cnVlKSk7CisgICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMgJiYgaW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gZG9jdW1l
bnQoKSkKKyAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFs
aWRGb3JtQ29udHJvbEVsZW1lbnQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgK
aW5kZXggZDFlZTAxMi4uMDA0NWZiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHdpbGxW
YWxpZGF0ZSgpIGNvbnN0OwogICAgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOwotICAgIGJv
b2wgY2hlY2tWYWxpZGl0eSgpOworICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRy
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDAp
OwogICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWlu
dCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5
Q2hlY2soKTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBiZGFjMjhhLi4zYjg1ZWQ1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgi
CiAjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgpAQCAtMjE5LDYgKzIyMCw1OSBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6aXNNYWlsdG9G
b3JtKCkgY29uc3QKICAgICByZXR1cm4gcHJvdG9jb2xJcyhtX3VybCwgIm1haWx0byIpOwogfQog
Citib29sIEhUTUxGb3JtRWxlbWVudDo6dmFsaWRhdGVJbnRlcmFjdGl2ZWx5KEV2ZW50KiBldmVu
dCkKK3sKKyAgICBBU1NFUlQoZXZlbnQpOworICAgIGlmIChub1ZhbGlkYXRlKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogc3VibWl0RWxlbWVu
dCA9IDA7CisgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7
CisgICAgaWYgKHRhcmdldE5vZGUgJiYgdGFyZ2V0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4odGFy
Z2V0Tm9kZSk7CisgICAgICAgIGlmICh0YXJnZXRFbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVu
dCgpKQorICAgICAgICAgICAgc3VibWl0RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQqPih0YXJnZXRFbGVtZW50KTsKKyAgICB9CisgICAgaWYgKHN1Ym1pdEVsZW1l
bnQgJiYgc3VibWl0RWxlbWVudC0+Zm9ybU5vVmFsaWRhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4gdW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzOworICAgIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMo
dW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKTsKKyAgICBpZiAodW5oYW5kbGVkSW52YWxpZENvbnRy
b2xzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gSWYgdGhlIGZvcm0g
aGFzIGludmFsaWQgY29udHJvbHMsIGFib3J0IHN1Ym1pc3Npb24uCisKKyAgICBSZWZQdHI8SFRN
TEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0
IGZvY3VzYWJsZSBjb250cm9sLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRs
ZWRJbnZhbGlkQ29udHJvbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudCogdW5oYW5kbGVkID0gdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzW2ldLmdldCgpOwor
ICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpICYmIHVuaGFuZGxlZC0+aW5Eb2N1
bWVudCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8RG9jdW1lbnQ+IG9yaWdpbmFsRG9jdW1lbnQo
dW5oYW5kbGVkLT5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIHVuaGFuZGxlZC0+c2Nyb2xsSW50
b1ZpZXdJZk5lZWRlZChmYWxzZSk7CisgICAgICAgICAgICAvLyBzY3JvbGxJbnRvVmlld0lmTmVl
ZGVkKCkgZGlzcGF0Y2hlcyBldmVudHMsIHNvIHRoZSBzdGF0ZQorICAgICAgICAgICAgLy8gb2Yg
J3VuaGFuZGxlZCcgbWlnaHQgYmUgY2hhbmdlZCBzbyBpdCdzIG5vIGxvbmdlciBmb2N1c2FibGUg
b3IKKyAgICAgICAgICAgIC8vIG1vdmVkIHRvIGFub3RoZXIgZG9jdW1lbnQuCisgICAgICAgICAg
ICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpICYmIHVuaGFuZGxlZC0+aW5Eb2N1bWVudCgp
ICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gdW5oYW5kbGVkLT5kb2N1bWVudCgpKSB7CisgICAgICAg
ICAgICAgICAgdW5oYW5kbGVkLT5mb2N1cygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8vIFdhcm4gYWJvdXQgYWxsIG9mIHVu
Zm9jdXNhYmxlIGNvbnRyb2xzLgorICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5m
cmFtZSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIEhUTUxGb3JtQ29udHJvbEVs
ZW1lbnQqIHVuaGFuZGxlZCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsKKyAg
ICAgICAgICAgIGlmICh1bmhhbmRsZWQtPmlzRm9jdXNhYmxlKCkgJiYgdW5oYW5kbGVkLT5pbkRv
Y3VtZW50KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBTdHJpbmcg
bWVzc2FnZSgiQW4gaW52YWxpZCBmb3JtIGNvbnRyb2wgd2l0aCBuYW1lPSclbmFtZScgaXMgbm90
IGZvY3VzYWJsZS4iKTsKKyAgICAgICAgICAgIG1lc3NhZ2UucmVwbGFjZSgiJW5hbWUiLCB1bmhh
bmRsZWQtPm5hbWUoKSk7CisgICAgICAgICAgICBmcmFtZS0+ZG9tV2luZG93KCktPmNvbnNvbGUo
KS0+YWRkTWVzc2FnZShIVE1MTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVz
c2FnZUxldmVsLCBtZXNzYWdlLCAwLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgbV9pbnN1Ym1pdCA9IGZhbHNlOworICAgIHJldHVybiBmYWxzZTsK
K30KKwogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OnByZXBhcmVTdWJtaXQoRXZlbnQqIGV2ZW50KQog
ewogICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CkBAIC0yMjgsNiArMjgy
LDEwIEBAIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCkK
ICAgICBtX2luc3VibWl0ID0gdHJ1ZTsKICAgICBtX2RvaW5nc3VibWl0ID0gZmFsc2U7CiAKKyAg
ICAvLyBJbnRlcmFjdGl2ZSB2YWxpZGF0aW9uIG11c3QgYmUgZG9uZSBiZWZvcmUgZGlzcGF0Y2hp
bmcgdGhlIHN1Ym1pdCBldmVudC4KKyAgICBpZiAoIXZhbGlkYXRlSW50ZXJhY3RpdmVseShldmVu
dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmIChkaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLnN1Ym1pdEV2ZW50LCB0cnVlLCB0cnVlKSkgJiYgIW1fZG9p
bmdzdWJtaXQpCiAgICAgICAgIG1fZG9pbmdzdWJtaXQgPSB0cnVlOwogCkBAIC01NDEsMTYgKzU5
OSwyNCBAQCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MRm9ybUVsZW1lbnQ6OmRlZmF1bHRC
dXR0b24oKSBjb25zdAogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpCiB7
Ci0gICAgLy8gVE9ETzogQ2hlY2sgZm9yIHVuaGFuZGxlZCBpbnZhbGlkIGNvbnRyb2xzLCBzZWUg
IzI3NDUyIGZvciB0aXBzLgorICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVu
dD4gPiBjb250cm9sczsKKyAgICBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKGNvbnRy
b2xzKTsKKyAgICByZXR1cm4gY29udHJvbHMuaXNFbXB0eSgpOworfQogCi0gICAgYm9vbCBoYXNP
bmx5VmFsaWRDb250cm9scyA9IHRydWU7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZv
cm1FbGVtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50
KiBjb250cm9sID0gZm9ybUVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmNoZWNr
VmFsaWRpdHkoKSkKLSAgICAgICAgICAgIGhhc09ubHlWYWxpZENvbnRyb2xzID0gZmFsc2U7Cit2
b2lkIEhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0
b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4mIHVuaGFuZGxlZEludmFsaWRDb250
cm9scykKK3sKKyAgICBSZWZQdHI8SFRNTEZvcm1FbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7Cisg
ICAgLy8gQ29weSBmb3JtRWxtZW50cyBiZWNhdXNlIGV2ZW50IGhhbmRsZXJzIGNhbGxlZCBmcm9t
CisgICAgLy8gSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y2hlY2tWYWxpZGl0eSgpIG1pZ2h0IGNo
YW5nZSBmb3JtRWxlbWVudHMuCisgICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PiA+IGVsZW1lbnRzOworICAgIGVsZW1lbnRzLnJlc2VydmVDYXBhY2l0eShmb3JtRWxlbWVu
dHMuc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZm9ybUVsZW1lbnRzLnNp
emUoKTsgKytpKQorICAgICAgICBlbGVtZW50cy5hcHBlbmQoZm9ybUVsZW1lbnRzW2ldKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGVsZW1lbnRzW2ldLT5mb3JtKCkgPT0gdGhpcykKKyAgICAgICAgICAgIGVsZW1lbnRz
W2ldLT5jaGVja1ZhbGlkaXR5KCZ1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMpOwogICAgIH0KLQot
ICAgIHJldHVybiBoYXNPbmx5VmFsaWRDb250cm9sczsKIH0KIAogUGFzc1JlZlB0cjxIVE1MRm9y
bUNvbnRyb2xFbGVtZW50PiBIVE1MRm9ybUVsZW1lbnQ6OmVsZW1lbnRGb3JBbGlhcyhjb25zdCBB
dG9taWNTdHJpbmcmIGFsaWFzKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5oIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCmluZGV4IDQ0YmY2MjguLjky
M2M3MzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAorKysgYi9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKQEAgLTEzNyw2ICsxMzcsMTEgQEAgcHJpdmF0
ZToKICAgICBUZXh0RW5jb2RpbmcgZGF0YUVuY29kaW5nKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0
cjxGb3JtRGF0YT4gY3JlYXRlRm9ybURhdGEoKTsKICAgICB1bnNpZ25lZCBmb3JtRWxlbWVudElu
ZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHN1Ym1pc3Npb24gc2hvdWxkIGJlIHByb2NlZWRlZC4KKyAgICBib29sIHZhbGlkYXRlSW50ZXJh
Y3RpdmVseShFdmVudCopOworICAgIC8vIFZhbGlkYXRlcyBlYWNoIG9mIHRoZSBjb250cm9scywg
YW5kIHN0b3JlcyBjb250cm9scyBvZiB3aGljaCAnaW52YWxpZCcKKyAgICAvLyBldmVudCB3YXMg
bm90IGNhbmNlbGVkIHRvIHRoZSBzcGVjaWZpZWQgdmVjdG9yLgorICAgIHZvaWQgY29sbGVjdFVu
aGFuZGxlZEludmFsaWRDb250cm9scyhWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+ID4mKTsKIAogICAgIGZyaWVuZCBjbGFzcyBIVE1MRm9ybUNvbGxlY3Rpb247CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>52966</attachid>
            <date>2010-04-09 10:35:48 -0700</date>
            <delta_ts>2010-04-09 11:05:33 -0700</delta_ts>
            <desc>Proposed patch (rev.9)</desc>
            <filename>bug-34930-20100410023546.patch</filename>
            <type>text/plain</type>
            <size>25303</size>
            <attacher name="Kent Tamura">tkent</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4MmE3M2NkLi41NzQ1MjAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTAtMDQt
MDggIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBpbnRlcmFjdGl2ZSB2YWxp
ZGF0aW9uIGZvciBmb3Jtcy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM0OTMwCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciAiaW52YWxpZCIgZXZlbnQg
YW5kIGludGVyYWN0aXZlIHZhbGlkYXRpb24uCisKKyAgICAgICAgKiBmYXN0L2Zvcm1zL2NoZWNr
VmFsaWRpdHktY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1z
L2ludGVyYWN0aXZlLXZhbGlkYXRpb24tY2FuY2VsLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFs
aWRhdGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0
aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxp
ZGF0ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlk
YXRpb24tcHJldmVudGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXByZXZlbnRlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxl
ci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUt
dmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzOiBBZGRlZC4K
KwogMjAxMC0wNC0wOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9mb3Jtcy9jaGVja1ZhbGlkaXR5LWNhbmNlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA3Y2IyMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxpZGl0eS1jYW5jZWwtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMTYgQEAKK1Rlc3RzIGZvciBjaGVja1ZhbGlkaXR5KCkgd2l0aCBpbnZhbGlkIGV2ZW50
IGNhbmNlbGluZworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworImludmFsaWQiIGV2
ZW50IGlzIG5vdCBjYW5jZWxlZC4KK1BBU1MgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxp
ZCIsIG5vdGhpbmdMaXN0ZW5lciwgZmFsc2UpOyAhaW5wdXQuY2hlY2tWYWxpZGl0eSgpICYmIGlu
dmFsaWRGaXJlZCBpcyB0cnVlCitQQVNTIGludmFsaWRGaXJlZCA9IGZhbHNlOyAhZm9ybS5jaGVj
a1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkIGlzIHRydWUKKworImludmFsaWQiIGV2ZW50IGlz
IGNhbmNlbGVkLgorUEFTUyBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJpbnZhbGlkIiwgY2FuY2Vs
TGlzdGVuZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQg
aXMgdHJ1ZQorUEFTUyBpbnZhbGlkRmlyZWQgPSBmYWxzZTsgZm9ybS5jaGVja1ZhbGlkaXR5KCkg
JiYgaW52YWxpZEZpcmVkIGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2No
ZWNrVmFsaWRpdHktY2FuY2VsLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2NoZWNrVmFs
aWRpdHktY2FuY2VsLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkz
MTc1NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvY2hlY2tWYWxp
ZGl0eS1jYW5jZWwuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jaGVja1ZhbGlk
aXR5LWNhbmNlbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5j
ZWwtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxp
ZGF0aW9uLWNhbmNlbC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDczMTE3MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMv
aW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5jZWwtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsOSBA
QAorVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2hlbiBhbiAiaW52YWxpZCIgZXZlbnQg
Zm9yIGEgY29udHJvbCBpcyBjYW5jZWxlZC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKK1BBU1MgVGhlIGZvcm0gc2hvdWxkIGJlIHN1Ym1pdHRlZC4KK1BBU1MgbG9jYXRpb24uc2Vh
cmNoLmluZGV4T2YoImkwPSIpICE9IC0xIGlzIHRydWUKK1RFU1QgQ09NUExFVEUKKyAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1jYW5j
ZWwuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1j
YW5jZWwuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODNkZGM5Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxp
ZGF0aW9uLWNhbmNlbC5odG1sCkBAIC0wLDAgKzEsNDMgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMv
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAg
aWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxmb3JtIGlk
PWYgYWN0aW9uPSJpbnRlcmFjdGl2ZS12YWxpZGF0aW9uLWNhbmNlbC5odG1sIj4KKzxpbnB1dCB0
eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCBy
ZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwvZm9ybT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2hlbiBh
biAiaW52YWxpZCIgZXZlbnQgZm9yIGEgY29udHJvbCBpcyBjYW5jZWxlZC4nKTsKKworZnVuY3Rp
b24gY2FuY2VsKGV2ZW50KSB7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworZnVu
Y3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24u
c2VhcmNoOworICAgIGlmIChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7
CisgICAgICAgIHRlc3RQYXNzZWQoJ1RoZSBmb3JtIHNob3VsZCBiZSBzdWJtaXR0ZWQuJyk7Cisg
ICAgICAgIHNob3VsZEJlVHJ1ZSgnbG9jYXRpb24uc2VhcmNoLmluZGV4T2YoImkwPSIpICE9IC0x
Jyk7CisgICAgICAgIGRlYnVnKCdURVNUIENPTVBMRVRFJyk7CisgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2kwJykuYWRkRXZlbnRMaXN0ZW5lcignaW52YWxpZCcsIGNhbmNlbCwgZmFsc2UpOworICAg
ICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVzZSB0
aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKS5j
bGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMgbm90IHN1Ym1pdHRlZC4n
KTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93Lm9ubG9hZCA9IHN0YXJ0
T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjU4OTg4YjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsOSBAQAorVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCBhIHN1Ym1p
dCBidXR0b24gd2l0aCBmb3Jtbm92YWxpZGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1MgVGhlIGZvcm0gc2hvdWxkIG5vdCBiZSBzdWJtaXR0ZWQuCitQQVNTIGxvY2F0
aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMSBpcyB0cnVlCitURVNUIENPTVBMRVRFCisg
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tZm9ybW5vdmFsaWRhdGUuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3Rp
dmUtdmFsaWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjY5ZGI2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tZm9ybW5vdmFsaWRhdGUuaHRtbApAQCAtMCww
ICsxLDM4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3Nz
Ij4KKzxzY3JpcHQgc3JjPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+Cis8Zm9ybSBpZD1mIGFjdGlvbj0iaW50ZXJhY3RpdmUtdmFs
aWRhdGlvbi1mb3Jtbm92YWxpZGF0ZS5odG1sIj4KKzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1
Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQgbmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgor
PGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIiBmb3Jtbm92YWxpZGF0ZT4KKzwvZm9ybT4KKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbignVGVzdCBpZiB0aGUgZm9ybSBpcyBzdWJtaXR0ZWQgd2l0aCBhIHN1
Ym1pdCBidXR0b24gd2l0aCBmb3Jtbm92YWxpZGF0ZS4nKTsKKworZnVuY3Rpb24gc3RhcnRPclZl
cmlmeSgpIHsKKyAgICB2YXIgcXVlcnkgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoOworICAgIGlm
IChxdWVyeS5pbmRleE9mKCdzdWJtaXR0ZWQ9dHJ1ZScpICE9IC0xKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoJ1RoZSBmb3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLicpOworICAgICAgICBzaG91
bGRCZVRydWUoJ2xvY2F0aW9uLnNlYXJjaC5pbmRleE9mKCJpMD0iKSAhPSAtMScpOworICAgICAg
ICBkZWJ1ZygnVEVTVCBDT01QTEVURScpOworICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0KCkgc2tp
cHMgdmFsaWRhdGlvbi4gVXNlIHRoZSBzdWJtaXQgYnV0dG9uLgorICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncycpLmNsaWNrKCk7CisgICAgICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3Jt
IHdhcyBub3Qgc3VibWl0dGVkLicpOworICAgIH0KK30KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit3
aW5kb3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0
aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRl
cmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNWJjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw5IEBACitUZXN0IGlmIHRoZSBmb3JtIHdpdGggbm92YWxpZGF0ZSBp
cyBzdWJtaXR0ZWQuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIFRoZSBm
b3JtIHNob3VsZCBub3QgYmUgc3VibWl0dGVkLgorUEFTUyBsb2NhdGlvbi5zZWFyY2guaW5kZXhP
ZigiaTA9IikgIT0gLTEgaXMgdHJ1ZQorVEVTVCBDT01QTEVURQorIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLW5vdmFsaWRhdGUuaHRt
bCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlk
YXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzk3OGE2ZgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRh
dGlvbi1ub3ZhbGlkYXRlLmh0bWwKQEAgLTAsMCArMSwzOCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pz
L3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0g
aWQ9ZiBhY3Rpb249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tbm92YWxpZGF0ZS5odG1sIiBub3Zh
bGlkYXRlPgorPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9c3VibWl0dGVkIHZhbHVlPSJ0cnVlIj4K
KzxpbnB1dCBuYW1lPWkwIHJlcXVpcmVkIGlkPSJpMCI+Cis8aW5wdXQgdHlwZT1zdWJtaXQgaWQ9
InMiPgorPC9mb3JtPgorPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCdUZXN0IGlmIHRoZSBmb3JtIHdp
dGggbm92YWxpZGF0ZSBpcyBzdWJtaXR0ZWQuJyk7CisKK2Z1bmN0aW9uIHN0YXJ0T3JWZXJpZnko
KSB7CisgICAgdmFyIHF1ZXJ5ID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDsKKyAgICBpZiAocXVl
cnkuaW5kZXhPZignc3VibWl0dGVkPXRydWUnKSAhPSAtMSkgeworICAgICAgICB0ZXN0UGFzc2Vk
KCdUaGUgZm9ybSBzaG91bGQgbm90IGJlIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgc2hvdWxkQmVU
cnVlKCdsb2NhdGlvbi5zZWFyY2guaW5kZXhPZigiaTA9IikgIT0gLTEnKTsKKyAgICAgICAgZGVi
dWcoJ1RFU1QgQ09NUExFVEUnKTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZh
bGlkYXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0RmFpbGVkKCdUaGUgZm9ybSB3YXMg
bm90IHN1Ym1pdHRlZC4nKTsKKyAgICB9Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOword2luZG93
Lm9ubG9hZCA9IHN0YXJ0T3JWZXJpZnk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1w
cmV2ZW50ZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2
ZS12YWxpZGF0aW9uLXByZXZlbnRlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNzVmZDk0NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsOSBAQAorVGVzdCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgcHJldmVudHMgaW50ZXJh
Y3RpdmUgZm9ybSBzdWJtaXNzaW9uLCBhbmQgdGhlIGZpcnN0IGludmFsaWQgZm9jdXNhYmxlIGNv
bnRyb2wgZ2V0cyBmb2N1cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
VGhlIGZvcm0gd2FzIG5vdCBzdWJtaXR0ZWQKK1BBU1MgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBp
cyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaTIiKQorVEVTVCBDT01QTEVURQorICAgCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcHJl
dmVudGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Zvcm1zL2ludGVyYWN0aXZlLXZhbGlkYXRp
b24tcHJldmVudGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVm
YWM1NgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3Rp
dmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQuaHRtbApAQCAtMCwwICsxLDQzIEBACis8IURPQ1RZUEUg
aHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4u
L2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+
Cis8Zm9ybSBpZD1mIGFjdGlvbj0iaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQuaHRt
bCI+Cis8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1zdWJtaXR0ZWQgdmFsdWU9dHJ1ZT4KKzxpbnB1
dCBuYW1lPWkwIHJlcXVpcmVkIGlkPWkwIHZhbHVlPSJhYmMiPgorPGlucHV0IG5hbWU9aTEgcmVx
dWlyZWQgaWQ9aTEgc3R5bGU9ImRpc3BsYXk6bm9uZSI+Cis8aW5wdXQgbmFtZT1pMiByZXF1aXJl
ZCBpZD1pMj4KKzxpbnB1dCB0eXBlPXN1Ym1pdCBpZD1zPgorPC9mb3JtPgorPHNjcmlwdD4KK2Rl
c2NyaXB0aW9uKCdUZXN0IGlmIGFuIGludmFsaWQgY29udHJvbCBwcmV2ZW50cyBpbnRlcmFjdGl2
ZSBmb3JtIHN1Ym1pc3Npb24sIGFuZCB0aGUgZmlyc3QgaW52YWxpZCBmb2N1c2FibGUgY29udHJv
bCBnZXRzIGZvY3VzLicpOworCitmdW5jdGlvbiBzdGFydE9yVmVyaWZ5KCkgeworICAgIHZhciBx
dWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5LmluZGV4T2YoJ3N1
Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgnVGhlIGZvcm0gc2hv
dWxkIG5vdCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gRm9yY2Ug
dG8gcmVuZGVyIHRoZSBmb3JtLgorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZiIp
Lm9mZnNldFdpZHRoOworICAgICAgICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBz
IHZhbGlkYXRpb24uIFVzZSB0aGUgc3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ3MnKS5jbGljaygpOworICAgICAgICB0ZXN0UGFzc2VkKCdUaGUgZm9ybSB3
YXMgbm90IHN1Ym1pdHRlZCcpOworICAgICAgICBzaG91bGRCZSgnZG9jdW1lbnQuYWN0aXZlRWxl
bWVudCcsICdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaTIiKScpOworICAgICAgICBkZWJ1Zygn
VEVTVCBDT01QTEVURScpOworICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KKwor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit3aW5kb3cub25sb2FkID0gc3RhcnRPclZlcmlmeTsKKzwvc2Ny
aXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jt
cy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXItZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92
ZS1ub2RlLWluLWhhbmRsZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjhjYzBmYzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Zv
cm1zL2ludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw4IEBACitTaG91bGQgbm90IGNyYXNoIG9yIGhhdmUgYW4gYXNzZXJ0
aW9uIGZhaWx1cmUgaWYgYSBub2RlIHdhcyByZW1vdmVkIGR1cmluZyBhbiAiaW52YWxpZCIgZXZl
bnQgZGlzcGF0Y2hpbmcgZm9yIHRoZSBub2RlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBUaGUgZm9ybSB3YXMgc3VibWl0dGVkLgorVEVTVCBDT01QTEVURQorIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJl
bW92ZS1ub2RlLWluLWhhbmRsZXIuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1oYW5kbGVyLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE3OGNhYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1yZW1vdmUtbm9kZS1pbi1o
YW5kbGVyLmh0bWwKQEAgLTAsMCArMSw1MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxo
ZWFkPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9mYXN0L2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGZvcm0gaWQ9ZiBhY3Rp
b249ImludGVyYWN0aXZlLXZhbGlkYXRpb24tcmVtb3ZlLW5vZGUtaW4taGFuZGxlci5odG1sIj4K
KzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXN1Ym1pdHRlZCB2YWx1ZT0idHJ1ZSI+Cis8aW5wdXQg
bmFtZT1pMCByZXF1aXJlZCBpZD0iaTAiPgorPGlucHV0IHR5cGU9c3VibWl0IGlkPSJzIj4KKzwv
Zm9ybT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignU2hvdWxkIG5vdCBjcmFzaCBvciBoYXZlIGFu
IGFzc2VydGlvbiBmYWlsdXJlIGlmIGEgbm9kZSB3YXMgcmVtb3ZlZCBkdXJpbmcgYW4gImludmFs
aWQiIGV2ZW50IGRpc3BhdGNoaW5nIGZvciB0aGUgbm9kZS4nKTsKKworZnVuY3Rpb24gZ2MoKSB7
CisgICAgaWYgKHdpbmRvdy5HQ0NvbnRyb2xsZXIpCisgICAgICAgIHJldHVybiBHQ0NvbnRyb2xs
ZXIuY29sbGVjdCgpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeyAvLyA+
IGZvcmNlIGdhcmJhZ2UgY29sbGVjdGlvbiAoRkYgcmVxdWlyZXMgYWJvdXQgOUsgYWxsb2NhdGlv
bnMgYmVmb3JlIGEgY29sbGVjdCkKKyAgICAgICAgdmFyIHMgPSBuZXcgU3RyaW5nKCIiKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHsKKyAgICB2YXIgbm9kZSA9IGV2ZW50
LnRhcmdldDsKKyAgICBub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgZ2Mo
KTsKK30KKworZnVuY3Rpb24gc3RhcnRPclZlcmlmeSgpIHsKKyAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaTAnKS5hZGRFdmVudExpc3RlbmVyKCdpbnZhbGlkJywgaGFuZGxlciwgZmFsc2Up
OworICAgIHZhciBxdWVyeSA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2g7CisgICAgaWYgKHF1ZXJ5
LmluZGV4T2YoJ3N1Ym1pdHRlZD10cnVlJykgIT0gLTEpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgn
VGhlIGZvcm0gd2FzIHN1Ym1pdHRlZC4nKTsKKyAgICAgICAgZGVidWcoJ1RFU1QgQ09NUExFVEUn
KTsKKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCgpIHNraXBzIHZhbGlkYXRpb24uIFVzZSB0aGUg
c3VibWl0IGJ1dHRvbi4KKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3MnKS5jbGlj
aygpOworICAgICAgICAvLyBTaG91bGQgaGF2ZSBubyBhc3NlcnRpb24gZmFpbHVyZXMuCisgICAg
ICAgIHRlc3RGYWlsZWQoJ1RoZSBmb3JtIHNob3VsZCBiZSBzdWJtaXR0ZWQuJyk7CisgICAgfQor
fQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5vbmxvYWQgPSBzdGFydE9yVmVyaWZ5Owor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZm9ybXMvc2NyaXB0LXRlc3RzL2NoZWNrVmFsaWRpdHktY2FuY2VsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTk2ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Zvcm1zL3NjcmlwdC10ZXN0cy9jaGVja1ZhbGlkaXR5LWNhbmNlbC5q
cwpAQCAtMCwwICsxLDMyIEBACitkZXNjcmlwdGlvbignVGVzdHMgZm9yIGNoZWNrVmFsaWRpdHko
KSB3aXRoIGludmFsaWQgZXZlbnQgY2FuY2VsaW5nJyk7CisKK3ZhciBwYXJlbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKK2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocGFyZW50
KTsKK3BhcmVudC5pbm5lckhUTUwgPSAnPGZvcm0+PGlucHV0IG5hbWU9aSByZXF1aXJlZD48L2Zv
cm0+JzsKK3ZhciBmb3JtID0gcGFyZW50LmZpcnN0Q2hpbGQ7Cit2YXIgaW5wdXQgPSBmb3JtLmZp
cnN0Q2hpbGQ7CisKK2RlYnVnKCciaW52YWxpZCIgZXZlbnQgaXMgbm90IGNhbmNlbGVkLicpOwor
dmFyIGludmFsaWRGaXJlZCAgPSBmYWxzZTsKK3ZhciBub3RoaW5nTGlzdGVuZXIgPSB7fTsKK25v
dGhpbmdMaXN0ZW5lci5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaW52YWxp
ZEZpcmVkID0gdHJ1ZTsKK307CitzaG91bGRCZVRydWUoJ2lucHV0LmFkZEV2ZW50TGlzdGVuZXIo
ImludmFsaWQiLCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsgIWlucHV0LmNoZWNrVmFsaWRpdHko
KSAmJiBpbnZhbGlkRmlyZWQnKTsKK3Nob3VsZEJlVHJ1ZSgnaW52YWxpZEZpcmVkID0gZmFsc2U7
ICFmb3JtLmNoZWNrVmFsaWRpdHkoKSAmJiBpbnZhbGlkRmlyZWQnKTsKK2lucHV0LnJlbW92ZUV2
ZW50TGlzdGVuZXIoJ2ludmFsaWQnLCBub3RoaW5nTGlzdGVuZXIsIGZhbHNlKTsKKworZGVidWco
JycpOworZGVidWcoJyJpbnZhbGlkIiBldmVudCBpcyBjYW5jZWxlZC4nKTsKK2ludmFsaWRGaXJl
ZCA9IGZhbHNlOwordmFyIGNhbmNlbExpc3RlbmVyID0ge307CitjYW5jZWxMaXN0ZW5lci5oYW5k
bGVFdmVudCA9IGZ1bmN0aW9uKGV2ZW50KSB7CisgICAgaW52YWxpZEZpcmVkID0gdHJ1ZTsKKyAg
ICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworfTsKKy8vIEV2ZW4gaWYgJ2ludmFsaWQnIGlzIGNh
bmNlbGVkLCB0aGUgaW5wdXQuY2hlY2tWYWxpZGl0eSgpIHJlc3VsdCBpcyBzdGlsbCBmYWxzZS4K
K3Nob3VsZEJlVHJ1ZSgnaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiaW52YWxpZCIsIGNhbmNlbExp
c3RlbmVyLCBmYWxzZSk7ICFpbnB1dC5jaGVja1ZhbGlkaXR5KCkgJiYgaW52YWxpZEZpcmVkJyk7
CisvLyBmb3JtLmNoZWNrVmFsaWRpdHkoKSBzaG91bGQgYmUgdHJ1ZS4KK3Nob3VsZEJlVHJ1ZSgn
aW52YWxpZEZpcmVkID0gZmFsc2U7IGZvcm0uY2hlY2tWYWxpZGl0eSgpICYmIGludmFsaWRGaXJl
ZCcpOworCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmM5MzdmMy4uYjkzZjUyNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzOCBAQAorMjAxMC0wNC0wOCAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1w
bGVtZW50IGludGVyYWN0aXZlIHZhbGlkYXRpb24gZm9yIGZvcm1zLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ5MzAKKworICAgICAgICAtIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKSBzdXBwb3J0cyB1bmhhbmRsZWQgaW52
YWxpZCBjb250cm9sIGxpc3QKKyAgICAgICAgLSBIVE1MRm9ybUVsZW1lbnQ6OnZhbGlkYXRlSW50
ZXJhY3RpdmVseSgpIGNhbGxlZCBmcm9tIHByZXBhcmVTdWJtaXQoKQorICAgICAgICAgIHByZXZl
bnRzIHRoZSBzdWJtaXNzaW9uIGlmIG5laXRoZXIgbm9WYWxpZGF0ZSBub3IgZm9ybU5vVmFsaWRh
dGUgaXMKKyAgICAgICAgICBzcGVjaWZpZWQsIGFuZCBmb2N1c2VzIG9uIHRoZSBmaXJzdCBpbnZh
bGlkIGNvbnRyb2wgb2Ygd2hpY2ggImludmFsaWQiCisgICAgICAgICAgZXZlbnQgaXMgbm90IGNh
bmNlbGVkLgorCisgICAgICAgIFRlc3RzOiBmYXN0L2Zvcm1zL2NoZWNrVmFsaWRpdHktY2FuY2Vs
Lmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1j
YW5jZWwuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0
aW9uLWZvcm1ub3ZhbGlkYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9ybXMvaW50ZXJh
Y3RpdmUtdmFsaWRhdGlvbi1ub3ZhbGlkYXRlLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvZm9y
bXMvaW50ZXJhY3RpdmUtdmFsaWRhdGlvbi1wcmV2ZW50ZWQuaHRtbAorICAgICAgICAgICAgICAg
ZmFzdC9mb3Jtcy9pbnRlcmFjdGl2ZS12YWxpZGF0aW9uLXJlbW92ZS1ub2RlLWluLWhhbmRsZXIu
aHRtbAorCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkpOgorICAg
ICAgICAgIElmIHRoZSBjb250cm9sIGlzIGludmFsaWQgYW5kIHRoZSAiaW52YWxpZCIgaXMgbm90
IGNhbmNlbGVkLAorICAgICAgICAgIHB1c2ggdGhlIGNvbnRyb2wgdG8gdGhlIHNwZWNpZmllZCB2
ZWN0b3IuCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1F
bGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkpOgorICAgICAgICAgVGhlIG1haW4gcGFydCBv
ZiB0aGUgaW50ZXJhY3RpdmUgdmFsaWRhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3Jt
RWxlbWVudDo6cHJlcGFyZVN1Ym1pdCk6CisgICAgICAgICBDYWxscyB2YWxpZGF0ZUludGVyYWN0
aXZlbHkoKS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y2hlY2tWYWxpZGl0
eSk6CisgICAgICAgICBVc2VzIGNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6Y29sbGVjdFVuaGFuZGxlZEludmFsaWRD
b250cm9scyk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKwogMjAxMC0wNC0w
OCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcApp
bmRleCA0YjUxNjY2Li5iY2RmNDBkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCkBAIC0zMjksMTQgKzMyOSwxNyBAQCBTdHJpbmcgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6dmFsaWRhdGlvbk1lc3NhZ2UoKQogICAgIHJldHVybiB2YWxpZGl0eSgpLT52YWxpZGF0aW9u
TWVzc2FnZSgpOwogfQogCi1ib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRp
dHkoKQorYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpjaGVja1ZhbGlkaXR5KFZlY3RvcjxS
ZWZQdHI8SFRNTEZvcm1Db250cm9sRWxlbWVudD4gPiogdW5oYW5kbGVkSW52YWxpZENvbnRyb2xz
KQogewotICAgIGlmICh3aWxsVmFsaWRhdGUoKSAmJiAhaXNWYWxpZEZvcm1Db250cm9sRWxlbWVu
dCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
aW52YWxpZEV2ZW50LCBmYWxzZSwgdHJ1ZSkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCF3aWxsVmFsaWRhdGUoKSB8fCBpc1ZhbGlk
Rm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIEFuIGV2
ZW50IGhhbmRsZXIgY2FuIGRlcmVmIHRoaXMgb2JqZWN0LgorICAgIFJlZlB0cjxIVE1MRm9ybUNv
bnRyb2xFbGVtZW50PiBwcm90ZWN0b3IodGhpcyk7CisgICAgUmVmUHRyPERvY3VtZW50PiBvcmln
aW5hbERvY3VtZW50KGRvY3VtZW50KCkpOworICAgIGJvb2wgbmVlZHNEZWZhdWx0QWN0aW9uID0g
ZGlzcGF0Y2hFdmVudChFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5pbnZhbGlkRXZlbnQsIGZh
bHNlLCB0cnVlKSk7CisgICAgaWYgKG5lZWRzRGVmYXVsdEFjdGlvbiAmJiB1bmhhbmRsZWRJbnZh
bGlkQ29udHJvbHMgJiYgaW5Eb2N1bWVudCgpICYmIG9yaWdpbmFsRG9jdW1lbnQgPT0gZG9jdW1l
bnQoKSkKKyAgICAgICAgdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzLT5hcHBlbmQodGhpcyk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmlzVmFs
aWRGb3JtQ29udHJvbEVsZW1lbnQoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgK
aW5kZXggZDFlZTAxMi4uMDA0NWZiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5oCkBAIC0xMDgsNyArMTA4LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBib29sIHdpbGxW
YWxpZGF0ZSgpIGNvbnN0OwogICAgIFN0cmluZyB2YWxpZGF0aW9uTWVzc2FnZSgpOwotICAgIGJv
b2wgY2hlY2tWYWxpZGl0eSgpOworICAgIGJvb2wgY2hlY2tWYWxpZGl0eShWZWN0b3I8UmVmUHRy
PEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+ID4qIHVuaGFuZGxlZEludmFsaWRDb250cm9scyA9IDAp
OwogICAgIC8vIFRoaXMgbXVzdCBiZSBjYWxsZWQgd2hlbiBhIHZhbGlkYXRpb24gY29uc3RyYWlu
dCBvciBjb250cm9sIHZhbHVlIGlzIGNoYW5nZWQuCiAgICAgdm9pZCBzZXROZWVkc1ZhbGlkaXR5
Q2hlY2soKTsKICAgICB2b2lkIHNldEN1c3RvbVZhbGlkaXR5KGNvbnN0IFN0cmluZyYpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCBiZGFjMjhhLi45YTA1OTA1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcApAQCAtMjcsNiArMjcsNyBAQAogCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgi
CiAjaW5jbHVkZSAiRE9NRm9ybURhdGEuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgpAQCAtMjE5LDYgKzIyMCw2NCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6aXNNYWlsdG9G
b3JtKCkgY29uc3QKICAgICByZXR1cm4gcHJvdG9jb2xJcyhtX3VybCwgIm1haWx0byIpOwogfQog
CitzdGF0aWMgaW5saW5lIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIHN1Ym1pdEVsZW1lbnRGcm9t
KGNvbnN0IEV2ZW50KiBldmVudCkKK3sKKyAgICBOb2RlKiB0YXJnZXROb2RlID0gZXZlbnQtPnRh
cmdldCgpLT50b05vZGUoKTsKKyAgICBpZiAoIXRhcmdldE5vZGUgfHwgIXRhcmdldE5vZGUtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgRWxlbWVudCogdGFyZ2V0RWxl
bWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPih0YXJnZXROb2RlKTsKKyAgICBpZiAoIXRhcmdl
dEVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kj4odGFyZ2V0RWxlbWVu
dCk7Cit9CisKK2Jvb2wgSFRNTEZvcm1FbGVtZW50Ojp2YWxpZGF0ZUludGVyYWN0aXZlbHkoRXZl
bnQqIGV2ZW50KQoreworICAgIEFTU0VSVChldmVudCk7CisgICAgaWYgKG5vVmFsaWRhdGUoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBzdWJt
aXRFbGVtZW50ID0gc3VibWl0RWxlbWVudEZyb20oZXZlbnQpOworICAgIGlmIChzdWJtaXRFbGVt
ZW50ICYmIHN1Ym1pdEVsZW1lbnQtPmZvcm1Ob1ZhbGlkYXRlKCkpCisgICAgICAgIHJldHVybiB0
cnVlOworCisgICAgVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+IHVuaGFu
ZGxlZEludmFsaWRDb250cm9sczsKKyAgICBjb2xsZWN0VW5oYW5kbGVkSW52YWxpZENvbnRyb2xz
KHVuaGFuZGxlZEludmFsaWRDb250cm9scyk7CisgICAgaWYgKHVuaGFuZGxlZEludmFsaWRDb250
cm9scy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIElmIHRoZSBmb3Jt
IGhhcyBpbnZhbGlkIGNvbnRyb2xzLCBhYm9ydCBzdWJtaXNzaW9uLgorCisgICAgUmVmUHRyPEhU
TUxGb3JtRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOworICAgIC8vIEZvY3VzIG9uIHRoZSBmaXJz
dCBmb2N1c2FibGUgY29udHJvbC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5oYW5k
bGVkSW52YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIHVuaGFuZGxlZCA9IHVuaGFuZGxlZEludmFsaWRDb250cm9sc1tpXS5nZXQoKTsK
KyAgICAgICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRsZWQtPmluRG9j
dW1lbnQoKSkgeworICAgICAgICAgICAgUmVmUHRyPERvY3VtZW50PiBvcmlnaW5hbERvY3VtZW50
KHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSk7CisgICAgICAgICAgICB1bmhhbmRsZWQtPnNjcm9sbElu
dG9WaWV3SWZOZWVkZWQoZmFsc2UpOworICAgICAgICAgICAgLy8gc2Nyb2xsSW50b1ZpZXdJZk5l
ZWRlZCgpIGRpc3BhdGNoZXMgZXZlbnRzLCBzbyB0aGUgc3RhdGUKKyAgICAgICAgICAgIC8vIG9m
ICd1bmhhbmRsZWQnIG1pZ2h0IGJlIGNoYW5nZWQgc28gaXQncyBubyBsb25nZXIgZm9jdXNhYmxl
IG9yCisgICAgICAgICAgICAvLyBtb3ZlZCB0byBhbm90aGVyIGRvY3VtZW50LgorICAgICAgICAg
ICAgaWYgKHVuaGFuZGxlZC0+aXNGb2N1c2FibGUoKSAmJiB1bmhhbmRsZWQtPmluRG9jdW1lbnQo
KSAmJiBvcmlnaW5hbERvY3VtZW50ID09IHVuaGFuZGxlZC0+ZG9jdW1lbnQoKSkgeworICAgICAg
ICAgICAgICAgIHVuaGFuZGxlZC0+Zm9jdXMoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBXYXJuIGFib3V0IGFsbCBvZiB1
bmZvY3VzYWJsZSBjb250cm9scy4KKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+
ZnJhbWUoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdW5oYW5kbGVkSW52
YWxpZENvbnRyb2xzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBIVE1MRm9ybUNvbnRyb2xF
bGVtZW50KiB1bmhhbmRsZWQgPSB1bmhhbmRsZWRJbnZhbGlkQ29udHJvbHNbaV0uZ2V0KCk7Cisg
ICAgICAgICAgICBpZiAodW5oYW5kbGVkLT5pc0ZvY3VzYWJsZSgpICYmIHVuaGFuZGxlZC0+aW5E
b2N1bWVudCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgU3RyaW5n
IG1lc3NhZ2UoIkFuIGludmFsaWQgZm9ybSBjb250cm9sIHdpdGggbmFtZT0nJW5hbWUnIGlzIG5v
dCBmb2N1c2FibGUuIik7CisgICAgICAgICAgICBtZXNzYWdlLnJlcGxhY2UoIiVuYW1lIiwgdW5o
YW5kbGVkLT5uYW1lKCkpOworICAgICAgICAgICAgZnJhbWUtPmRvbVdpbmRvdygpLT5jb25zb2xl
KCktPmFkZE1lc3NhZ2UoSFRNTE1lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1l
c3NhZ2VMZXZlbCwgbWVzc2FnZSwgMCwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAg
ICAgICB9CisgICAgfQorICAgIG1faW5zdWJtaXQgPSBmYWxzZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIGJvb2wgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlU3VibWl0KEV2ZW50KiBldmVudCkK
IHsKICAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwpAQCAtMjI4LDYgKzI4
NywxMCBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6cHJlcGFyZVN1Ym1pdChFdmVudCogZXZlbnQp
CiAgICAgbV9pbnN1Ym1pdCA9IHRydWU7CiAgICAgbV9kb2luZ3N1Ym1pdCA9IGZhbHNlOwogCisg
ICAgLy8gSW50ZXJhY3RpdmUgdmFsaWRhdGlvbiBtdXN0IGJlIGRvbmUgYmVmb3JlIGRpc3BhdGNo
aW5nIHRoZSBzdWJtaXQgZXZlbnQuCisgICAgaWYgKCF2YWxpZGF0ZUludGVyYWN0aXZlbHkoZXZl
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBpZiAoZGlzcGF0Y2hFdmVudChFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5zdWJtaXRFdmVudCwgdHJ1ZSwgdHJ1ZSkpICYmICFtX2Rv
aW5nc3VibWl0KQogICAgICAgICBtX2RvaW5nc3VibWl0ID0gdHJ1ZTsKIApAQCAtNTQxLDE2ICs2
MDQsMjQgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogSFRNTEZvcm1FbGVtZW50OjpkZWZhdWx0
QnV0dG9uKCkgY29uc3QKIAogYm9vbCBIVE1MRm9ybUVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKQog
ewotICAgIC8vIFRPRE86IENoZWNrIGZvciB1bmhhbmRsZWQgaW52YWxpZCBjb250cm9scywgc2Vl
ICMyNzQ1MiBmb3IgdGlwcy4KKyAgICBWZWN0b3I8UmVmUHRyPEhUTUxGb3JtQ29udHJvbEVsZW1l
bnQ+ID4gY29udHJvbHM7CisgICAgY29sbGVjdFVuaGFuZGxlZEludmFsaWRDb250cm9scyhjb250
cm9scyk7CisgICAgcmV0dXJuIGNvbnRyb2xzLmlzRW1wdHkoKTsKK30KIAotICAgIGJvb2wgaGFz
T25seVZhbGlkQ29udHJvbHMgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
b3JtRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVu
dCogY29udHJvbCA9IGZvcm1FbGVtZW50c1tpXTsKLSAgICAgICAgaWYgKCFjb250cm9sLT5jaGVj
a1ZhbGlkaXR5KCkpCi0gICAgICAgICAgICBoYXNPbmx5VmFsaWRDb250cm9scyA9IGZhbHNlOwor
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OmNvbGxlY3RVbmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVj
dG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVtZW50PiA+JiB1bmhhbmRsZWRJbnZhbGlkQ29u
dHJvbHMpCit7CisgICAgUmVmUHRyPEhUTUxGb3JtRWxlbWVudD4gcHJvdGVjdG9yKHRoaXMpOwor
ICAgIC8vIENvcHkgZm9ybUVsbWVudHMgYmVjYXVzZSBldmVudCBoYW5kbGVycyBjYWxsZWQgZnJv
bQorICAgIC8vIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmNoZWNrVmFsaWRpdHkoKSBtaWdodCBj
aGFuZ2UgZm9ybUVsZW1lbnRzLgorICAgIFZlY3RvcjxSZWZQdHI8SFRNTEZvcm1Db250cm9sRWxl
bWVudD4gPiBlbGVtZW50czsKKyAgICBlbGVtZW50cy5yZXNlcnZlQ2FwYWNpdHkoZm9ybUVsZW1l
bnRzLnNpemUoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm1FbGVtZW50cy5z
aXplKCk7ICsraSkKKyAgICAgICAgZWxlbWVudHMuYXBwZW5kKGZvcm1FbGVtZW50c1tpXSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnRzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChlbGVtZW50c1tpXS0+Zm9ybSgpID09IHRoaXMpCisgICAgICAgICAgICBlbGVtZW50
c1tpXS0+Y2hlY2tWYWxpZGl0eSgmdW5oYW5kbGVkSW52YWxpZENvbnRyb2xzKTsKICAgICB9Ci0K
LSAgICByZXR1cm4gaGFzT25seVZhbGlkQ29udHJvbHM7CiB9CiAKIFBhc3NSZWZQdHI8SFRNTEZv
cm1Db250cm9sRWxlbWVudD4gSFRNTEZvcm1FbGVtZW50OjplbGVtZW50Rm9yQWxpYXMoY29uc3Qg
QXRvbWljU3RyaW5nJiBhbGlhcykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVs
ZW1lbnQuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAppbmRleCA0NGJmNjI4Li45
MjNjNzM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKKysrIGIv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCkBAIC0xMzcsNiArMTM3LDExIEBAIHByaXZh
dGU6CiAgICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZygpIGNvbnN0OwogICAgIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGNyZWF0ZUZvcm1EYXRhKCk7CiAgICAgdW5zaWduZWQgZm9ybUVsZW1lbnRJ
bmRleChIVE1MRm9ybUNvbnRyb2xFbGVtZW50Kik7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBzdWJtaXNzaW9uIHNob3VsZCBiZSBwcm9jZWVkZWQuCisgICAgYm9vbCB2YWxpZGF0ZUludGVy
YWN0aXZlbHkoRXZlbnQqKTsKKyAgICAvLyBWYWxpZGF0ZXMgZWFjaCBvZiB0aGUgY29udHJvbHMs
IGFuZCBzdG9yZXMgY29udHJvbHMgb2Ygd2hpY2ggJ2ludmFsaWQnCisgICAgLy8gZXZlbnQgd2Fz
IG5vdCBjYW5jZWxlZCB0byB0aGUgc3BlY2lmaWVkIHZlY3Rvci4KKyAgICB2b2lkIGNvbGxlY3RV
bmhhbmRsZWRJbnZhbGlkQ29udHJvbHMoVmVjdG9yPFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50PiA+Jik7CiAKICAgICBmcmllbmQgY2xhc3MgSFRNTEZvcm1Db2xsZWN0aW9uOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>