<?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>125720</bug_id>
          
          <creation_ts>2013-12-13 18:38:53 -0800</creation_ts>
          <short_desc>AX: When navigating the elements of a scrollable element with VoiceOver, the scrollTop() position of the element does not permanently change</short_desc>
          <delta_ts>2015-08-30 23:28:46 -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>Accessibility</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.9</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jesse Bunch">bunch</reporter>
          <assigned_to name="chris fleizach">cfleizach</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>bunch</cc>
    
    <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jelbourn</cc>
    
    <cc>mario</cc>
    
    <cc>mikereiser08</cc>
    
    <cc>redux</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959730</commentid>
    <comment_count>0</comment_count>
      <attachid>219218</attachid>
    <who name="Jesse Bunch">bunch</who>
    <bug_when>2013-12-13 18:38:53 -0800</bug_when>
    <thetext>Created attachment 219218
Test case

* SUMMARY
When navigating elements inside a scrolling div (using overflow: auto), WebKit is firing multiple scroll notifications and erroneously resetting the scrollTop value of the containing div with each navigation event.

* STEPS TO REPRODUCE
1. Open the attached test case
2. Turn on VoiceOver and begin navigating the elements inside the scrolling container.

* RESULTS
The container jumps to the newly focused element, but then quickly scrolls back up to it&apos;s original position. The focused item should be scrolled to when focused. 

* NOTES
After further investigation, it appears that a second scroll event is also being fired. Check the console in the test case for that evidence.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959759</commentid>
    <comment_count>1</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2013-12-13 20:49:07 -0800</bug_when>
    <thetext>&lt;rdar://problem/15662667&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1109928</commentid>
    <comment_count>2</comment_count>
    <who name="Jeremy Elbourn">jelbourn</who>
    <bug_when>2015-07-16 11:34:44 -0700</bug_when>
    <thetext>Here is an example where this behavior with VoiceOver completely breaks the date-picker component in Angular Material:

https://dl.dropboxusercontent.com/u/18203969/oneoff/v4/datepicker.html

Summary of what&apos;s going on:
The pop-up calendar has a table (with role=grid) inside of a very large scrollable container. As the container scrolls, tbody elements in the table are added and removed so that only 6 or 7 are rendered at a time. 

When the calendar is opened, the container is scrolled to about half its scrollHeight and sets focus to the gridcell for the selected date. When this focus occurs with VoiceOver active, however, the container jumps to scrollTop = 0, which then both shows the wrong date and destroys the gridcell that had focus, leaving the user in quite the unhappy state. 

This bug only seems to occur in Safari with VoiceOver; Chrome with VoiceOver works as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116859</commentid>
    <comment_count>3</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2015-08-11 21:36:20 -0700</bug_when>
    <thetext>Related to bug 132310 and bug 147700.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119102</commentid>
    <comment_count>4</comment_count>
      <attachid>259431</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-19 17:11:26 -0700</bug_when>
    <thetext>Created attachment 259431
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119103</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-19 17:13:31 -0700</bug_when>
    <thetext>Attachment 259431 did not pass style-queue:


ERROR: Source/WebCore/accessibility/AccessibilityObject.cpp:2406:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119109</commentid>
    <comment_count>6</comment_count>
      <attachid>259433</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-19 17:20:40 -0700</bug_when>
    <thetext>Created attachment 259433
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119148</commentid>
    <comment_count>7</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2015-08-19 18:37:30 -0700</bug_when>
    <thetext>Thanks for working on this. Will you please check to see if your patch also resolves bug 132310?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119249</commentid>
    <comment_count>8</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-20 08:45:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Thanks for working on this. Will you please check to see if your patch also
&gt; resolves bug 132310?

Yes it does!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119250</commentid>
    <comment_count>9</comment_count>
      <attachid>259468</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-20 08:49:36 -0700</bug_when>
    <thetext>Created attachment 259468
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119494</commentid>
    <comment_count>10</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2015-08-20 17:41:30 -0700</bug_when>
    <thetext>*** Bug 132310 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1119495</commentid>
    <comment_count>11</comment_count>
    <who name="James Craig">jcraig</who>
    <bug_when>2015-08-20 17:42:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Thanks for working on this. Will you please check to see if your patch also
&gt; &gt; resolves bug 132310?
&gt; 
&gt; Yes it does!

Great. I duped and closed that one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1120855</commentid>
    <comment_count>12</comment_count>
      <attachid>259468</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2015-08-25 22:45:32 -0700</bug_when>
    <thetext>Comment on attachment 259468
patch

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

This patch looks sane to me. Feel free to ask a viewport/scrolling expert if you want a more through review of the scrolling code.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2392
&gt; +        if (subfocusMin - currentScrollOffset &gt;= viewportMin
&gt; +            &amp;&amp; subfocusMax - currentScrollOffset &lt;= viewportMax)

This is fine as-is. I would write this on one line.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2410
&gt; +    

Please do not add this whitespace.

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2419
&gt; +    

Ditto.

&gt; Tools/DumpRenderTree/AccessibilityUIElement.cpp:695
&gt; +    unsigned x = 0, y = 0, width = 0, height = 0;

Although not written in the WebKit Code Style Guidelines, we tend to prefer one variable definition per line.

&gt; Tools/DumpRenderTree/AccessibilityUIElement.cpp:702
&gt; +    

Please remove the whitespace on this line.

&gt; Tools/DumpRenderTree/AccessibilityUIElement.cpp:709
&gt; +    unsigned x = 0, y = 0;

Although not written in the WebKit Code Style Guidelines, we tend to prefer one variable definition per line.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:27
&gt; +&lt;!-- The contents of this iframe, more nicely formatted:
&gt; + &lt;body&gt;
&gt; +   &lt;style&gt;
&gt; +     button {
&gt; +       border: 0;
&gt; +     }
&gt; +   &lt;/style&gt;
&gt; +   &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
&gt; +   &lt;div id=&apos;container&apos; style=&apos;height: 100px; overflow: scroll&apos;&gt;
&gt; +     &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
&gt; +     &lt;button id=&apos;target&apos;&gt;Target&lt;/button&gt;
&gt; +     &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
&gt; +   &lt;/div&gt;
&gt; +   &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
&gt; +  &lt;/body&gt;
&gt; + --&gt;
&gt; +&lt;iframe id=&quot;frame&quot; src=&quot;data:text/html,&lt;body&gt;&lt;style&gt;button { border: 0; }&lt;/style&gt;&lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;&lt;div id=&apos;container&apos; style=&apos;height: 100px; overflow: scroll&apos;&gt;&lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;&lt;button id=&apos;target&apos;&gt;Target&lt;/button&gt;&lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;&lt;/div&gt;&lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;&lt;/body&gt;&quot;&gt;&lt;/iframe&gt;

I would remove the comment and write this as:

&lt;iframe id=&quot;frame&quot; srcdoc=&quot;&lt;body&gt;
    &lt;style&gt;button { border: 0; }&lt;/style&gt;
    &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
    &lt;div id=&apos;container&apos; style=&apos;height: 100px; overflow: scroll&apos;&gt;
        &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
        &lt;button id=&apos;target&apos;&gt;Target&lt;/button&gt;
        &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
    &lt;/div&gt;
    &lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;
&lt;/body&gt;&quot;&gt;&lt;/iframe&gt;

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:37
&gt; +        testRunner.waitUntilDone();

The indentation of this line differs from the indentation used on other lines with the same nesting level (e.g. line 42).

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:51
&gt; +    if (window.accessibilityController) {
&gt; +        target.focus();
&gt; +        var targetAccessibleObject = accessibilityController.focusedElement;
&gt; +    }

This is OK as-is. For your consideration, I suggest explicitly declaring targetAccessibleObject outside of this if-statement body, such that this code reads:

var targetAccessibleObject;
if (window.accessibilityController) {
    target.focus();
    targetAccessibleObject = accessibilityController.focusedElement
}

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:57
&gt; +    shouldBe(&quot;window.pageYOffset&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to write this line as:

shouldBeZero(&quot;window.pageYOffset&quot;);

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:58
&gt; +    shouldBe(&quot;frameWindow.pageYOffset&quot;, &quot;0&quot;);

Similarly, we can make use of shouldBeZero() on this line.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:59
&gt; +    shouldBe(&quot;container.scrollTop&quot;, &quot;0&quot;);

Ditto.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:64
&gt; +    shouldBe(&quot;target.getBoundingClientRect().top&quot;, &quot;0&quot;);

Ditto.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:75
&gt; +window.addEventListener(&apos;load&apos;, function() {

Nit: &apos; (single quotes) =&gt; &quot; (double quotes)

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:76
&gt; +    setTimeout(runTest, 10);

Is this timeout necessary? How did you come to the decision to wait 10 milliseconds?

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:11
&gt; +&lt;iframe id=&quot;frame&quot; src=&quot;data:text/html,&lt;body&gt;&lt;style&gt;button { border: 0; }&lt;/style&gt;&lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;&lt;button id=&apos;target&apos;&gt;Target&lt;/button&gt;&lt;div style=&apos;border: 1px solid #000; height: 5000px;&apos;&gt;5000-pixel box&lt;/div&gt;&lt;/body&gt;&quot;&gt;&lt;/iframe&gt;

We can take a similar approach as in LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html and write this using the srcdoc attribute and formatting the markup to make it more readable.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:21
&gt; +        testRunner.waitUntilDone();

The indentation of this line differs from the indentation used on other lines with the same nesting level (e.g. line 26).

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:34
&gt; +    if (window.accessibilityController) {
&gt; +        target.focus();
&gt; +        var targetAccessibleObject = accessibilityController.focusedElement;
&gt; +    }

This is OK as-is. For your consideration, I suggest explicitly declaring targetAccessibleObject outside of this if-statement body, such that this code reads:

var targetAccessibleObject;
if (window.accessibilityController) {
    target.focus();
    targetAccessibleObject = accessibilityController.focusedElement
}

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:39
&gt; +    shouldBe(&quot;window.pageYOffset&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to write this line as:

shouldBeZero(&quot;window.pageYOffset&quot;);

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:40
&gt; +    shouldBe(&quot;frameWindow.pageYOffset&quot;, &quot;0&quot;);

Similarly, we can make use of shouldBeZero() on this line.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:45
&gt; +    shouldBe(&quot;target.getBoundingClientRect().top&quot;, &quot;0&quot;);

Ditto.

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:56
&gt; +window.addEventListener(&apos;load&apos;, function() {

Nit: &apos; (single quotes) =&gt; &quot; (double quotes)

&gt; LayoutTests/accessibility/scroll-to-global-point-iframe.html:57
&gt; +    setTimeout(runTest, 10);

Is this timeout necessary? How did you come to the decision to wait 10 milliseconds?

&gt; LayoutTests/accessibility/scroll-to-global-point-main-window.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-global-point-nested.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-global-point-nested.html:40
&gt; +        var targetAccessibleObject = accessibilityController.focusedElement;

For your consideration, I suggest explicitly declaring this variable outside of the if-statement body.

&gt; LayoutTests/accessibility/scroll-to-global-point-nested.html:49
&gt; +    shouldBe(&quot;window.pageYOffset&quot;, &quot;0&quot;);
&gt; +    shouldBe(&quot;outerContainer.scrollTop&quot;, &quot;0&quot;);
&gt; +    shouldBe(&quot;innerContainer.scrollTop&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to simplify these lines.

&gt; LayoutTests/accessibility/scroll-to-global-point-nested.html:56
&gt; +    shouldBe(&quot;target.getBoundingClientRect().top&quot;, &quot;0&quot;);

Ditto.

&gt; LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html:30
&gt; +    if (window.accessibilityController) {
&gt; +        lowerTarget.focus();
&gt; +        var lowerTargetAccessibleObject = accessibilityController.focusedElement;
&gt; +        upperTarget.focus();
&gt; +        var upperTargetAccessibleObject = accessibilityController.focusedElement;
&gt; +    }

For your consideration, I suggest declaring lowerTargetAccessibleObject and upperTargetAccessibleObject outside of the if-statement body, such that it reads:

var lowerTargetAccessibleObject;
var upperTargetAccessibleObject;
if (window.accessibilityController) {
    lowerTarget.focus();
    lowerTargetAccessibleObject = accessibilityController.focusedElement;
    upperTarget.focus();
    upperTargetAccessibleObject = accessibilityController.focusedElement;
}

&gt; LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html:34
&gt; +    shouldBe(&quot;container.scrollTop&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to simplify these lines.

&gt; LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html:52
&gt; +    shouldBe(&quot;container.scrollTop &gt;= minYOffset&quot;, &quot;true&quot;);
&gt; +    shouldBe(&quot;container.scrollTop &lt;= maxYOffset&quot;, &quot;true&quot;);

I would write these lines using the convenience function shouldBeTrue():

shouldBeTrue(&quot;container.scrollTop &gt;= minYOffset&quot;);
shouldBeTrue(&quot;container.scrollTop &lt;= maxYOffset&quot;);

&gt; LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html:61
&gt; +    shouldBe(&quot;container.scrollTop &gt;= minYOffset&quot;, &quot;true&quot;);
&gt; +    shouldBe(&quot;container.scrollTop &lt;= maxYOffset&quot;, &quot;true&quot;);

Similarly, I would write these lines using the convenience function shouldBeTrue():

shouldBeTrue(&quot;container.scrollTop &gt;= minYOffset&quot;);
shouldBeTrue(&quot;container.scrollTop &lt;= maxYOffset&quot;);

&gt; LayoutTests/accessibility/scroll-to-make-visible-iframe.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-make-visible-iframe.html:34
&gt; +    if (window.accessibilityController) {
&gt; +        lowerTarget.focus();
&gt; +        var lowerTargetAccessibleObject = accessibilityController.focusedElement;
&gt; +        upperTarget.focus();
&gt; +        var upperTargetAccessibleObject = accessibilityController.focusedElement;
&gt; +    }

See my remark about the same code in file LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html.

&gt; LayoutTests/accessibility/scroll-to-make-visible-iframe.html:38
&gt; +    shouldBe(&quot;frameWindow.pageYOffset&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to simplify these lines.

&gt; LayoutTests/accessibility/scroll-to-make-visible-iframe.html:46
&gt; +    shouldBe(&quot;frameWindow.pageYOffset &gt;= minYOffset&quot;, &quot;true&quot;);
&gt; +    shouldBe(&quot;frameWindow.pageYOffset &lt;= maxYOffset&quot;, &quot;true&quot;);

I would write these lines using the convenience function shouldBeTrue():

shouldBeTrue(&quot;frameWindow.pageYOffset &gt;= minYOffset&quot;);
shouldBeTrue(&quot;frameWindow.pageYOffset &lt;= maxYOffset&quot;);

&gt; LayoutTests/accessibility/scroll-to-make-visible-iframe.html:54
&gt; +    shouldBe(&quot;frameWindow.pageYOffset &gt;= minYOffset&quot;, &quot;true&quot;);
&gt; +    shouldBe(&quot;frameWindow.pageYOffset &lt;= maxYOffset&quot;, &quot;true&quot;);

Similarly, I would write this using the convenience function shouldBeTrue():

shouldBeTrue(&quot;frameWindow.pageYOffset &gt;= minYOffset&quot;);
shouldBeTrue(&quot;frameWindow.pageYOffset &lt;= maxYOffset&quot;);

&gt; LayoutTests/accessibility/scroll-to-make-visible-iframe.html:61
&gt; +window.addEventListener(&apos;load&apos;, function() {
&gt; +    setTimeout(runTest, 10);
&gt; +}, false);

Is this timeout necessary? How did you come to the decision to wait 10 milliseconds?

&gt; LayoutTests/accessibility/scroll-to-make-visible-nested-2.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-make-visible-nested-2.html:35
&gt; +    if (window.accessibilityController) {
&gt; +        target1.focus();
&gt; +        var target1AccessibleObject = accessibilityController.focusedElement;
&gt; +        target2.focus();
&gt; +        var target2AccessibleObject = accessibilityController.focusedElement;
&gt; +        target3.focus();
&gt; +        var target3AccessibleObject = accessibilityController.focusedElement;
&gt; +    }

This is OK as-is. We should declare the variables target{1, 2, 3}AccessibleObject outside of the if-statement body. I made a similar remark in file LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html.

&gt; LayoutTests/accessibility/scroll-to-make-visible-nested-2.html:41
&gt; +    shouldBe(&quot;window.pageYOffset&quot;, &quot;0&quot;);
&gt; +    shouldBe(&quot;container.scrollTop&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to simplify these lines.

&gt; LayoutTests/accessibility/scroll-to-make-visible-nested.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-make-visible-nested.html:40
&gt; +    shouldBe(&quot;window.pageYOffset&quot;, &quot;0&quot;);
&gt; +    shouldBe(&quot;outerContainer.scrollTop&quot;, &quot;0&quot;);
&gt; +    shouldBe(&quot;innerContainer.scrollTop&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to simplify these lines.

&gt; LayoutTests/accessibility/scroll-to-make-visible-with-subfocus.html:1
&gt; +&lt;html&gt;

Unless you intended to test in quirks mode, I suggest adding &lt;!DOCTYPE html&gt; to the top of this file.

&gt; LayoutTests/accessibility/scroll-to-make-visible-with-subfocus.html:22
&gt; +        var targetAccessibleObject = accessibilityController.focusedElement;

This is OK as-is. We should declare the variables targetAccessibleObject outside of the if-statement body. I made a similar remark in file LayoutTests/accessibility/scroll-to-make-visible-div-overflow.html.

&gt; LayoutTests/accessibility/scroll-to-make-visible-with-subfocus.html:27
&gt; +    shouldBe(&quot;window.pageYOffset&quot;, &quot;0&quot;);

This is OK as-is. We can make use of the convenience function shouldBeZero() to simplify these lines.

&gt; LayoutTests/accessibility/scroll-to-make-visible-with-subfocus.html:35
&gt; +    shouldBe(&quot;window.pageYOffset &gt;= minYOffset&quot;, &quot;true&quot;);
&gt; +    shouldBe(&quot;window.pageYOffset &lt;= maxYOffset&quot;, &quot;true&quot;);

This is OK as-is. We can make use of the convenience function shouldBeTrue() to simplify these lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121316</commentid>
    <comment_count>13</comment_count>
      <attachid>259468</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-27 09:23:46 -0700</bug_when>
    <thetext>Comment on attachment 259468
patch

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

thanks for the thorough review. i will make all the changes before committing.

&gt;&gt; LayoutTests/accessibility/scroll-to-global-point-iframe-nested.html:76
&gt;&gt; +    setTimeout(runTest, 10);
&gt; 
&gt; Is this timeout necessary? How did you come to the decision to wait 10 milliseconds?

don&apos;t know. it was a blink test. i&apos;ll experiment to see if it&apos;s necessary</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1121983</commentid>
    <comment_count>14</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-29 00:44:34 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/189149</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122129</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-08-30 22:35:55 -0700</bug_when>
    <thetext>A 10 ms timeout is never right in a test. When tests run, there is a lot of CPU load, so any task can be preempted for longer than that.

Separately from that, all the new tests fail on Windows, could you please fix that?

accessibility/scroll-to-global-point-iframe-nested.html
accessibility/scroll-to-global-point-iframe.html
accessibility/scroll-to-global-point-main-window.html
accessibility/scroll-to-global-point-nested.html
accessibility/scroll-to-make-visible-div-overflow.html
accessibility/scroll-to-make-visible-iframe.html
accessibility/scroll-to-make-visible-nested-2.html
accessibility/scroll-to-make-visible-nested.html
accessibility/scroll-to-make-visible-with-subfocus.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122135</commentid>
    <comment_count>16</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-30 23:17:45 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; A 10 ms timeout is never right in a test. When tests run, there is a lot of
&gt; CPU load, so any task can be preempted for longer than that.
&gt; 

I changed these all to setTimeout=0 and they worked fine. I copied them from Blink so I won&apos;t take credit for why they were originally set to 10

&gt; Separately from that, all the new tests fail on Windows, could you please
&gt; fix that?
&gt; 
&gt; accessibility/scroll-to-global-point-iframe-nested.html
&gt; accessibility/scroll-to-global-point-iframe.html
&gt; accessibility/scroll-to-global-point-main-window.html
&gt; accessibility/scroll-to-global-point-nested.html
&gt; accessibility/scroll-to-make-visible-div-overflow.html
&gt; accessibility/scroll-to-make-visible-iframe.html
&gt; accessibility/scroll-to-make-visible-nested-2.html
&gt; accessibility/scroll-to-make-visible-nested.html
&gt; accessibility/scroll-to-make-visible-with-subfocus.html

likely they all need to be skipped because the methods are not implemented. will do so</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122137</commentid>
    <comment_count>17</comment_count>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2015-08-30 23:28:46 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/189163</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>219218</attachid>
            <date>2013-12-13 18:38:53 -0800</date>
            <delta_ts>2013-12-13 18:38:53 -0800</delta_ts>
            <desc>Test case</desc>
            <filename>testcase - vo scroll issue.zip</filename>
            <type>application/zip</type>
            <size>4522</size>
            <attacher name="Jesse Bunch">bunch</attacher>
            
              <data encoding="base64">UEsDBAoAAAAAAFmTjUMAAAAAAAAAAAAAAAAbABAAdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUv
VVgMAFLEq1LpwatS9QEUAFBLAwQUAAgACAAleY1DAAAAAAAAAAAAAAAAJAAQAHRlc3RjYXNlIC0g
dm8gc2Nyb2xsIGlzc3VlLy5EU19TdG9yZVVYDABOxKtSlpOrUvUBFADtmDsOwjAQRGeNC0s0Lind
cABuYEXJCbgABVeg99Eh2hGyFFJQJYJ5kvVWin9pHE8A2PC4X4AMIMGNMz6S2BaErjbOIYQQQoh9
Y6503HYbQogdMp8Pha50cxufBzp2YzJd6Eo3t7FfoCOd6EwXutLNzUPLGD6MKxsTijGFWKHrV68s
xN9wcOX5+z9hNf8LIX4Yi+N1HPAOBMsOr3br6ob1S0Dwn4WnbmyhK93cuggIsRVPUEsHCGoAiG2y
AAAABBgAAFBLAwQKAAAAAAC6lI1DAAAAAAAAAAAAAAAACQAQAF9fTUFDT1NYL1VYDACAxKtSgMSr
UvUBFABQSwMECgAAAAAAupSNQwAAAAAAAAAAAAAAACQAEABfX01BQ09TWC90ZXN0Y2FzZSAtIHZv
IHNjcm9sbCBpc3N1ZS9VWAwAgMSrUoDEq1L1ARQAUEsDBBQACAAIACV5jUMAAAAAAAAAAAAAAAAv
ABAAX19NQUNPU1gvdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUvLl8uRFNfU3RvcmVVWAwATsSr
UpaTq1L1ARQAY2AVY2dgYmDwTUxW8A9WiFCAApAYAycQGwGxGxCD+BVAzABXIcCAAziGhARBmRUw
XegAAFBLBwj0Gde8NAAAAHgAAABQSwMECgAAAAAAFpONQwAAAAAAAAAAAAAAAB8AEAB0ZXN0Y2Fz
ZSAtIHZvIHNjcm9sbCBpc3N1ZS9jc3MvVVgMAFLEq1JrwatS9QEUAFBLAwQUAAgACAAWk41DAAAA
AAAAAAAAAAAAKAAQAHRlc3RjYXNlIC0gdm8gc2Nyb2xsIGlzc3VlL2Nzcy9zdHlsZS5jc3NVWAwA
TsSrUmvBq1L1ARQAVczBCoMwEIThu08x4NmighaSpwntahZiVtKtFsR3N3ooePyH4StZaapeEtVx
pIQNs3xYWaJBouCUF7JY+a3eoK/r+WfhiUevBm13pSyUhiCrgfuqWOzF40QzlVeXf4EG/Rvt3Wie
3Zl7cQBQSwcIHntXJGsAAACJAAAAUEsDBAoAAAAAALqUjUMAAAAAAAAAAAAAAAAoABAAX19NQUNP
U1gvdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUvY3NzL1VYDACAxKtSgMSrUvUBFABQSwMEFAAI
AAgAFpONQwAAAAAAAAAAAAAAADMAEABfX01BQ09TWC90ZXN0Y2FzZSAtIHZvIHNjcm9sbCBpc3N1
ZS9jc3MvLl9zdHlsZS5jc3NVWAwATsSrUmvBq1L1ARQAY2AVY2dgYmDwTUxW8A9WiFCAApAYAycQ
GwHxIiAG8a8wEAUcQ0KCoEyQjhlAbIOmhBEhLpqcn6uXWFCQk6pXWJpYlJhXkpmXylCob2BgYGRt
apSYZGmUbGIdnJiWWJRpbWRqbGFqbOqka25iYaBr4mTpouvkbOisa+ZqaGJq4GJpamluzAAAUEsH
CJc2ujaHAAAA1AAAAFBLAwQUAAgACABZk41DAAAAAAAAAAAAAAAAJQAQAHRlc3RjYXNlIC0gdm8g
c2Nyb2xsIGlzc3VlL2luZGV4Lmh0bWxVWAwAgMSrUunBq1L1ARQAZZAxT8MwEIV3fsXhpVNzK0J2
llIkpiIRkBhd+9o4OE7wXVDz73GTDkhM73Tvu6dn6/unw675fN1DK32s7/QqRcn6ogC6J7HgWpuZ
xKj35nn7oFZHgkSqPw7w5vIQY0hneGGeCBpigZ1l0rgyV7wcFOQLMkWjWOZI3BKJgjbTySjHjMu2
KpOCnnywhXOZKCmQeSSjhC6Ci43XjngrqY+Dn9dKPvxA8EYFoX7rhiQ2JMqq1licFSmRYRTg7Mym
FRkfEd3gaaRUhQEtl2cyxnBkPE0xjvZM2H1PlOeq400JWu//ZamOMSRPl4Kpv5jGW73Sd/ncX1BL
BwgFozX19AAAAHQBAABQSwMEFAAIAAgAWZONQwAAAAAAAAAAAAAAADAAEABfX01BQ09TWC90ZXN0
Y2FzZSAtIHZvIHNjcm9sbCBpc3N1ZS8uX2luZGV4Lmh0bWxVWAwAgMSrUunBq1L1ARQAY2AVY2dg
YmDwTUxW8A9WiFCAApAYAycQGwHxIiAG8a8wEAUcQ0KCoEyQjhlAbIOmhBEhLpqcn6uXWFCQk6pX
WJpYlJhXkpmXylCob2BgYmRtapSYZGmUbGIdnJiWWJRpbWRqbGFqbOqka25iYaBr4mTpouvkbOis
a+ZqaGJq4GJpamluzAAAUEsHCMt57kCHAAAA1AAAAFBLAwQKAAAAAADsk41DAAAAAAAAAAAAAAAA
HgAQAHRlc3RjYXNlIC0gdm8gc2Nyb2xsIGlzc3VlL2pzL1VYDABSxKtS+8KrUvUBFABQSwMEFAAI
AAgA7JONQwAAAAAAAAAAAAAAACYAEAB0ZXN0Y2FzZSAtIHZvIHNjcm9sbCBpc3N1ZS9qcy9pbmRl
eC5qc1VYDABOxKtS+8KrUvUBFABVUbFu2zAQ3fkVV9aqaCiW7CBBgDjqUnTI0A5txiy0dJYI0KRA
nWwDhf+9R8l24onHd+8e3zvudQBDuPtpcQclpClkIn2pzR4qq/u+lLEpv48wwOfG1ldDvyAdGiQJ
wVss5WYg8k4C6Y1xNR5LuZSgg9ELqzdoJzVIEjfskuSqyrpm10AfqlK2RN1zUXRWV9h6W+eGitXT
w3F1//iN8Ejla9TNLhLQomlaKiX3JRxMTS3XTw8fjgu2PF3O5VqIPYeeRSs/vCNtHAaOPlPp14gt
qguYztcjlTxp+8qtnmlLnt8OriLjHei6/uUD/vGHXs3hH4AA2Pqg4pQZyXy8wGoZiyxjiohxr++f
tz5Tl0secIyuivfkPWaMR9HcffIwZ1dR5CqQ665DV795dZvpzPuYzLKInMRJiFtm7p1K+4r/0KZ3
cEmncPLL++j5d3PrG5X+HVmAe3QEWxOw/gK/8QDTND/WPQNvmyNRa/p5PuFvvlOT74A0BAcUBlyL
E0PiZodr8R9QSwcIU+lQ0YMBAACRAgAAUEsDBAoAAAAAALqUjUMAAAAAAAAAAAAAAAAnABAAX19N
QUNPU1gvdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUvanMvVVgMAIDEq1KAxKtS9QEUAFBLAwQU
AAgACADsk41DAAAAAAAAAAAAAAAAMQAQAF9fTUFDT1NYL3Rlc3RjYXNlIC0gdm8gc2Nyb2xsIGlz
c3VlL2pzLy5faW5kZXguanNVWAwATsSrUvvCq1L1ARQAY2AVY2dgYmDwTUxW8A9WiFCAApAYAycQ
GwHxIiAG8a8wEAUcQ0KCoEyQjhlAbIOmhBEhLpqcn6uXWFCQk6pXWJpYlJhXkpmXylCob2BgYmRt
apSYZGmUbGIdnJiWWJRpbWRqbGFqbOqka25iYaBr4mTpouvkbOisa+ZqaGJq4GJpamluzAAAUEsH
CMt57kCHAAAA1AAAAFBLAwQUAAgACABZk41DAAAAAAAAAAAAAAAAJQAQAF9fTUFDT1NYLy5fdGVz
dGNhc2UgLSB2byBzY3JvbGwgaXNzdWVVWAwAUsSrUunBq1L1ARQAY2AVY2dgYmDwTUxW8A9WiFCA
ApAYAycQGwHxIiAG8a8wEAUcQ0KCoEyQjhlAbIOmhBEhLpqcn6uXWFCQk6pXWJpYlJhXkpmXylCo
b2BgYmRtAAXWwYlpiUWZ1kamxhamxqZOuuYmFga6Jk6WLrpOzobOumauhiamBi6WppbmxgwAUEsH
CI2umG+BAAAA1AAAAFBLAQIVAwoAAAAAAFmTjUMAAAAAAAAAAAAAAAAbAAwAAAAAAAAAAEDAQQAA
AAB0ZXN0Y2FzZSAtIHZvIHNjcm9sbCBpc3N1ZS9VWAgAUsSrUunBq1JQSwECFQMUAAgACAAleY1D
agCIbbIAAAAEGAAAJAAMAAAAAAAAAABApIFJAAAAdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUv
LkRTX1N0b3JlVVgIAE7Eq1KWk6tSUEsBAhUDCgAAAAAAupSNQwAAAAAAAAAAAAAAAAkADAAAAAAA
AAAAQP1BXQEAAF9fTUFDT1NYL1VYCACAxKtSgMSrUlBLAQIVAwoAAAAAALqUjUMAAAAAAAAAAAAA
AAAkAAwAAAAAAAAAAED9QZQBAABfX01BQ09TWC90ZXN0Y2FzZSAtIHZvIHNjcm9sbCBpc3N1ZS9V
WAgAgMSrUoDEq1JQSwECFQMUAAgACAAleY1D9BnXvDQAAAB4AAAALwAMAAAAAAAAAABApIHmAQAA
X19NQUNPU1gvdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUvLl8uRFNfU3RvcmVVWAgATsSrUpaT
q1JQSwECFQMKAAAAAAAWk41DAAAAAAAAAAAAAAAAHwAMAAAAAAAAAABA7UGHAgAAdGVzdGNhc2Ug
LSB2byBzY3JvbGwgaXNzdWUvY3NzL1VYCABSxKtSa8GrUlBLAQIVAxQACAAIABaTjUMee1ckawAA
AIkAAAAoAAwAAAAAAAAAAECkgdQCAAB0ZXN0Y2FzZSAtIHZvIHNjcm9sbCBpc3N1ZS9jc3Mvc3R5
bGUuY3NzVVgIAE7Eq1JrwatSUEsBAhUDCgAAAAAAupSNQwAAAAAAAAAAAAAAACgADAAAAAAAAAAA
QP1BpQMAAF9fTUFDT1NYL3Rlc3RjYXNlIC0gdm8gc2Nyb2xsIGlzc3VlL2Nzcy9VWAgAgMSrUoDE
q1JQSwECFQMUAAgACAAWk41Dlza6NocAAADUAAAAMwAMAAAAAAAAAABApIH7AwAAX19NQUNPU1gv
dGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUvY3NzLy5fc3R5bGUuY3NzVVgIAE7Eq1JrwatSUEsB
AhUDFAAIAAgAWZONQwWjNfX0AAAAdAEAACUADAAAAAAAAAAAQKSB8wQAAHRlc3RjYXNlIC0gdm8g
c2Nyb2xsIGlzc3VlL2luZGV4Lmh0bWxVWAgAgMSrUunBq1JQSwECFQMUAAgACABZk41Dy3nuQIcA
AADUAAAAMAAMAAAAAAAAAABApIFKBgAAX19NQUNPU1gvdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNz
dWUvLl9pbmRleC5odG1sVVgIAIDEq1LpwatSUEsBAhUDCgAAAAAA7JONQwAAAAAAAAAAAAAAAB4A
DAAAAAAAAAAAQO1BPwcAAHRlc3RjYXNlIC0gdm8gc2Nyb2xsIGlzc3VlL2pzL1VYCABSxKtS+8Kr
UlBLAQIVAxQACAAIAOyTjUNT6VDRgwEAAJECAAAmAAwAAAAAAAAAAECkgYsHAAB0ZXN0Y2FzZSAt
IHZvIHNjcm9sbCBpc3N1ZS9qcy9pbmRleC5qc1VYCABOxKtS+8KrUlBLAQIVAwoAAAAAALqUjUMA
AAAAAAAAAAAAAAAnAAwAAAAAAAAAAED9QXIJAABfX01BQ09TWC90ZXN0Y2FzZSAtIHZvIHNjcm9s
bCBpc3N1ZS9qcy9VWAgAgMSrUoDEq1JQSwECFQMUAAgACADsk41Dy3nuQIcAAADUAAAAMQAMAAAA
AAAAAABApIHHCQAAX19NQUNPU1gvdGVzdGNhc2UgLSB2byBzY3JvbGwgaXNzdWUvanMvLl9pbmRl
eC5qc1VYCABOxKtS+8KrUlBLAQIVAxQACAAIAFmTjUONrphvgQAAANQAAAAlAAwAAAAAAAAAAECA
gb0KAABfX01BQ09TWC8uX3Rlc3RjYXNlIC0gdm8gc2Nyb2xsIGlzc3VlVVgIAFLEq1LpwatSUEsF
BgAAAAAQABAA8wUAAKELAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259431</attachid>
            <date>2015-08-19 17:11:26 -0700</date>
            <delta_ts>2015-08-19 17:20:40 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55325</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODY2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE1LTA4LTE5ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFdoZW4gbmF2aWdh
dGluZyB0aGUgZWxlbWVudHMgb2YgYSBzY3JvbGxhYmxlIGVsZW1lbnQgd2l0aCBWb2ljZU92ZXIs
IHRoZSBzY3JvbGxUb3AoKSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBwZXJtYW5l
bnRseSBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNTcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBzY3JvbGxUb1Zpc2libGUgY29kZSBkaWQgbm90IGFjY291bnQgZm9yIHNjcm9sbGFi
bGUgZWxlbWVudHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlaXIgdmlld3BvcnRzLgorICAgICAg
ICBGaXJzdCwgd2UgbmVlZCB0byBwYXNzIHRoZSBzdWItZm9jdXMgdXAgdGhlIHNjcm9sbCBjaGFp
biAob3RoZXJ3aXNlIHdlJ2xsIHNjcm9sbCBzb21lIHBhcmVudCB0byB5PTApLgorICAgICAgICBT
ZWNvbmQsIHdlIHNob3VsZCB0cnkgdG8gY2VudGVyIHRoZSBmb2N1cyB3aXRoaW4gdGhlIHZpZXdw
b3J0LCByYXRoZXIgdGhhbiBwb3NpdGlvbmluZyBhdCB0aGUgYm90dG9tIGZvciBhIAorICAgICAg
ICBiZXR0ZXIgZXhwZXJpZW5jZS4KKworICAgICAgICBUaGlzIGNoYW5nZSB3YXMgYWRhcHRlZCBm
cm9tIEJsaW5rIHIxODM5MjY6CisgICAgICAgIGh0dHBzOi8vc3JjLmNocm9taXVtLm9yZy92aWV3
dmMvYmxpbms/dmlldz1yZXYmcmV2aXNpb249MTgzOTI2CisKKyAgICAgICAgVGVzdHM6IGFjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLmh0bWwKKyAgICAg
ICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUuaHRt
bAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1h
aW4td2luZG93Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWds
b2JhbC1wb2ludC1uZXN0ZWQuaHRtbAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS9zY3Jv
bGwtdG8tbWFrZS12aXNpYmxlLWRpdi1vdmVyZmxvdy5odG1sCisgICAgICAgICAgICAgICBhY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLmh0bWwKKyAgICAgICAgICAg
ICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi5odG1sCisg
ICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVk
Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJs
ZS13aXRoLXN1YmZvY3VzLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQmVzdFNjcm9sbE9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc09uc2NyZWVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbFRvTWFrZVZpc2li
bGVXaXRoU3ViRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
c2Nyb2xsVG9HbG9iYWxQb2ludCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTY3JvbGxUb1Zpc2libGVdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlTY3JvbGxUb01h
a2VWaXNpYmxlV2l0aFN1YkZvY3VzOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0
aW9uOl0pOgorCiAyMDE1LTA4LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgQXZvaWQgZG91YmxlIGhhc2ggbG9va3VwIGluIG91ciBKUyBiaW5kaW5ncyBuYW1l
ZCBwcm9wZXJ0eSBnZXR0ZXIgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHJldmlzaW9uIDE4ODU1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzIxLDYgKzMzMjEsMTYgQEAKICAgICBtX29iamVjdC0+c2Nyb2xsVG9NYWtlVmlz
aWJsZSgpOwogfQogCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9NYWtlVmlzaWJsZVdp
dGhTdWJGb2N1czooTlNSZWN0KXJlY3QKK3sKKyAgICBtX29iamVjdC0+c2Nyb2xsVG9NYWtlVmlz
aWJsZVdpdGhTdWJGb2N1cyhJbnRSZWN0KHJlY3QpKTsKK30KKworLSAodm9pZClfYWNjZXNzaWJp
bGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBtX29iamVjdC0+
c2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludChwb2ludCkpOworfQorCiAtICh2b2lkKWFjY2Vz
c2liaWxpdHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyopYWN0aW9uCiB7CiAgICAgaWYgKCFbc2Vs
ZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxODc3
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMxLDY3ICsyMzMxLDkyIEBACiAvLyBsb2dpYyBpcyB0
aGUgc2FtZS4gVGhlIGdvYWwgaXMgdG8gY29tcHV0ZSB0aGUgYmVzdCBzY3JvbGwgb2Zmc2V0CiAv
LyBpbiBvcmRlciB0byBtYWtlIGFuIG9iamVjdCB2aXNpYmxlIHdpdGhpbiBhIHZpZXdwb3J0Lgog
Ly8KKy8vIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBmdWxseSB2aXNpYmxlLCByZXR1cm5zIHRo
ZSBzYW1lIHNjcm9sbAorLy8gb2Zmc2V0LgorLy8KIC8vIEluIGNhc2UgdGhlIHdob2xlIG9iamVj
dCBjYW5ub3QgZml0LCB5b3UgY2FuIHNwZWNpZnkgYQogLy8gc3ViZm9jdXMgLSBhIHNtYWxsZXIg
cmVnaW9uIHdpdGhpbiB0aGUgb2JqZWN0IHRoYXQgc2hvdWxkCiAvLyBiZSBwcmlvcml0aXplZC4g
SWYgdGhlIHdob2xlIG9iamVjdCBjYW4gZml0LCB0aGUgc3ViZm9jdXMgaXMKIC8vIGlnbm9yZWQu
CiAvLwotLy8gRXhhbXBsZTogdGhlIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHRoZSByaWdodCBq
dXN0IGVub3VnaAotLy8gdGhhdCB0aGUgb2JqZWN0IGlzIGluIHZpZXcuCisvLyBJZiBwb3NzaWJs
ZSwgdGhlIG9iamVjdCBhbmQgc3ViZm9jdXMgYXJlIGNlbnRlcmVkIHdpdGhpbiB0aGUKKy8vIHZp
ZXdwb3J0LgorLy8KKy8vIEV4YW1wbGUgMTogdGhlIG9iamVjdCBpcyBhbHJlYWR5IHZpc2libGUs
IHNvIG5vdGhpbmcgaGFwcGVucy4KKy8vICAgKy0tLS0tLS0tLS1WaWV3cG9ydC0tLS0tLS0tLSsK
Ky8vICAgICAgICAgICAgICAgICArLS0tT2JqZWN0LS0tKworLy8gICAgICAgICAgICAgICAgICst
LVN1YkZvY3VzLS0rCisvLworLy8gRXhhbXBsZSAyOiB0aGUgb2JqZWN0IGlzIG5vdCBmdWxseSB2
aXNpYmxlLCBzbyBpdCdzIGNlbnRlcmVkCisvLyB3aXRoaW4gdGhlIHZpZXdwb3J0LgogLy8gICBC
ZWZvcmU6CiAvLyAgICstLS0tLS0tLS0tVmlld3BvcnQtLS0tLS0tLS0rCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICArLS0tT2JqZWN0LS0tKwogLy8gICAgICAgICAgICAgICAgICAgICAgICAg
Ky0tU3ViRm9jdXMtLSsKIC8vCiAvLyAgIEFmdGVyOgotLy8gICAgICAgICAgKy0tLS0tLS0tLS1W
aWV3cG9ydC0tLS0tLS0tLSsKKy8vICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLVZpZXdwb3J0
LS0tLS0tLS0tKwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLU9iamVjdC0tLSsKIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICstLVN1YkZvY3VzLS0rCiAvLworLy8gRXhhbXBsZSAz
OiB0aGUgb2JqZWN0IGlzIGxhcmdlciB0aGFuIHRoZSB2aWV3cG9ydCwgc28gdGhlCisvLyB2aWV3
cG9ydCBtb3ZlcyB0byBzaG93IGFzIG11Y2ggb2YgdGhlIG9iamVjdCBhcyBwb3NzaWJsZSwKKy8v
IHdoaWxlIGFsc28gdHJ5aW5nIHRvIGNlbnRlciB0aGUgc3ViZm9jdXMuCisvLyAgIEJlZm9yZToK
Ky8vICAgKy0tLS0tLS0tLS1WaWV3cG9ydC0tLS0tLS0tLSsKKy8vICAgICArLS0tLS0tLS0tLS0t
LS0tT2JqZWN0LS0tLS0tLS0tLS0tLS0rCisvLyAgICAgICAgICAgICAgICAgICAgICAgICArLVN1
YkZvY3VzLSsKKy8vCisvLyAgIEFmdGVyOgorLy8gICAgICAgICAgICAgKy0tLS0tLS0tLS1WaWV3
cG9ydC0tLS0tLS0tLSsKKy8vICAgICArLS0tLS0tLS0tLS0tLS0tT2JqZWN0LS0tLS0tLS0tLS0t
LS0rCisvLyAgICAgICAgICAgICAgICAgICAgICAgICArLVN1YkZvY3VzLSsKKy8vCiAvLyBXaGVu
IGNvbnN0cmFpbnRzIGNhbm5vdCBiZSBmdWxseSBzYXRpc2ZpZWQsIHRoZSBtaW4KIC8vIChsZWZ0
L3RvcCkgcG9zaXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBtYXggKHJpZ2h0L2JvdHRv
bSkuCiAvLwogLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgcmVwcmVzZW50cyB0aGUgaWRl
YWwgbmV3IHNjcm9sbCBvZmZzZXQuCiAvLyBUaGlzIG1heSBiZSBvdXQgb2YgcmFuZ2UgLSB0aGUg
Y2FsbGluZyBmdW5jdGlvbiBzaG91bGQgY2xpcCB0aGlzCiAvLyB0byB0aGUgYXZhaWxhYmxlIHJh
bmdlLgotc3RhdGljIGludCBjb21wdXRlQmVzdFNjcm9sbE9mZnNldChpbnQgY3VycmVudFNjcm9s
bE9mZnNldCwgaW50IHN1YmZvY3VzTWluLCBpbnQgb2JqZWN0TWluLCBpbnQgb2JqZWN0TWF4LCBp
bnQgdmlld3BvcnRNaW4sIGludCB2aWV3cG9ydE1heCkKK3N0YXRpYyBpbnQgY29tcHV0ZUJlc3RT
Y3JvbGxPZmZzZXQoaW50IGN1cnJlbnRTY3JvbGxPZmZzZXQsIGludCBzdWJmb2N1c01pbiwgaW50
IHN1YmZvY3VzTWF4LCBpbnQgb2JqZWN0TWluLCBpbnQgb2JqZWN0TWF4LCBpbnQgdmlld3BvcnRN
aW4sIGludCB2aWV3cG9ydE1heCkKIHsKICAgICBpbnQgdmlld3BvcnRTaXplID0gdmlld3BvcnRN
YXggLSB2aWV3cG9ydE1pbjsKLQotICAgIC8vIElmIHRoZSBmb2N1cyBzaXplIGlzIGxhcmdlciB0
aGFuIHRoZSB2aWV3cG9ydCBzaXplLCBzaHJpbmsgaXQgaW4gdGhlCi0gICAgLy8gZGlyZWN0aW9u
IG9mIHN1YmZvY3VzLgorICAgIAorICAgIC8vIElmIHRoZSBvYmplY3Qgc2l6ZSBpcyBsYXJnZXIg
dGhhbiB0aGUgdmlld3BvcnQgc2l6ZSwgY29uc2lkZXIKKyAgICAvLyBvbmx5IGEgcG9ydGlvbiB0
aGF0J3MgYXMgbGFyZ2UgYXMgdGhlIHZpZXdwb3J0LCBjZW50ZXJpbmcgb24KKyAgICAvLyB0aGUg
c3ViZm9jdXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KICAgICBpZiAob2JqZWN0TWF4IC0gb2JqZWN0
TWluID4gdmlld3BvcnRTaXplKSB7Ci0gICAgICAgIC8vIFN1YmZvY3VzIG11c3QgYmUgd2l0aGlu
IGZvY3VzOgorICAgICAgICAvLyBTaW5jZSBpdCdzIGltcG9zc2libGUgdG8gZml0IHRoZSB3aG9s
ZSBvYmplY3QgaW4gdGhlCisgICAgICAgIC8vIHZpZXdwb3J0LCBleGl0IG5vdyBpZiB0aGUgc3Vi
Zm9jdXMgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIHZpZXdwb3J0LgorICAgICAgICBpZiAoc3ViZm9j
dXNNaW4gLSBjdXJyZW50U2Nyb2xsT2Zmc2V0ID49IHZpZXdwb3J0TWluCisgICAgICAgICAgICAm
JiBzdWJmb2N1c01heCAtIGN1cnJlbnRTY3JvbGxPZmZzZXQgPD0gdmlld3BvcnRNYXgpCisgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbE9mZnNldDsKKyAgICAgICAgCisgICAgICAgIC8v
IFN1YmZvY3VzIG11c3QgYmUgd2l0aGluIGZvY3VzLgogICAgICAgICBzdWJmb2N1c01pbiA9IHN0
ZDo6bWF4KHN1YmZvY3VzTWluLCBvYmplY3RNaW4pOwotCisgICAgICAgIHN1YmZvY3VzTWF4ID0g
c3RkOjptaW4oc3ViZm9jdXNNYXgsIG9iamVjdE1heCk7CisgICAgICAgIAogICAgICAgICAvLyBT
dWJmb2N1cyBtdXN0IGJlIG5vIGxhcmdlciB0aGFuIHRoZSB2aWV3cG9ydCBzaXplOyBmYXZvciB0
b3AvbGVmdC4KLSAgICAgICAgaWYgKHN1YmZvY3VzTWluICsgdmlld3BvcnRTaXplID4gb2JqZWN0
TWF4KQotICAgICAgICAgICAgb2JqZWN0TWluID0gb2JqZWN0TWF4IC0gdmlld3BvcnRTaXplOwot
ICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG9iamVjdE1pbiA9IHN1YmZvY3VzTWluOwotICAg
ICAgICAgICAgb2JqZWN0TWF4ID0gc3ViZm9jdXNNaW4gKyB2aWV3cG9ydFNpemU7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKHN1YmZvY3VzTWF4IC0gc3ViZm9jdXNNaW4gPiB2aWV3cG9ydFNpemUp
CisgICAgICAgICAgICBzdWJmb2N1c01heCA9IHN1YmZvY3VzTWluICsgdmlld3BvcnRTaXplOwor
ICAgICAgICAKKyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgc2l6ZSBvZiBhbiBvYmplY3QgY2VudGVy
ZWQgb24gdGhlIHN1YmZvY3VzLCB0aGUgc2l6ZSBvZiB0aGUgdmlld3BvcnQuCisgICAgICAgIGlu
dCBjZW50ZXJlZE9iamVjdE1pbiA9IChzdWJmb2N1c01pbiArIHN1YmZvY3VzTWF4IC0gdmlld3Bv
cnRTaXplKSAvIDI7CisgICAgICAgIGludCBjZW50ZXJlZE9iamVjdE1heCA9IGNlbnRlcmVkT2Jq
ZWN0TWluICsgdmlld3BvcnRTaXplOworICAgICAgIAorICAgICAgICBvYmplY3RNaW4gPSBzdGQ6
Om1heChvYmplY3RNaW4sIGNlbnRlcmVkT2JqZWN0TWluKTsKKyAgICAgICAgb2JqZWN0TWF4ID0g
c3RkOjptaW4ob2JqZWN0TWF4LCBjZW50ZXJlZE9iamVjdE1heCk7CiAgICAgfQotCisgICAgCiAg
ICAgLy8gRXhpdCBub3cgaWYgdGhlIGZvY3VzIGlzIGFscmVhZHkgd2l0aGluIHRoZSB2aWV3cG9y
dC4KICAgICBpZiAob2JqZWN0TWluIC0gY3VycmVudFNjcm9sbE9mZnNldCA+PSB2aWV3cG9ydE1p
bgogICAgICAgICAmJiBvYmplY3RNYXggLSBjdXJyZW50U2Nyb2xsT2Zmc2V0IDw9IHZpZXdwb3J0
TWF4KQogICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbE9mZnNldDsKLQotICAgIC8vIFNjcm9s
bCBsZWZ0IGlmIHdlJ3JlIHRvbyBmYXIgdG8gdGhlIHJpZ2h0LgotICAgIGlmIChvYmplY3RNYXgg
LSBjdXJyZW50U2Nyb2xsT2Zmc2V0ID4gdmlld3BvcnRNYXgpCi0gICAgICAgIHJldHVybiBvYmpl
Y3RNYXggLSB2aWV3cG9ydE1heDsKLQotICAgIC8vIFNjcm9sbCByaWdodCBpZiB3ZSdyZSB0b28g
ZmFyIHRvIHRoZSBsZWZ0LgotICAgIGlmIChvYmplY3RNaW4gLSBjdXJyZW50U2Nyb2xsT2Zmc2V0
IDwgdmlld3BvcnRNaW4pCi0gICAgICAgIHJldHVybiBvYmplY3RNaW4gLSB2aWV3cG9ydE1pbjsK
LQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgLy8gVGhpcyBzaG91bGRuJ3QgaGFw
cGVuLgotICAgIHJldHVybiBjdXJyZW50U2Nyb2xsT2Zmc2V0OworICAgIAorICAgIC8vIENlbnRl
ciB0aGUgb2JqZWN0IGluIHRoZSB2aWV3cG9ydC4KKyAgICByZXR1cm4gKG9iamVjdE1pbiArIG9i
amVjdE1heCAtIHZpZXdwb3J0TWluIC0gdmlld3BvcnRNYXgpIC8gMjsKIH0KLQorICAgIAogYm9v
bCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc09uc2NyZWVuKCkgY29uc3QKIHsgICAKICAgICBib29s
IGlzT25zY3JlZW4gPSB0cnVlOwpAQCAtMjQ0OSwyMiArMjQ3NCwzNCBAQAogICAgIC8vIEZJWE1F
OiB1bmNsZWFyIGlmIHdlIG5lZWQgTGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdC4KICAgICBJ
bnRSZWN0IHNjcm9sbFZpc2libGVSZWN0ID0gc2Nyb2xsYWJsZUFyZWEtPnZpc2libGVDb250ZW50
UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CiAKKyAg
ICBpZiAoIXNjcm9sbFBhcmVudC0+aXNTY3JvbGxWaWV3KCkpIHsKKyAgICAgICAgb2JqZWN0UmVj
dC5tb3ZlQnkoc2Nyb2xsUG9zaXRpb24pOworICAgICAgICBvYmplY3RSZWN0Lm1vdmVCeSgtc25h
cHBlZEludFJlY3Qoc2Nyb2xsUGFyZW50LT5lbGVtZW50UmVjdCgpKS5sb2NhdGlvbigpKTsKKyAg
ICB9CisgICAgCiAgICAgaW50IGRlc2lyZWRYID0gY29tcHV0ZUJlc3RTY3JvbGxPZmZzZXQoCiAg
ICAgICAgIHNjcm9sbFBvc2l0aW9uLngoKSwKLSAgICAgICAgb2JqZWN0UmVjdC54KCkgKyBzdWJm
b2N1cy54KCksCisgICAgICAgIG9iamVjdFJlY3QueCgpICsgc3ViZm9jdXMueCgpLCBvYmplY3RS
ZWN0LngoKSArIHN1YmZvY3VzLm1heFgoKSwKICAgICAgICAgb2JqZWN0UmVjdC54KCksIG9iamVj
dFJlY3QubWF4WCgpLAogICAgICAgICAwLCBzY3JvbGxWaXNpYmxlUmVjdC53aWR0aCgpKTsKICAg
ICBpbnQgZGVzaXJlZFkgPSBjb21wdXRlQmVzdFNjcm9sbE9mZnNldCgKICAgICAgICAgc2Nyb2xs
UG9zaXRpb24ueSgpLAotICAgICAgICBvYmplY3RSZWN0LnkoKSArIHN1YmZvY3VzLnkoKSwKKyAg
ICAgICAgb2JqZWN0UmVjdC55KCkgKyBzdWJmb2N1cy55KCksIG9iamVjdFJlY3QueSgpICsgc3Vi
Zm9jdXMubWF4WSgpLAogICAgICAgICBvYmplY3RSZWN0LnkoKSwgb2JqZWN0UmVjdC5tYXhZKCks
CiAgICAgICAgIDAsIHNjcm9sbFZpc2libGVSZWN0LmhlaWdodCgpKTsKIAogICAgIHNjcm9sbFBh
cmVudC0+c2Nyb2xsVG8oSW50UG9pbnQoZGVzaXJlZFgsIGRlc2lyZWRZKSk7CiAKKyAgICAvLyBD
b252ZXJ0IHRoZSBzdWJmb2N1cyBpbnRvIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgc2Nyb2xsIHBh
cmVudC4KKyAgICBJbnRSZWN0IG5ld1N1YmZvY3VzID0gc3ViZm9jdXM7CisgICAgSW50UmVjdCBu
ZXdFbGVtZW50UmVjdCA9IHNuYXBwZWRJbnRSZWN0KGVsZW1lbnRSZWN0KCkpOworICAgIEludFJl
Y3Qgc2Nyb2xsUGFyZW50UmVjdCA9IHNuYXBwZWRJbnRSZWN0KHNjcm9sbFBhcmVudC0+ZWxlbWVu
dFJlY3QoKSk7CisgICAgbmV3U3ViZm9jdXMubW92ZShuZXdFbGVtZW50UmVjdC54KCksIG5ld0Vs
ZW1lbnRSZWN0LnkoKSk7CisgICAgbmV3U3ViZm9jdXMubW92ZSgtc2Nyb2xsUGFyZW50UmVjdC54
KCksIC1zY3JvbGxQYXJlbnRSZWN0LnkoKSk7CisgICAgCiAgICAgLy8gUmVjdXJzaXZlbHkgbWFr
ZSBzdXJlIHRoZSBzY3JvbGwgcGFyZW50IGl0c2VsZiBpcyB2aXNpYmxlLgogICAgIGlmIChzY3Jv
bGxQYXJlbnQtPnBhcmVudE9iamVjdCgpKQotICAgICAgICBzY3JvbGxQYXJlbnQtPnNjcm9sbFRv
TWFrZVZpc2libGUoKTsKKyAgICAgICAgc2Nyb2xsUGFyZW50LT5zY3JvbGxUb01ha2VWaXNpYmxl
V2l0aFN1YkZvY3VzKG5ld1N1YmZvY3VzKTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjpzY3JvbGxUb0dsb2JhbFBvaW50KGNvbnN0IEludFBvaW50JiBnbG9iYWxQb2ludCkgY29uc3QK
QEAgLTI1MDMsMTMgKzI1NDAsMTMgQEAKIAogICAgICAgICBpbnQgZGVzaXJlZFggPSBjb21wdXRl
QmVzdFNjcm9sbE9mZnNldCgKICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICBvYmplY3RSZWN0
LngoKSwKICAgICAgICAgICAgIG9iamVjdFJlY3QueCgpLCBvYmplY3RSZWN0Lm1heFgoKSwKKyAg
ICAgICAgICAgIG9iamVjdFJlY3QueCgpLCBvYmplY3RSZWN0Lm1heFgoKSwKICAgICAgICAgICAg
IHBvaW50LngoKSwgcG9pbnQueCgpKTsKICAgICAgICAgaW50IGRlc2lyZWRZID0gY29tcHV0ZUJl
c3RTY3JvbGxPZmZzZXQoCiAgICAgICAgICAgICAwLAotICAgICAgICAgICAgb2JqZWN0UmVjdC55
KCksCiAgICAgICAgICAgICBvYmplY3RSZWN0LnkoKSwgb2JqZWN0UmVjdC5tYXhZKCksCisgICAg
ICAgICAgICBvYmplY3RSZWN0LnkoKSwgb2JqZWN0UmVjdC5tYXhZKCksCiAgICAgICAgICAgICBw
b2ludC55KCksIHBvaW50LnkoKSk7CiAgICAgICAgIG91dGVyLT5zY3JvbGxUbyhJbnRQb2ludChk
ZXNpcmVkWCwgZGVzaXJlZFkpKTsKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4NjYzKQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTEgQEAKKzIwMTUtMDgtMTkgIENocmlzIEZsZWl6
YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogV2hlbiBuYXZpZ2F0aW5n
IHRoZSBlbGVtZW50cyBvZiBhIHNjcm9sbGFibGUgZWxlbWVudCB3aXRoIFZvaWNlT3ZlciwgdGhl
IHNjcm9sbFRvcCgpIHBvc2l0aW9uIG9mIHRoZSBlbGVtZW50IGRvZXMgbm90IHBlcm1hbmVudGx5
IGNoYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI1NzIwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMgYW5kIHNjcm9s
bFRvR2xvYmFsUG9pbnQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmNwcDoKKyAgICAgICAgKHByZXNzQ2FsbGJhY2spOgorICAgICAgICAoc2Nyb2xs
VG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrKToKKyAgICAgICAgKHNjcm9sbFRvR2xv
YmFsUG9pbnRDYWxsYmFjayk6CisgICAgICAgIChzY3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2sp
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFzcyk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW06CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKToKKyAgICAg
ICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9j
dXMpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2lu
dCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMu
bW06CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50KToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1hdGhQcmVzY3JpcHRzRGVz
Y3JpcHRpb24pOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtl
VmlzaWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VW
aXNpYmxlV2l0aFN1YkZvY3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OmlzVGV4dE1hcmtlclZhbGlkKToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlckZvckluZGV4KToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZv
Y3VzKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3VwcG9ydGVkQWN0
aW9ucyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1hdGhQb3N0c2Ny
aXB0c0Rlc2NyaXB0aW9uKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bWF0aFByZXNjcmlwdHNEZXNjcmlwdGlvbik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9J
bmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmlkbDoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludCk6CisgICAgICAgIChXVFI6OkFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Ny
b2xsVG9NYWtlVmlzaWJsZSk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNjcm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UpOgorCiAyMDE1LTA4LTE5ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQnVp
bGQgVGVzdFdURiBvbiBNYWMgd2l0aCBDTWFrZS4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODg2NTUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjkwLDYgKzY5MCwzMiBAQAogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgc2Nyb2xsVG9NYWtlVmlzaWJsZVdp
dGhTdWJGb2N1c0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5j
dGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0
IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICB1
bnNpZ25lZCB4ID0gMCwgeSA9IDAsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMDsKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA9PSA0KSB7CisgICAgICAgIHggPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwg
YXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgICAgICB5ID0gSlNWYWx1ZVRvTnVtYmVyKGNv
bnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICAgICAgd2lkdGggPSBKU1ZhbHVl
VG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzJdLCBleGNlcHRpb24pOworICAgICAgICBoZWln
aHQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzNdLCBleGNlcHRpb24pOwor
ICAgIH0KKyAgICAKKyAgICB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+c2Nyb2xsVG9NYWtlVmlz
aWJsZVdpdGhTdWJGb2N1cyh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIHNjcm9sbFRv
R2xvYmFsUG9pbnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVu
Y3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25z
dCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
dW5zaWduZWQgeCA9IDAsIHkgPSAwOworICAgIGlmIChhcmd1bWVudENvdW50ID09IDIpIHsKKyAg
ICAgICAgeCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlv
bik7CisgICAgICAgIHkgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBl
eGNlcHRpb24pOworICAgIH0KKworICAgIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5zY3JvbGxU
b0dsb2JhbFBvaW50KHgsIHkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgc2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICB0b0FYRWxlbWVudCh0aGlzT2Jq
ZWN0KS0+c2Nyb2xsVG9NYWtlVmlzaWJsZSgpOwpAQCAtMTcwMCw2ICsxNzI2LDggQEAKICAgICAg
ICAgeyAic2V0U2VsZWN0ZWRWaXNpYmxlVGV4dFJhbmdlIiwgc2V0U2VsZWN0ZWRWaXNpYmxlVGV4
dFJhbmdlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAic2VsZWN0ZWRDaGlsZEF0SW5kZXgi
LCBzZWxlY3RlZENoaWxkQXRJbmRleENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNjcm9s
bFRvTWFrZVZpc2libGUiLCBzY3JvbGxUb01ha2VWaXNpYmxlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAic2Nyb2xsVG9HbG9iYWxQb2ludCIsIHNjcm9sbFRvR2xvYmFsUG9pbnRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzIiwg
c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1c0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAjaWYgUExB
VEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgICAgIHsgImNoYXJhY3RlckF0T2Zmc2V0
IiwgY2hhcmFjdGVyQXRPZmZzZXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJ3b3JkQXRP
ZmZzZXQiLCB3b3JkQXRPZmZzZXRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0JKHJl
dmlzaW9uIDE4ODY1NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02ODAsNiArNjgwLDE2IEBACiAgICAg
Ly8gRklYTUU6IGltcGxlbWVudAogfQogCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KQoreworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQogewogICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdp
dGhDaGFyYWN0ZXJzKDAsIDApOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vz
c2liaWxpdHlVSUVsZW1lbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJldmlzaW9uIDE4ODY1NSkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw4IEBACiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxp
dHlJbmRleE9mQ2hpbGQ6KGlkKWNoaWxkOwogLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QXJy
YXlBdHRyaWJ1dGVDb3VudDooTlNTdHJpbmcgKilhdHRyaWJ1dGU7CiAtICh2b2lkKV9hY2Nlc3Np
YmlsaXR5U2V0VGVzdFZhbHVlOihpZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nKilhdHRy
aWJ1dGVOYW1lOworLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRo
U3ViRm9jdXM6KE5TUmVjdClyZWN0OworLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xv
YmFsUG9pbnQ6KE5TUG9pbnQpcG9pbnQ7CiBAZW5kCiAKIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQoUGxhdGZvcm1VSUVsZW1lbnQgZWxlbWVudCkKQEAgLTE4
MjcsNyArMTgyOSw2IEBACiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLQogdm9pZCBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkKIHsKICAgICBCRUdJTl9BWF9P
QkpDX0VYQ0VQVElPTlMKQEAgLTE4MzcsMTAgKzE4MzgsMTQgQEAKIAogdm9pZCBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQg
eSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAg
ICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBbbV9lbGVtZW50IF9hY2Nlc3NpYmlsaXR5
U2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1czpOU01ha2VSZWN0KHgsIHksIHdpZHRoLCBo
ZWlnaHQpXTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CiAKIHZvaWQgQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpCiB7Ci0gICAg
Ly8gRklYTUU6IGltcGxlbWVudAorICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIFtt
X2VsZW1lbnQgX2FjY2Vzc2liaWxpdHlTY3JvbGxUb0dsb2JhbFBvaW50Ok5TTWFrZVBvaW50KHgs
IHkpXTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCiB9CkluZGV4OiBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4ODY1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIyNCw2ICsyMjQsOCBAQAogYm9vbCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpp
c1RleHRNYXJrZXJWYWxpZChBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopIHsgcmV0dXJuIGZhbHNl
OyB9CiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Ojp0ZXh0TWFya2VyRm9ySW5kZXgoaW50KSB7IHJldHVybiAwOyB9CiB2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUoKSB7IH0KK3ZvaWQgQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQsIGludCkgeyB9Cit2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMo
aW50LCBpbnQsIGludCwgaW50KSB7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpzdXBwb3J0ZWRBY3Rpb25zKCkgY29uc3QgeyByZXR1cm4gMDsgfQog
SlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1hdGhQb3N0
c2NyaXB0c0Rlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gMDsgfQogSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1hdGhQcmVzY3JpcHRzRGVzY3JpcHRp
b24oKSBjb25zdCB7IHJldHVybiAwOyB9CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aAkocmV2aXNpb24gMTg4NjU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsy
MjUsOCBAQAogICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gdmVydGljYWxT
Y3JvbGxiYXIoKSBjb25zdDsKIAogICAgIHZvaWQgc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAg
IHZvaWQgc2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpOworICAgIHZvaWQgc2Nyb2xs
VG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCk7CiAgICAgCiAgICAgLy8gVGV4dCBtYXJrZXJzLgogICAgIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gbGluZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIo
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAkocmV2aXNpb24gMTg4NjU1KQorKysgVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDYgKzE2OSw5IEBACiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQgdmVydGljYWxTY3JvbGxiYXI7CiAKICAg
ICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGUoKTsKKyAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9p
bnQoaW50IHgsIGludCB5KTsKKyAgICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9j
dXMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCiAgICAgdm9pZCB0YWtl
Rm9jdXMoKTsKICAgICBib29sZWFuIHNjcm9sbFBhZ2VEb3duKCk7CiAgICAgYm9vbGVhbiBzY3Jv
bGxQYWdlVXAoKTsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
aW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElP
Uy5tbQkocmV2aXNpb24gMTg4NjU1KQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjk5LDYgKzY5OSwxNCBAQAogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxU
b01ha2VWaXNpYmxlKCkKIHsKIH0KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwgaW50IHkpCit7Cit9CisgICAgCit2b2lkIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7Cit9CiAKIEpTUmV0YWluUHRyPEpTU3Ry
aW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7Cklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
SW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJldmlzaW9u
IDE4ODY1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTgwLDYgKzgwLDgg
QEAKIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0eUluZGV4T2ZDaGlsZDooaWQpY2hpbGQ7CiAt
IChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlBcnJheUF0dHJpYnV0ZUNvdW50OihOU1N0cmluZyAq
KWF0dHJpYnV0ZTsKIC0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTZXRUZXN0VmFsdWU6KGlkKXZhbHVl
IGZvckF0dHJpYnV0ZTooTlNTdHJpbmcqKWF0dHJpYnV0ZU5hbWU7CistICh2b2lkKV9hY2Nlc3Np
YmlsaXR5U2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1czooTlNSZWN0KXJlY3Q7CistICh2
b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9iYWxQb2ludDooTlNQb2ludClwb2ludDsKIEBl
bmQKIAogbmFtZXNwYWNlIFdUUiB7CkBAIC0xMzY3LDYgKzEzNjksMjAgQEAKICAgICBFTkRfQVhf
T0JKQ19FWENFUFRJT05TCiB9CiAgICAgCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNj
cm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KQoreworICAgIEJFR0lOX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIFttX2VsZW1lbnQgX2FjY2Vzc2liaWxpdHlTY3JvbGxUb0dsb2JhbFBvaW50
Ok5TTWFrZVBvaW50KHgsIHkpXTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCit9CisKK3Zv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1
cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBCRUdJTl9BWF9P
QkpDX0VYQ0VQVElPTlMKKyAgICBbbV9lbGVtZW50IF9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9NYWtl
VmlzaWJsZVdpdGhTdWJGb2N1czpOU01ha2VSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpXTsKKyAg
ICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCit9CisKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzZWxlY3RlZFRleHRSYW5nZSgpCiB7CiAgICAgTlNSYW5n
ZSByYW5nZSA9IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTg4NjYzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjkgQEAKKzIwMTUtMDgtMTkgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KKworICAgICAgICBBWDogV2hlbiBuYXZpZ2F0aW5nIHRoZSBlbGVtZW50cyBvZiBhIHNjcm9s
bGFibGUgZWxlbWVudCB3aXRoIFZvaWNlT3ZlciwgdGhlIHNjcm9sbFRvcCgpIHBvc2l0aW9uIG9m
IHRoZSBlbGVtZW50IGRvZXMgbm90IHBlcm1hbmVudGx5IGNoYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI1NzIwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10
by1nbG9iYWwtcG9pbnQtaWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFtZS1uZXN0ZWQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9p
bnQtaWZyYW1lLW5lc3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Nj
cm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1tYWluLXdpbmRvdy1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1t
YWluLXdpbmRvdy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10
by1nbG9iYWwtcG9pbnQtbmVzdGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW5lc3RlZC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtZGl2LW92ZXJmbG93
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8t
bWFrZS12aXNpYmxlLWRpdi1vdmVyZmxvdy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWlmcmFtZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2li
bGUtbmVzdGVkLTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLTIuaHRtbDogQWRkZWQuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1u
ZXN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFr
ZS12aXNpYmxlLXdpdGgtc3ViZm9jdXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1cy5odG1sOiBB
ZGRlZC4KKwogMjAxNS0wOC0xOSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIG91dGxpbmUtc3R5bGU6IGF1dG8gbGVhdmVzIGJpdHMgYmVoaW5kIG9uIHN0cmF2YSdz
IGZseWJ5IHZpZXcuCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1n
bG9iYWwtcG9pbnQtaWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWds
b2JhbC1wb2ludC1pZnJhbWUtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTcgQEAKK1Rlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1vdmUgYW4gZWxlbWVudCB0byBhIHNwZWNp
ZmljIHBvaW50IHN1Y2Nlc3NmdWxseSBzY3JvbGxzIGFuIGlmcmFtZS4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKKzUwMDAtcGl4ZWwgYm94CisKKzUwMDAtcGl4ZWwgYm94CitQQVNT
IHdpbmRvdy5wYWdlWU9mZnNldCBpcyAwCitQQVNTIGZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0IGlz
IDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCitQQVNTIHRh
cmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMzAwCitQQVNTIHRhcmdldC5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMzAwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9p
bnQtaWZyYW1lLW5lc3RlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLW5lc3RlZC1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorVGVzdHMgdGhhdCBzY3Jv
bGxpbmcgdG8gbW92ZSBhbiBlbGVtZW50IHRvIGEgc3BlY2lmaWMgcG9pbnQgc3VjY2Vzc2Z1bGx5
IHNjcm9sbHMgYm90aCBhbiBpZnJhbWUgYW5kIGEgZGl2IHdpdGggb3ZlcmZsb3cuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCis1MDAwLXBpeGVsIGJveAorCis1MDAwLXBpeGVsIGJv
eAorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyBmcmFtZVdpbmRvdy5wYWdlWU9m
ZnNldCBpcyAwCitQQVNTIGNvbnRhaW5lci5zY3JvbGxUb3AgaXMgMAorUEFTUyB0YXJnZXQuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLnRvcCBpcyAzMDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LnRvcCBpcyAzMDAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFs
LXBvaW50LWlmcmFtZS1uZXN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLW5lc3RlZC5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBv
aW50LWlmcmFtZS1uZXN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGRp
diBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBp
eGVsIGJveDwvZGl2PgorCis8IS0tIFRoZSBjb250ZW50cyBvZiB0aGlzIGlmcmFtZSwgbW9yZSBu
aWNlbHkgZm9ybWF0dGVkOgorIDxib2R5PgorICAgPHN0eWxlPgorICAgICBidXR0b24geworICAg
ICAgIGJvcmRlcjogMDsKKyAgICAgfQorICAgPC9zdHlsZT4KKyAgIDxkaXYgc3R5bGU9J2JvcmRl
cjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1waXhlbCBib3g8L2Rpdj4K
KyAgIDxkaXYgaWQ9J2NvbnRhaW5lcicgc3R5bGU9J2hlaWdodDogMTAwcHg7IG92ZXJmbG93OiBz
Y3JvbGwnPgorICAgICA8ZGl2IHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6
IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgICAgIDxidXR0b24gaWQ9J3RhcmdldCc+
VGFyZ2V0PC9idXR0b24+CisgICAgIDxkaXYgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDA7
IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1waXhlbCBib3g8L2Rpdj4KKyAgIDwvZGl2PgorICAgPGRp
diBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Jz41MDAwLXBp
eGVsIGJveDwvZGl2PgorICA8L2JvZHk+CisgLS0+Cis8aWZyYW1lIGlkPSJmcmFtZSIgc3JjPSJk
YXRhOnRleHQvaHRtbCw8Ym9keT48c3R5bGU+YnV0dG9uIHsgYm9yZGVyOiAwOyB9PC9zdHlsZT48
ZGl2IHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAt
cGl4ZWwgYm94PC9kaXY+PGRpdiBpZD0nY29udGFpbmVyJyBzdHlsZT0naGVpZ2h0OiAxMDBweDsg
b3ZlcmZsb3c6IHNjcm9sbCc+PGRpdiBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVp
Z2h0OiA1MDAwcHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2PjxidXR0b24gaWQ9J3RhcmdldCc+VGFy
Z2V0PC9idXR0b24+PGRpdiBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1
MDAwcHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9J2JvcmRlcjogMXB4
IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1waXhlbCBib3g8L2Rpdj48L2JvZHk+
Ij48L2lmcmFtZT4KKworPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0
OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHNjcm9sbGluZyB0byBtb3Zl
IGFuIGVsZW1lbnQgdG8gYSBzcGVjaWZpYyBwb2ludCBzdWNjZXNzZnVsbHkgc2Nyb2xscyBib3Ro
IGFuIGlmcmFtZSBhbmQgYSBkaXYgd2l0aCBvdmVyZmxvdy4iKTsKKworaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKword2luZG93Lmpz
VGVzdElzQXN5bmMgPSB0cnVlOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIHdpbmRvdy5m
cmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFtZSIpOworICAgIHdpbmRvdy5mcmFt
ZVdpbmRvdyA9IGZyYW1lLmNvbnRlbnRXaW5kb3c7CisgICAgd2luZG93LmZyYW1lRG9jID0gZnJh
bWVXaW5kb3cuZG9jdW1lbnQ7CisgICAgd2luZG93LmNvbnRhaW5lciA9IGZyYW1lRG9jLmdldEVs
ZW1lbnRCeUlkKCJjb250YWluZXIiKTsKKyAgICB3aW5kb3cudGFyZ2V0ID0gZnJhbWVEb2MuZ2V0
RWxlbWVudEJ5SWQoInRhcmdldCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcikgeworICAgICAgICB0YXJnZXQuZm9jdXMoKTsKKyAgICAgICAgdmFyIHRhcmdldEFj
Y2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsK
KyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwgcG9zaXRpb24gKHNpbmNl
IGNhbGxpbmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbykuCisgICAgd2luZG93LnNj
cm9sbFRvKDAsIDApOworICAgIGZyYW1lV2luZG93LnNjcm9sbFRvKDAsIDApOworICAgIGNvbnRh
aW5lci5zY3JvbGxUb3AgPSAwOworICAgIHNob3VsZEJlKCJ3aW5kb3cucGFnZVlPZmZzZXQiLCAi
MCIpOworICAgIHNob3VsZEJlKCJmcmFtZVdpbmRvdy5wYWdlWU9mZnNldCIsICIwIik7CisgICAg
c2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxUb3AiLCAiMCIpOworCisgICAgLy8gU2Nyb2xsIHRv
IHZhcmlvdXMgbG9jYXRpb25zIGFuZCBjaGVjay4KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvR2xv
YmFsUG9pbnQoMCwgMCk7CisgICAgc2hvdWxkQmUoInRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS50b3AiLCAiMCIpOworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIp
CisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9HbG9iYWxQb2ludCgwLCAz
MDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwg
IjMwMCIpOworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAg
IHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9HbG9iYWxQb2ludCgwLCAzMDAwKTsKKyAg
ICBzaG91bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIsICIzMDAwIik7
CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xv
YWQnLCBmdW5jdGlvbigpIHsKKyAgICBzZXRUaW1lb3V0KHJ1blRlc3QsIDEwKTsKK30sIGZhbHNl
KTsKKworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZy
YW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9s
bC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MyBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+
CisKKzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+
NTAwMC1waXhlbCBib3g8L2Rpdj4KKworPGlmcmFtZSBpZD0iZnJhbWUiIHNyYz0iZGF0YTp0ZXh0
L2h0bWwsPGJvZHk+PHN0eWxlPmJ1dHRvbiB7IGJvcmRlcjogMDsgfTwvc3R5bGU+PGRpdiBzdHls
ZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Jz41MDAwLXBpeGVsIGJv
eDwvZGl2PjxidXR0b24gaWQ9J3RhcmdldCc+VGFyZ2V0PC9idXR0b24+PGRpdiBzdHlsZT0nYm9y
ZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2
PjwvYm9keT4iPjwvaWZyYW1lPgorCis8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAw
OyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5n
IHRvIG1vdmUgYW4gZWxlbWVudCB0byBhIHNwZWNpZmljIHBvaW50IHN1Y2Nlc3NmdWxseSBzY3Jv
bGxzIGFuIGlmcmFtZS4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKword2luZG93LmpzVGVzdElzQXN5bmMgPSB0cnVlOwor
CitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIHdpbmRvdy5mcmFtZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJmcmFtZSIpOworICAgIHdpbmRvdy5mcmFtZVdpbmRvdyA9IGZyYW1lLmNvbnRl
bnRXaW5kb3c7CisgICAgd2luZG93LmZyYW1lRG9jID0gZnJhbWVXaW5kb3cuZG9jdW1lbnQ7Cisg
ICAgd2luZG93LnRhcmdldCA9IGZyYW1lRG9jLmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKTsKKwor
ICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGFyZ2V0
LmZvY3VzKCk7CisgICAgICAgIHZhciB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhl
IGluaXRpYWwgc2Nyb2xsIHBvc2l0aW9uIChzaW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9s
bCB0aGUgcGFnZSB0b28pLgorICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICBmcmFtZVdp
bmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICBzaG91bGRCZSgid2luZG93LnBhZ2VZT2Zmc2V0Iiwg
IjAiKTsKKyAgICBzaG91bGRCZSgiZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQiLCAiMCIpOworCisg
ICAgLy8gU2Nyb2xsIHRvIHZhcmlvdXMgbG9jYXRpb25zIGFuZCBjaGVjay4KKyAgICBpZiAod2lu
ZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2Jq
ZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMCk7CisgICAgc2hvdWxkQmUoInRhcmdldC5nZXRC
b3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMCIpOworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9H
bG9iYWxQb2ludCgwLCAzMDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGll
bnRSZWN0KCkudG9wIiwgIjMwMCIpOworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9HbG9iYWxQb2lu
dCgwLCAzMDAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LnRvcCIsICIzMDAwIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKword2luZG93LmFkZEV2
ZW50TGlzdGVuZXIoJ2xvYWQnLCBmdW5jdGlvbigpIHsKKyAgICBzZXRUaW1lb3V0KHJ1blRlc3Qs
IDEwKTsKK30sIGZhbHNlKTsKKworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1tYWluLXdp
bmRvdy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1haW4td2luZG93LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2lu
dC1tYWluLXdpbmRvdy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBA
QAorVGVzdHMgdGhhdCBzY3JvbGxpbmcgYW4gZWxlbWVudCB0byBhIHNwZWNpZmljIHBvaW50IHN1
Y2Nlc3NmdWxseSBzY3JvbGxzIHRoZSBtYWluIHdpbmRvdy4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKKzUwMDAtcGl4ZWwgYm94CitUYXJnZXQKKzUwMDAtcGl4ZWwgYm94CitQQVNT
IHdpbmRvdy5wYWdlWU9mZnNldCBpcyAwCitQQVNTIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS50b3AgaXMgMAorUEFTUyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlz
IDMwMAorUEFTUyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDMwMDAKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtbWFpbi13aW5k
b3cuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10
by1nbG9iYWwtcG9pbnQtbWFpbi13aW5kb3cuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1tYWluLXdpbmRvdy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPHN0eWxlPgorYnV0dG9u
IHsKKyAgYm9yZGVyOiAwOworfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8cCBpZD0i
ZGVzY3JpcHRpb24iPjwvcD4KKworPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsg
aGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorPGJ1dHRvbiBpZD0idGFyZ2V0
Ij5UYXJnZXQ8L2J1dHRvbj4KKzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhl
aWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKworPGRpdiBpZD0iY29uc29sZSI+
PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzY3JvbGxpbmcgYW4g
ZWxlbWVudCB0byBhIHNwZWNpZmljIHBvaW50IHN1Y2Nlc3NmdWxseSBzY3JvbGxzIHRoZSBtYWlu
IHdpbmRvdy4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB2YXIgdGFyZ2V0ID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB0YXJnZXQuZm9jdXMoKTsKKyAgICAgICAgdmFy
IHRhcmdldEFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2Vk
RWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwgcG9zaXRp
b24gKHNpbmNlIGNhbGxpbmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbykuCisgICAg
d2luZG93LnNjcm9sbFRvKDAsIDApOworICAgIHNob3VsZEJlKCJ3aW5kb3cucGFnZVlPZmZzZXQi
LCAiMCIpOworCisgICAgLy8gU2Nyb2xsIHRvIHZhcmlvdXMgbG9jYXRpb25zIGFuZCBjaGVjay4K
KyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRB
Y2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMCk7CisgICAgc2hvdWxkQmUo
InRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMCIpOworICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmpl
Y3Quc2Nyb2xsVG9HbG9iYWxQb2ludCgwLCAzMDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjMwMCIpOworICAgIGlmICh3aW5kb3cuYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xs
VG9HbG9iYWxQb2ludCgwLCAzMDAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLnRvcCIsICIzMDAwIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKwor
cnVuVGVzdCgpOworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW5lc3RlZC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8t
Z2xvYmFsLXBvaW50LW5lc3RlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtbmVzdGVkLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzIEBACitUZXN0cyB0aGF0IHNjcm9sbGlu
ZyBhbiBlbGVtZW50IHRvIGEgc3BlY2lmaWMgcG9pbnQgY2FuIHN1Y2Nlc3NmdWxseSBzY3JvbGwg
bXVsdGlwbGUgbmVzdGVkIHNjcm9sbGluZyB2aWV3cycuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCis1MDAwLXBpeGVsIGJveAorNTAwMC1waXhlbCBib3gKKzUwMDAtcGl4ZWwgYm94
CitUYXJnZXQKKzUwMDAtcGl4ZWwgYm94Cis1MDAwLXBpeGVsIGJveAorNTAwMC1waXhlbCBib3gK
K1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAKK1BBU1Mgb3V0ZXJDb250YWluZXIuc2Nyb2xs
VG9wIGlzIDAKK1BBU1MgaW5uZXJDb250YWluZXIuc2Nyb2xsVG9wIGlzIDAKK1BBU1MgdGFyZ2V0
LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyA+PSAxNTAwMAorUEFTUyB0YXJnZXQuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLnRvcCBpcyAzMDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LnRvcCBpcyAzMDAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFs
LXBvaW50LW5lc3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1uZXN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1uZXN0ZWQuaHRt
bAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KK2J1dHRv
biB7CisgIGJvcmRlcjogMDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+CisKKzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7
IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKworPGRpdiBpZD0ib3V0ZXJf
Y29udGFpbmVyIiBzdHlsZT0iaGVpZ2h0OiAxMDBweDsgb3ZlcmZsb3c6IHNjcm9sbCI+CisgIDxk
aXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1w
aXhlbCBib3g8L2Rpdj4KKyAgPGRpdiBpZD0iaW5uZXJfY29udGFpbmVyIiBzdHlsZT0iaGVpZ2h0
OiAxMDBweDsgb3ZlcmZsb3c6IHNjcm9sbCI+CisgICAgPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHgg
c29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorICAgIDxi
dXR0b24gaWQ9InRhcmdldCI+VGFyZ2V0PC9idXR0b24+CisgICAgPGRpdiBzdHlsZT0iYm9yZGVy
OiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2Pgor
ICA8L2Rpdj4KKyAgPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1
MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorPC9kaXY+CisKKzxkaXYgc3R5bGU9ImJvcmRl
cjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4K
KworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dHMgdGhhdCBzY3JvbGxpbmcgYW4gZWxlbWVudCB0byBhIHNwZWNpZmljIHBvaW50IGNhbiBzdWNj
ZXNzZnVsbHkgc2Nyb2xsIG11bHRpcGxlIG5lc3RlZCBzY3JvbGxpbmcgdmlld3MnLiIpOworCitm
dW5jdGlvbiBydW5UZXN0KCkgeworICAgIHdpbmRvdy5vdXRlckNvbnRhaW5lciA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJvdXRlcl9jb250YWluZXIiKTsKKyAgICB3aW5kb3cuaW5uZXJDb250
YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5uZXJfY29udGFpbmVyIik7CisgICAg
d2luZG93LnRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKTsKKworICAg
IGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGFyZ2V0LmZv
Y3VzKCk7CisgICAgICAgIHZhciB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhlIGlu
aXRpYWwgc2Nyb2xsIHBvc2l0aW9ucyAoc2luY2UgY2FsbGluZyBmb2N1cygpIGNhbiBzY3JvbGwg
dGhlIHBhZ2UgdG9vKS4KKyAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisgICAgb3V0ZXJDb250
YWluZXIuc2Nyb2xsVG9wID0gMDsKKyAgICBpbm5lckNvbnRhaW5lci5zY3JvbGxUb3AgPSAwOwor
ICAgIHNob3VsZEJlKCJ3aW5kb3cucGFnZVlPZmZzZXQiLCAiMCIpOworICAgIHNob3VsZEJlKCJv
dXRlckNvbnRhaW5lci5zY3JvbGxUb3AiLCAiMCIpOworICAgIHNob3VsZEJlKCJpbm5lckNvbnRh
aW5lci5zY3JvbGxUb3AiLCAiMCIpOworICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJ0
YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjE1MDAwIik7CisKKyAgICAvLyBT
Y3JvbGwgdG8gdmFyaW91cyBsb2NhdGlvbnMgYW5kIGNoZWNrLgorCisgICAgaWYgKHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5z
Y3JvbGxUb0dsb2JhbFBvaW50KDAsIDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkudG9wIiwgIjAiKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9HbG9i
YWxQb2ludCgwLCAzMDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRS
ZWN0KCkudG9wIiwgIjMwMCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJv
bGxlcikKKyAgICAgICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50
KDAsIDMwMDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
dG9wIiwgIjMwMDAiKTsKKworICBmaW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgpOworCis8
L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWRpdi1vdmVyZmxvdy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNp
YmxlLWRpdi1vdmVyZmxvdy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtZGl2LW92ZXJmbG93LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5IEBACitUZXN0cyB0aGF0IHNjcm9s
bGluZyB0byBtYWtlIGFuIGVsZW1lbnQgdmlzaWJsZSBzdWNjZXNzZnVsbHkgc2Nyb2xscyBhbiBh
cmJpdHJhcnkgSFRNTCBlbGVtZW50IHRoYXQgaGFzIENTUyBvdmVyZmxvdyBzZXQgdG8gJ3Njcm9s
bCcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitVcHBlciBUYXJnZXQKKzUwMDAt
cGl4ZWwgYm94CitMb3dlciBUYXJnZXQKK1BBU1MgY29udGFpbmVyLnNjcm9sbFRvcCBpcyAwCitQ
QVNTIGNvbnRhaW5lci5zY3JvbGxUb3AgPj0gbWluWU9mZnNldCBpcyB0cnVlCitQQVNTIGNvbnRh
aW5lci5zY3JvbGxUb3AgPD0gbWF4WU9mZnNldCBpcyB0cnVlCitQQVNTIGNvbnRhaW5lci5zY3Jv
bGxUb3AgPj0gbWluWU9mZnNldCBpcyB0cnVlCitQQVNTIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0g
bWF4WU9mZnNldCBpcyB0cnVlCitQQVNTIGNvbnRhaW5lci5zY3JvbGxUb3AgPj0gbWluWU9mZnNl
dCBpcyB0cnVlCitQQVNTIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gbWF4WU9mZnNldCBpcyB0cnVl
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWRpdi1v
dmVyZmxvdy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLW1ha2UtdmlzaWJsZS1kaXYtb3ZlcmZsb3cuaHRtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1kaXYtb3ZlcmZs
b3cuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcxIEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGRpdiBpZD0iY29udGFpbmVy
IiBzdHlsZT0iaGVpZ2h0OiAxMDBweDsgb3ZlcmZsb3c6IHNjcm9sbCI+CisgIDxidXR0b24gaWQ9
InVwcGVyX3RhcmdldCI+VXBwZXIgVGFyZ2V0PC9idXR0b24+CisgIDxkaXYgc3R5bGU9ImJvcmRl
cjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4K
KyAgPGJ1dHRvbiBpZD0ibG93ZXJfdGFyZ2V0Ij5Mb3dlciBUYXJnZXQ8L2J1dHRvbj4KKzwvZGl2
PgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJU
ZXN0cyB0aGF0IHNjcm9sbGluZyB0byBtYWtlIGFuIGVsZW1lbnQgdmlzaWJsZSBzdWNjZXNzZnVs
bHkgc2Nyb2xscyBhbiBhcmJpdHJhcnkgSFRNTCBlbGVtZW50IHRoYXQgaGFzIENTUyBvdmVyZmxv
dyBzZXQgdG8gJ3Njcm9sbCcuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgd2luZG93
LmNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKKyAgICB2
YXIgdXBwZXJUYXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXBwZXJfdGFyZ2V0Iik7
CisgICAgdmFyIGxvd2VyVGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvd2VyX3Rh
cmdldCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAg
ICAgICBsb3dlclRhcmdldC5mb2N1cygpOworICAgICAgICB2YXIgbG93ZXJUYXJnZXRBY2Nlc3Np
YmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAg
ICAgIHVwcGVyVGFyZ2V0LmZvY3VzKCk7CisgICAgICAgIHZhciB1cHBlclRhcmdldEFjY2Vzc2li
bGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICB9
CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwgcG9zaXRpb24gKHNpbmNlIGNhbGxp
bmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbykuCisgICAgY29udGFpbmVyLnNjcm9s
bFRvcCA9IDA7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxUb3AiLCAiMCIpOworCisg
ICAgLy8gU2Nyb2xsIHRvIG1ha2UgbG93ZXIgdGFyZ2V0IHZpc2libGUgYW5kIGNoZWNrLgorICAg
IGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIGxvd2VyVGFyZ2V0
QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgdmFyIHRvcCA9IGxv
d2VyVGFyZ2V0Lm9mZnNldFRvcCAtIGNvbnRhaW5lci5vZmZzZXRUb3A7CisgICAgd2luZG93Lm1p
bllPZmZzZXQgPSB0b3AgKyBsb3dlclRhcmdldC5vZmZzZXRIZWlnaHQgLSBjb250YWluZXIub2Zm
c2V0SGVpZ2h0OworICAgIHdpbmRvdy5tYXhZT2Zmc2V0ID0gdG9wOworICAgIHNob3VsZEJlKCJj
b250YWluZXIuc2Nyb2xsVG9wID49IG1pbllPZmZzZXQiLCAidHJ1ZSIpOworICAgIHNob3VsZEJl
KCJjb250YWluZXIuc2Nyb2xsVG9wIDw9IG1heFlPZmZzZXQiLCAidHJ1ZSIpOworCisgICAgLy8g
RG8gaXQgYWdhaW4uIEl0IHNob3VsZG4ndCBzY3JvbGwuCisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgbG93ZXJUYXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNj
cm9sbFRvTWFrZVZpc2libGUoKTsKKyAgICB2YXIgdG9wID0gbG93ZXJUYXJnZXQub2Zmc2V0VG9w
IC0gY29udGFpbmVyLm9mZnNldFRvcDsKKyAgICB3aW5kb3cubWluWU9mZnNldCA9IHRvcCArIGxv
d2VyVGFyZ2V0Lm9mZnNldEhlaWdodCAtIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7CisgICAgd2lu
ZG93Lm1heFlPZmZzZXQgPSB0b3A7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxUb3Ag
Pj0gbWluWU9mZnNldCIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxU
b3AgPD0gbWF4WU9mZnNldCIsICJ0cnVlIik7CisKKyAgICAvLyBTY3JvbGwgdG8gbWFrZSB1cHBl
ciB0YXJnZXQgdmlzaWJsZSBhbmQgY2hlY2suCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikKKyAgICAgICAgdXBwZXJUYXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRv
TWFrZVZpc2libGUoKTsKKyAgICB0b3AgPSB1cHBlclRhcmdldC5vZmZzZXRUb3AgLSBjb250YWlu
ZXIub2Zmc2V0VG9wOworICAgIHdpbmRvdy5taW5ZT2Zmc2V0ID0gdG9wICsgdXBwZXJUYXJnZXQu
b2Zmc2V0SGVpZ2h0IC0gY29udGFpbmVyLm9mZnNldEhlaWdodDsKKyAgICB3aW5kb3cubWF4WU9m
ZnNldCA9IHRvcDsKKyAgICBzaG91bGRCZSgiY29udGFpbmVyLnNjcm9sbFRvcCA+PSBtaW5ZT2Zm
c2V0IiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgiY29udGFpbmVyLnNjcm9sbFRvcCA8PSBtYXhZ
T2Zmc2V0IiwgInRydWUiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitydW5UZXN0KCk7
CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2li
bGUtaWZyYW1lLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1pZnJhbWUtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUgQEAKK1Rlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1ha2Ug
YW4gZWxlbWVudCB2aXNpYmxlIHN1Y2Nlc3NmdWxseSBzY3JvbGxzIGFuIGlmcmFtZS4KKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKworUEFTUyBmcmFtZVdpbmRvdy5wYWdlWU9mZnNl
dCBpcyAwCitQQVNTIGZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0ID49IG1pbllPZmZzZXQgaXMgdHJ1
ZQorUEFTUyBmcmFtZVdpbmRvdy5wYWdlWU9mZnNldCA8PSBtYXhZT2Zmc2V0IGlzIHRydWUKK1BB
U1MgZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQgPj0gbWluWU9mZnNldCBpcyB0cnVlCitQQVNTIGZy
YW1lV2luZG93LnBhZ2VZT2Zmc2V0IDw9IG1heFlPZmZzZXQgaXMgdHJ1ZQorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1pZnJhbWUuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUt
aWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Nj
cm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48
L3A+CisKKzxpZnJhbWUgaWQ9ImZyYW1lIiBzcmM9ImRhdGE6dGV4dC9odG1sLDxib2R5PjxidXR0
b24gaWQ9J3VwcGVyX3RhcmdldCc+VXBwZXIgVGFyZ2V0PC9idXR0b24+PGRpdiBzdHlsZT0nYm9y
ZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2
PjxidXR0b24gaWQ9J2xvd2VyX3RhcmdldCc+TG93ZXIgVGFyZ2V0PC9idXR0b24+PC9ib2R5PiI+
PC9pZnJhbWU+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1ha2UgYW4gZWxlbWVudCB2aXNpYmxlIHN1
Y2Nlc3NmdWxseSBzY3JvbGxzIGFuIGlmcmFtZS4iKTsKKworaWYgKHdpbmRvdy50ZXN0UnVubmVy
KQorICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKword2luZG93LmpzVGVzdElz
QXN5bmMgPSB0cnVlOworCitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIHdpbmRvdy5mcmFtZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmcmFtZSIpOworICAgIHdpbmRvdy5mcmFtZVdpbmRv
dyA9IGZyYW1lLmNvbnRlbnRXaW5kb3c7CisgICAgd2luZG93LmZyYW1lRG9jID0gZnJhbWVXaW5k
b3cuZG9jdW1lbnQ7CisKKyAgICB2YXIgdXBwZXJUYXJnZXQgPSBmcmFtZURvYy5nZXRFbGVtZW50
QnlJZCgidXBwZXJfdGFyZ2V0Iik7CisgICAgdmFyIGxvd2VyVGFyZ2V0ID0gZnJhbWVEb2MuZ2V0
RWxlbWVudEJ5SWQoImxvd2VyX3RhcmdldCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmls
aXR5Q29udHJvbGxlcikgeworICAgICAgICBsb3dlclRhcmdldC5mb2N1cygpOworICAgICAgICB2
YXIgbG93ZXJUYXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
Zm9jdXNlZEVsZW1lbnQ7CisgICAgICAgIHVwcGVyVGFyZ2V0LmZvY3VzKCk7CisgICAgICAgIHZh
ciB1cHBlclRhcmdldEFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5m
b2N1c2VkRWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwg
cG9zaXRpb24gKHNpbmNlIGNhbGxpbmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbyku
CisgICAgZnJhbWVXaW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisgICAgc2hvdWxkQmUoImZyYW1lV2lu
ZG93LnBhZ2VZT2Zmc2V0IiwgIjAiKTsKKworICAgIC8vIFNjcm9sbCB0byBtYWtlIGxvd2VyIHRh
cmdldCB2aXNpYmxlIGFuZCBjaGVjay4KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKQorICAgICAgICBsb3dlclRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9NYWtl
VmlzaWJsZSgpOworICAgIHdpbmRvdy5taW5ZT2Zmc2V0ID0gbG93ZXJUYXJnZXQub2Zmc2V0VG9w
ICsgbG93ZXJUYXJnZXQub2Zmc2V0SGVpZ2h0IC0gZnJhbWVXaW5kb3cuaW5uZXJIZWlnaHQ7Cisg
ICAgd2luZG93Lm1heFlPZmZzZXQgPSBsb3dlclRhcmdldC5vZmZzZXRUb3A7CisgICAgc2hvdWxk
QmUoImZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0ID49IG1pbllPZmZzZXQiLCAidHJ1ZSIpOworICAg
IHNob3VsZEJlKCJmcmFtZVdpbmRvdy5wYWdlWU9mZnNldCA8PSBtYXhZT2Zmc2V0IiwgInRydWUi
KTsKKworICAgIC8vIFNjcm9sbCB0byBtYWtlIHVwcGVyIHRhcmdldCB2aXNpYmxlIGFuZCBjaGVj
ay4KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB1cHBl
clRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAgIHdpbmRv
dy5taW5ZT2Zmc2V0ID0gdXBwZXJUYXJnZXQub2Zmc2V0VG9wICsgdXBwZXJUYXJnZXQub2Zmc2V0
SGVpZ2h0IC0gZnJhbWVXaW5kb3cuaW5uZXJIZWlnaHQ7CisgICAgd2luZG93Lm1heFlPZmZzZXQg
PSB1cHBlclRhcmdldC5vZmZzZXRUb3A7CisgICAgc2hvdWxkQmUoImZyYW1lV2luZG93LnBhZ2VZ
T2Zmc2V0ID49IG1pbllPZmZzZXQiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJmcmFtZVdpbmRv
dy5wYWdlWU9mZnNldCA8PSBtYXhZT2Zmc2V0IiwgInRydWUiKTsKKworICAgIGZpbmlzaEpTVGVz
dCgpOworfQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgewor
ICAgIHNldFRpbWVvdXQocnVuVGVzdCwgMTApOworfSwgZmFsc2UpOworCis8L3NjcmlwdD4KKwor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwt
dG8tbWFrZS12aXNpYmxlLW5lc3RlZC0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLTItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3Jv
bGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE4IEBACitUZXN0cyB0aGF0IHNjcm9sbGluZyB0byBtYWtlIGFuIGVsZW1lbnQg
dmlzaWJsZSB3b3JrcyB3aGVuIHRoZSBpbm5lciBzY3JvbGwgY29udGFpbmVyIGRvZXNuJ3QgbmVl
ZCB0byBiZSBzY3JvbGxlZCwgYnV0IHRoZSBvdGhlciBvbmUgZG9lcy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKKzUwMDAtcGl4ZWwgYm94CitUYXJnZXQgVGFyZ2V0IFRhcmdldAor
NTAwMC1waXhlbCBib3gKK1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAKK1BBU1MgY29udGFp
bmVyLnNjcm9sbFRvcCBpcyAwCitQQVNTIHRhcmdldDEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
dG9wIGlzID49IDUwMDAKK1BBU1Mgd2luZG93LmlubmVySGVpZ2h0IGlzID49IHRhcmdldDIuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tCitQQVNTIHRhcmdldDJ0b3AgaXMgdGFyZ2V0Mi5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AKK1BBU1MgdGFyZ2V0MnRvcCBpcyB0YXJnZXQyLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12
aXNpYmxlLW5lc3RlZC0yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisKKzxkaXYg
aWQ9ImNvbnRhaW5lciIgc3R5bGU9IndpZHRoOiAxMDBweDsgb3ZlcmZsb3c6IHNjcm9sbCI+Cisg
IDxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IHdpZHRoOiAxMDAwcHg7IGhlaWdo
dDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKyAgPGJ1dHRvbiBpZD0idGFyZ2V0MSI+
VGFyZ2V0PC9idXR0b24+CisgIDxidXR0b24gaWQ9InRhcmdldDIiPlRhcmdldDwvYnV0dG9uPgor
ICA8YnV0dG9uIGlkPSJ0YXJnZXQzIj5UYXJnZXQ8L2J1dHRvbj4KKyAgPGRpdiBzdHlsZT0iYm9y
ZGVyOiAxcHggc29saWQgIzAwMDsgd2lkdGg6IDEwMDBweDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAw
LXBpeGVsIGJveDwvZGl2PgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8
c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1ha2UgYW4gZWxl
bWVudCB2aXNpYmxlIHdvcmtzIHdoZW4gdGhlIGlubmVyIHNjcm9sbCBjb250YWluZXIgZG9lc24n
dCBuZWVkIHRvIGJlIHNjcm9sbGVkLCBidXQgdGhlIG90aGVyIG9uZSBkb2VzLiIpOworCitmdW5j
dGlvbiBydW5UZXN0KCkgeworICAgIHdpbmRvdy5jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgiY29udGFpbmVyIik7CisgICAgd2luZG93LnRhcmdldDEgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgidGFyZ2V0MSIpOworICAgIHdpbmRvdy50YXJnZXQyID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoInRhcmdldDIiKTsKKyAgICB3aW5kb3cudGFyZ2V0MyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJ0YXJnZXQzIik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKSB7CisgICAgICAgIHRhcmdldDEuZm9jdXMoKTsKKyAgICAgICAgdmFyIHRhcmdl
dDFBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1l
bnQ7CisgICAgICAgIHRhcmdldDIuZm9jdXMoKTsKKyAgICAgICAgdmFyIHRhcmdldDJBY2Nlc3Np
YmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAg
ICAgIHRhcmdldDMuZm9jdXMoKTsKKyAgICAgICAgdmFyIHRhcmdldDNBY2Nlc3NpYmxlT2JqZWN0
ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAg
Ly8gUmVzZXQgdGhlIGluaXRpYWwgc2Nyb2xsIHBvc2l0aW9ucyAoc2luY2UgY2FsbGluZyBmb2N1
cygpIGNhbiBzY3JvbGwgdGhlIHBhZ2UgdG9vKS4KKyAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7
CisgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IDA7CisgICAgc2hvdWxkQmUoIndpbmRvdy5wYWdl
WU9mZnNldCIsICIwIik7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxUb3AiLCAiMCIp
OworICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJ0YXJnZXQxLmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLnRvcCIsICI1MDAwIik7CisKKyAgICAvLyBTY3JvbGwgdG8gbWFrZSB0aGUgbWlk
ZGxlIHRhcmdldCB2aXNpYmxlLgorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIpCisgICAgICAgIHRhcmdldDJBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvTWFrZVZpc2libGUo
KTsKKworICAgIC8vIEluc3RlYWQgb2YgdGVzdGluZyB0aGUgZXhhY3Qgc2Nyb2xsIG9mZnNldHMg
b2YgdGhlIHR3byBjb250YWluZXJzLCBqdXN0IHRlc3QgdGhhdAorICAgIC8vIHRoZSBuZXcgYWJz
b2x1dGUgcG9zaXRpb24gb2YgdGhlIHRhcmdldCBpcyBvbi1zY3JlZW4uCisgICAgc2hvdWxkQmVH
cmVhdGVyVGhhbk9yRXF1YWwoIndpbmRvdy5pbm5lckhlaWdodCIsICJ0YXJnZXQyLmdldEJvdW5k
aW5nQ2xpZW50UmVjdCgpLmJvdHRvbSIpOworCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgY2FsbGlu
ZyBzY3JvbGxUb01ha2VWaXNpYmxlIG9uIHRhcmdldDEgYW5kIHRhcmdldDMgZG9uJ3QgcmVzdWx0
IGluIGFueQorICAgIC8vIHNjcm9sbGluZywgYmVjYXVzZSB0aGV5IHNob3VsZCBhbHJlYWR5IGJl
IHdpdGhpbiB0aGUgdmlld3BvcnQuCisgICAgd2luZG93LnRhcmdldDJ0b3AgPSB0YXJnZXQyLmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDsKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlD
b250cm9sbGVyKQorICAgICAgICB0YXJnZXQxQWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb01ha2VW
aXNpYmxlKCk7CisgICAgc2hvdWxkQmUoInRhcmdldDJ0b3AiLCAidGFyZ2V0Mi5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AiKTsKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKQorICAgICAgICB0YXJnZXQzQWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb01ha2VWaXNpYmxl
KCk7CisgICAgc2hvdWxkQmUoInRhcmdldDJ0b3AiLCAidGFyZ2V0Mi5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKS50b3AiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitydW5UZXN0KCk7CisK
Kzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUt
bmVzdGVkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK1Rlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1ha2UgYW4g
ZWxlbWVudCB2aXNpYmxlIHN1Y2Nlc3NmdWxseSBzY3JvbGxzIG11bHRpcGxlIG5lc3RlZCBzY3Jv
bGxpbmcgdmlld3MnLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworNTAwMC1waXhl
bCBib3gKKzUwMDAtcGl4ZWwgYm94Cis1MDAwLXBpeGVsIGJveAorVGFyZ2V0CitQQVNTIHdpbmRv
dy5wYWdlWU9mZnNldCBpcyAwCitQQVNTIG91dGVyQ29udGFpbmVyLnNjcm9sbFRvcCBpcyAwCitQ
QVNTIGlubmVyQ29udGFpbmVyLnNjcm9sbFRvcCBpcyAwCitQQVNTIHRhcmdldC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AgaXMgPj0gMTUwMDAKK1BBU1Mgd2luZG93LmlubmVySGVpZ2h0IGlz
ID49IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5l
c3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3Jv
bGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTkgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9w
PgorCis8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsi
PjUwMDAtcGl4ZWwgYm94PC9kaXY+CisKKzxkaXYgaWQ9Im91dGVyX2NvbnRhaW5lciIgc3R5bGU9
ImhlaWdodDogMTAwcHg7IG92ZXJmbG93OiBzY3JvbGwiPgorICA8ZGl2IHN0eWxlPSJib3JkZXI6
IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+Cisg
IDxkaXYgaWQ9ImlubmVyX2NvbnRhaW5lciIgc3R5bGU9ImhlaWdodDogMTAwcHg7IG92ZXJmbG93
OiBzY3JvbGwiPgorICAgIDxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdo
dDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKyAgICA8YnV0dG9uIGlkPSJ0YXJnZXQi
PlRhcmdldDwvYnV0dG9uPgorICA8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGlkPSJjb25zb2xlIj48
L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHNjcm9sbGluZyB0byBt
YWtlIGFuIGVsZW1lbnQgdmlzaWJsZSBzdWNjZXNzZnVsbHkgc2Nyb2xscyBtdWx0aXBsZSBuZXN0
ZWQgc2Nyb2xsaW5nIHZpZXdzJy4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB3aW5k
b3cub3V0ZXJDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0ZXJfY29udGFp
bmVyIik7CisgICAgd2luZG93LmlubmVyQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImlubmVyX2NvbnRhaW5lciIpOworICAgIHdpbmRvdy50YXJnZXQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgidGFyZ2V0Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250
cm9sbGVyKSB7CisgICAgICAgIHRhcmdldC5mb2N1cygpOworICAgICAgICB2YXIgdGFyZ2V0QWNj
ZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50Owor
ICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbnMgKHNpbmNl
IGNhbGxpbmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbykuCisgICAgd2luZG93LnNj
cm9sbFRvKDAsIDApOworICAgIG91dGVyQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7CisgICAgaW5u
ZXJDb250YWluZXIuc2Nyb2xsVG9wID0gMDsKKyAgICBzaG91bGRCZSgid2luZG93LnBhZ2VZT2Zm
c2V0IiwgIjAiKTsKKyAgICBzaG91bGRCZSgib3V0ZXJDb250YWluZXIuc2Nyb2xsVG9wIiwgIjAi
KTsKKyAgICBzaG91bGRCZSgiaW5uZXJDb250YWluZXIuc2Nyb2xsVG9wIiwgIjAiKTsKKyAgICBz
aG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgp
LnRvcCIsICIxNTAwMCIpOworCisgICAgLy8gU2Nyb2xsIHRvIG1ha2UgdGFyZ2V0IHZpc2libGUu
CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0
QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisKKyAgICAvLyBJbnN0ZWFk
IG9mIHRlc3RpbmcgdGhlIGV4YWN0IHNjcm9sbCBvZmZzZXRzIG9mIHRoZSB0d28gY29udGFpbmVy
cywganVzdCB0ZXN0IHRoYXQKKyAgICAvLyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uIG9mIHRo
ZSB0YXJnZXQgaXMgb24tc2NyZWVuLgorICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJ3
aW5kb3cuaW5uZXJIZWlnaHQiLCAidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRv
bSIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+
CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLW1ha2UtdmlzaWJsZS13aXRoLXN1YmZvY3VzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0
aC1zdWJmb2N1cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1cy1leHBlY3RlZC50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorVGVzdHMgdGhhdCBzY3JvbGxpbmcg
dG8gbWFrZSBhIGNlcnRhaW4gcmVnaW9uIHdpdGhpbiBhbiBlbGVtZW50IHZpc2libGUgc3VjY2Vz
c2Z1bGx5IHNjcm9sbHMgdGhlIG1haW4gd2luZG93LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworNTAwMC1waXhlbCBib3gKK1RhcmdldAorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQg
aXMgMAorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQgPj0gbWluWU9mZnNldCBpcyB0cnVlCitQQVNT
IHdpbmRvdy5wYWdlWU9mZnNldCA8PSBtYXhZT2Zmc2V0IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1cy5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Utdmlz
aWJsZS13aXRoLXN1YmZvY3VzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1cy5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxw
IGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAj
MDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+Cis8YnV0dG9uIGlkPSJ0
YXJnZXQiIHN0eWxlPSJoZWlnaHQ6IDUwMDBweDsiPlRhcmdldDwvYnV0dG9uPgorCis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHNj
cm9sbGluZyB0byBtYWtlIGEgY2VydGFpbiByZWdpb24gd2l0aGluIGFuIGVsZW1lbnQgdmlzaWJs
ZSBzdWNjZXNzZnVsbHkgc2Nyb2xscyB0aGUgbWFpbiB3aW5kb3cuIik7CisKK2Z1bmN0aW9uIHJ1
blRlc3QoKSB7CisgICAgdmFyIHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJn
ZXQiKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAg
ICAgdGFyZ2V0LmZvY3VzKCk7CisgICAgICAgIHZhciB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0g
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAgLy8g
UmVzZXQgdGhlIGluaXRpYWwgc2Nyb2xsIHBvc2l0aW9uIChzaW5jZSBjYWxsaW5nIGZvY3VzKCkg
Y2FuIHNjcm9sbCB0aGUgcGFnZSB0b28pLgorICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAg
ICBzaG91bGRCZSgid2luZG93LnBhZ2VZT2Zmc2V0IiwgIjAiKTsKKworICAgIC8vIFNjcm9sbCB0
byBtYWtlIHRoZSBtaWRwb2ludCBvZiB0aGUgdGFyZ2V0IHZpc2libGUgYW5kIGNoZWNrLgorICAg
IGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vz
c2libGVPYmplY3Quc2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cygwLCAyNTAwLCAxMDAs
IDI2MDApOworICAgIHdpbmRvdy5taW5ZT2Zmc2V0ID0gdGFyZ2V0Lm9mZnNldFRvcCArIDI1MDAg
LSB3aW5kb3cuaW5uZXJIZWlnaHQ7CisgICAgd2luZG93Lm1heFlPZmZzZXQgPSB0YXJnZXQub2Zm
c2V0VG9wICsgMjUwMDsKKyAgICBzaG91bGRCZSgid2luZG93LnBhZ2VZT2Zmc2V0ID49IG1pbllP
ZmZzZXQiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJ3aW5kb3cucGFnZVlPZmZzZXQgPD0gbWF4
WU9mZnNldCIsICJ0cnVlIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKworcnVuVGVzdCgp
OworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259433</attachid>
            <date>2015-08-19 17:20:40 -0700</date>
            <delta_ts>2015-08-20 08:49:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>55395</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODY2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE1LTA4LTE5ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFdoZW4gbmF2aWdh
dGluZyB0aGUgZWxlbWVudHMgb2YgYSBzY3JvbGxhYmxlIGVsZW1lbnQgd2l0aCBWb2ljZU92ZXIs
IHRoZSBzY3JvbGxUb3AoKSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBwZXJtYW5l
bnRseSBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNTcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBzY3JvbGxUb1Zpc2libGUgY29kZSBkaWQgbm90IGFjY291bnQgZm9yIHNjcm9sbGFi
bGUgZWxlbWVudHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlaXIgdmlld3BvcnRzLgorICAgICAg
ICBGaXJzdCwgd2UgbmVlZCB0byBwYXNzIHRoZSBzdWItZm9jdXMgdXAgdGhlIHNjcm9sbCBjaGFp
biAob3RoZXJ3aXNlIHdlJ2xsIHNjcm9sbCBzb21lIHBhcmVudCB0byB5PTApLgorICAgICAgICBT
ZWNvbmQsIHdlIHNob3VsZCB0cnkgdG8gY2VudGVyIHRoZSBmb2N1cyB3aXRoaW4gdGhlIHZpZXdw
b3J0LCByYXRoZXIgdGhhbiBwb3NpdGlvbmluZyBhdCB0aGUgYm90dG9tIGZvciBhIAorICAgICAg
ICBiZXR0ZXIgZXhwZXJpZW5jZS4KKworICAgICAgICBUaGlzIGNoYW5nZSB3YXMgYWRhcHRlZCBm
cm9tIEJsaW5rIHIxODM5MjY6CisgICAgICAgIGh0dHBzOi8vc3JjLmNocm9taXVtLm9yZy92aWV3
dmMvYmxpbms/dmlldz1yZXYmcmV2aXNpb249MTgzOTI2CisKKyAgICAgICAgVGVzdHM6IGFjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLmh0bWwKKyAgICAg
ICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUuaHRt
bAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1h
aW4td2luZG93Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWds
b2JhbC1wb2ludC1uZXN0ZWQuaHRtbAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS9zY3Jv
bGwtdG8tbWFrZS12aXNpYmxlLWRpdi1vdmVyZmxvdy5odG1sCisgICAgICAgICAgICAgICBhY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLmh0bWwKKyAgICAgICAgICAg
ICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi5odG1sCisg
ICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVk
Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJs
ZS13aXRoLXN1YmZvY3VzLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQmVzdFNjcm9sbE9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc09uc2NyZWVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbFRvTWFrZVZpc2li
bGVXaXRoU3ViRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
c2Nyb2xsVG9HbG9iYWxQb2ludCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTY3JvbGxUb1Zpc2libGVdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlTY3JvbGxUb01h
a2VWaXNpYmxlV2l0aFN1YkZvY3VzOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0
aW9uOl0pOgorCiAyMDE1LTA4LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgQXZvaWQgZG91YmxlIGhhc2ggbG9va3VwIGluIG91ciBKUyBiaW5kaW5ncyBuYW1l
ZCBwcm9wZXJ0eSBnZXR0ZXIgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHJldmlzaW9uIDE4ODU1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzIxLDYgKzMzMjEsMTYgQEAKICAgICBtX29iamVjdC0+c2Nyb2xsVG9NYWtlVmlz
aWJsZSgpOwogfQogCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9NYWtlVmlzaWJsZVdp
dGhTdWJGb2N1czooTlNSZWN0KXJlY3QKK3sKKyAgICBtX29iamVjdC0+c2Nyb2xsVG9NYWtlVmlz
aWJsZVdpdGhTdWJGb2N1cyhJbnRSZWN0KHJlY3QpKTsKK30KKworLSAodm9pZClfYWNjZXNzaWJp
bGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBtX29iamVjdC0+
c2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludChwb2ludCkpOworfQorCiAtICh2b2lkKWFjY2Vz
c2liaWxpdHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyopYWN0aW9uCiB7CiAgICAgaWYgKCFbc2Vs
ZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxODc3
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMxLDY3ICsyMzMxLDkyIEBACiAvLyBsb2dpYyBpcyB0
aGUgc2FtZS4gVGhlIGdvYWwgaXMgdG8gY29tcHV0ZSB0aGUgYmVzdCBzY3JvbGwgb2Zmc2V0CiAv
LyBpbiBvcmRlciB0byBtYWtlIGFuIG9iamVjdCB2aXNpYmxlIHdpdGhpbiBhIHZpZXdwb3J0Lgog
Ly8KKy8vIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBmdWxseSB2aXNpYmxlLCByZXR1cm5zIHRo
ZSBzYW1lIHNjcm9sbAorLy8gb2Zmc2V0LgorLy8KIC8vIEluIGNhc2UgdGhlIHdob2xlIG9iamVj
dCBjYW5ub3QgZml0LCB5b3UgY2FuIHNwZWNpZnkgYQogLy8gc3ViZm9jdXMgLSBhIHNtYWxsZXIg
cmVnaW9uIHdpdGhpbiB0aGUgb2JqZWN0IHRoYXQgc2hvdWxkCiAvLyBiZSBwcmlvcml0aXplZC4g
SWYgdGhlIHdob2xlIG9iamVjdCBjYW4gZml0LCB0aGUgc3ViZm9jdXMgaXMKIC8vIGlnbm9yZWQu
CiAvLwotLy8gRXhhbXBsZTogdGhlIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHRoZSByaWdodCBq
dXN0IGVub3VnaAotLy8gdGhhdCB0aGUgb2JqZWN0IGlzIGluIHZpZXcuCisvLyBJZiBwb3NzaWJs
ZSwgdGhlIG9iamVjdCBhbmQgc3ViZm9jdXMgYXJlIGNlbnRlcmVkIHdpdGhpbiB0aGUKKy8vIHZp
ZXdwb3J0LgorLy8KKy8vIEV4YW1wbGUgMTogdGhlIG9iamVjdCBpcyBhbHJlYWR5IHZpc2libGUs
IHNvIG5vdGhpbmcgaGFwcGVucy4KKy8vICAgKy0tLS0tLS0tLS1WaWV3cG9ydC0tLS0tLS0tLSsK
Ky8vICAgICAgICAgICAgICAgICArLS0tT2JqZWN0LS0tKworLy8gICAgICAgICAgICAgICAgICst
LVN1YkZvY3VzLS0rCisvLworLy8gRXhhbXBsZSAyOiB0aGUgb2JqZWN0IGlzIG5vdCBmdWxseSB2
aXNpYmxlLCBzbyBpdCdzIGNlbnRlcmVkCisvLyB3aXRoaW4gdGhlIHZpZXdwb3J0LgogLy8gICBC
ZWZvcmU6CiAvLyAgICstLS0tLS0tLS0tVmlld3BvcnQtLS0tLS0tLS0rCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICArLS0tT2JqZWN0LS0tKwogLy8gICAgICAgICAgICAgICAgICAgICAgICAg
Ky0tU3ViRm9jdXMtLSsKIC8vCiAvLyAgIEFmdGVyOgotLy8gICAgICAgICAgKy0tLS0tLS0tLS1W
aWV3cG9ydC0tLS0tLS0tLSsKKy8vICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLVZpZXdwb3J0
LS0tLS0tLS0tKwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLU9iamVjdC0tLSsKIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICstLVN1YkZvY3VzLS0rCiAvLworLy8gRXhhbXBsZSAz
OiB0aGUgb2JqZWN0IGlzIGxhcmdlciB0aGFuIHRoZSB2aWV3cG9ydCwgc28gdGhlCisvLyB2aWV3
cG9ydCBtb3ZlcyB0byBzaG93IGFzIG11Y2ggb2YgdGhlIG9iamVjdCBhcyBwb3NzaWJsZSwKKy8v
IHdoaWxlIGFsc28gdHJ5aW5nIHRvIGNlbnRlciB0aGUgc3ViZm9jdXMuCisvLyAgIEJlZm9yZToK
Ky8vICAgKy0tLS0tLS0tLS1WaWV3cG9ydC0tLS0tLS0tLSsKKy8vICAgICArLS0tLS0tLS0tLS0t
LS0tT2JqZWN0LS0tLS0tLS0tLS0tLS0rCisvLyAgICAgICAgICAgICAgICAgICAgICAgICArLVN1
YkZvY3VzLSsKKy8vCisvLyAgIEFmdGVyOgorLy8gICAgICAgICAgICAgKy0tLS0tLS0tLS1WaWV3
cG9ydC0tLS0tLS0tLSsKKy8vICAgICArLS0tLS0tLS0tLS0tLS0tT2JqZWN0LS0tLS0tLS0tLS0t
LS0rCisvLyAgICAgICAgICAgICAgICAgICAgICAgICArLVN1YkZvY3VzLSsKKy8vCiAvLyBXaGVu
IGNvbnN0cmFpbnRzIGNhbm5vdCBiZSBmdWxseSBzYXRpc2ZpZWQsIHRoZSBtaW4KIC8vIChsZWZ0
L3RvcCkgcG9zaXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBtYXggKHJpZ2h0L2JvdHRv
bSkuCiAvLwogLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgcmVwcmVzZW50cyB0aGUgaWRl
YWwgbmV3IHNjcm9sbCBvZmZzZXQuCiAvLyBUaGlzIG1heSBiZSBvdXQgb2YgcmFuZ2UgLSB0aGUg
Y2FsbGluZyBmdW5jdGlvbiBzaG91bGQgY2xpcCB0aGlzCiAvLyB0byB0aGUgYXZhaWxhYmxlIHJh
bmdlLgotc3RhdGljIGludCBjb21wdXRlQmVzdFNjcm9sbE9mZnNldChpbnQgY3VycmVudFNjcm9s
bE9mZnNldCwgaW50IHN1YmZvY3VzTWluLCBpbnQgb2JqZWN0TWluLCBpbnQgb2JqZWN0TWF4LCBp
bnQgdmlld3BvcnRNaW4sIGludCB2aWV3cG9ydE1heCkKK3N0YXRpYyBpbnQgY29tcHV0ZUJlc3RT
Y3JvbGxPZmZzZXQoaW50IGN1cnJlbnRTY3JvbGxPZmZzZXQsIGludCBzdWJmb2N1c01pbiwgaW50
IHN1YmZvY3VzTWF4LCBpbnQgb2JqZWN0TWluLCBpbnQgb2JqZWN0TWF4LCBpbnQgdmlld3BvcnRN
aW4sIGludCB2aWV3cG9ydE1heCkKIHsKICAgICBpbnQgdmlld3BvcnRTaXplID0gdmlld3BvcnRN
YXggLSB2aWV3cG9ydE1pbjsKLQotICAgIC8vIElmIHRoZSBmb2N1cyBzaXplIGlzIGxhcmdlciB0
aGFuIHRoZSB2aWV3cG9ydCBzaXplLCBzaHJpbmsgaXQgaW4gdGhlCi0gICAgLy8gZGlyZWN0aW9u
IG9mIHN1YmZvY3VzLgorICAgIAorICAgIC8vIElmIHRoZSBvYmplY3Qgc2l6ZSBpcyBsYXJnZXIg
dGhhbiB0aGUgdmlld3BvcnQgc2l6ZSwgY29uc2lkZXIKKyAgICAvLyBvbmx5IGEgcG9ydGlvbiB0
aGF0J3MgYXMgbGFyZ2UgYXMgdGhlIHZpZXdwb3J0LCBjZW50ZXJpbmcgb24KKyAgICAvLyB0aGUg
c3ViZm9jdXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KICAgICBpZiAob2JqZWN0TWF4IC0gb2JqZWN0
TWluID4gdmlld3BvcnRTaXplKSB7Ci0gICAgICAgIC8vIFN1YmZvY3VzIG11c3QgYmUgd2l0aGlu
IGZvY3VzOgorICAgICAgICAvLyBTaW5jZSBpdCdzIGltcG9zc2libGUgdG8gZml0IHRoZSB3aG9s
ZSBvYmplY3QgaW4gdGhlCisgICAgICAgIC8vIHZpZXdwb3J0LCBleGl0IG5vdyBpZiB0aGUgc3Vi
Zm9jdXMgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIHZpZXdwb3J0LgorICAgICAgICBpZiAoc3ViZm9j
dXNNaW4gLSBjdXJyZW50U2Nyb2xsT2Zmc2V0ID49IHZpZXdwb3J0TWluCisgICAgICAgICAgICAm
JiBzdWJmb2N1c01heCAtIGN1cnJlbnRTY3JvbGxPZmZzZXQgPD0gdmlld3BvcnRNYXgpCisgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbE9mZnNldDsKKyAgICAgICAgCisgICAgICAgIC8v
IFN1YmZvY3VzIG11c3QgYmUgd2l0aGluIGZvY3VzLgogICAgICAgICBzdWJmb2N1c01pbiA9IHN0
ZDo6bWF4KHN1YmZvY3VzTWluLCBvYmplY3RNaW4pOworICAgICAgICBzdWJmb2N1c01heCA9IHN0
ZDo6bWluKHN1YmZvY3VzTWF4LCBvYmplY3RNYXgpOworICAgICAgICAKKyAgICAgICAgLy8gU3Vi
Zm9jdXMgbXVzdCBiZSBubyBsYXJnZXIgdGhhbiB0aGUgdmlld3BvcnQgc2l6ZTsgZmF2b3IgdG9w
L2xlZnQuCisgICAgICAgIGlmIChzdWJmb2N1c01heCAtIHN1YmZvY3VzTWluID4gdmlld3BvcnRT
aXplKQorICAgICAgICAgICAgc3ViZm9jdXNNYXggPSBzdWJmb2N1c01pbiArIHZpZXdwb3J0U2l6
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGUgdGhlIHNpemUgb2YgYW4gb2JqZWN0IGNl
bnRlcmVkIG9uIHRoZSBzdWJmb2N1cywgdGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAg
ICBpbnQgY2VudGVyZWRPYmplY3RNaW4gPSAoc3ViZm9jdXNNaW4gKyBzdWJmb2N1c01heCAtIHZp
ZXdwb3J0U2l6ZSkgLyAyOworICAgICAgICBpbnQgY2VudGVyZWRPYmplY3RNYXggPSBjZW50ZXJl
ZE9iamVjdE1pbiArIHZpZXdwb3J0U2l6ZTsKIAotICAgICAgICAvLyBTdWJmb2N1cyBtdXN0IGJl
IG5vIGxhcmdlciB0aGFuIHRoZSB2aWV3cG9ydCBzaXplOyBmYXZvciB0b3AvbGVmdC4KLSAgICAg
ICAgaWYgKHN1YmZvY3VzTWluICsgdmlld3BvcnRTaXplID4gb2JqZWN0TWF4KQotICAgICAgICAg
ICAgb2JqZWN0TWluID0gb2JqZWN0TWF4IC0gdmlld3BvcnRTaXplOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIG9iamVjdE1pbiA9IHN1YmZvY3VzTWluOwotICAgICAgICAgICAgb2JqZWN0
TWF4ID0gc3ViZm9jdXNNaW4gKyB2aWV3cG9ydFNpemU7Ci0gICAgICAgIH0KKyAgICAgICAgb2Jq
ZWN0TWluID0gc3RkOjptYXgob2JqZWN0TWluLCBjZW50ZXJlZE9iamVjdE1pbik7CisgICAgICAg
IG9iamVjdE1heCA9IHN0ZDo6bWluKG9iamVjdE1heCwgY2VudGVyZWRPYmplY3RNYXgpOwogICAg
IH0KLQorICAgIAogICAgIC8vIEV4aXQgbm93IGlmIHRoZSBmb2N1cyBpcyBhbHJlYWR5IHdpdGhp
biB0aGUgdmlld3BvcnQuCiAgICAgaWYgKG9iamVjdE1pbiAtIGN1cnJlbnRTY3JvbGxPZmZzZXQg
Pj0gdmlld3BvcnRNaW4KICAgICAgICAgJiYgb2JqZWN0TWF4IC0gY3VycmVudFNjcm9sbE9mZnNl
dCA8PSB2aWV3cG9ydE1heCkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGxPZmZzZXQ7Ci0K
LSAgICAvLyBTY3JvbGwgbGVmdCBpZiB3ZSdyZSB0b28gZmFyIHRvIHRoZSByaWdodC4KLSAgICBp
ZiAob2JqZWN0TWF4IC0gY3VycmVudFNjcm9sbE9mZnNldCA+IHZpZXdwb3J0TWF4KQotICAgICAg
ICByZXR1cm4gb2JqZWN0TWF4IC0gdmlld3BvcnRNYXg7Ci0KLSAgICAvLyBTY3JvbGwgcmlnaHQg
aWYgd2UncmUgdG9vIGZhciB0byB0aGUgbGVmdC4KLSAgICBpZiAob2JqZWN0TWluIC0gY3VycmVu
dFNjcm9sbE9mZnNldCA8IHZpZXdwb3J0TWluKQotICAgICAgICByZXR1cm4gb2JqZWN0TWluIC0g
dmlld3BvcnRNaW47Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIC8vIFRoaXMg
c2hvdWxkbid0IGhhcHBlbi4KLSAgICByZXR1cm4gY3VycmVudFNjcm9sbE9mZnNldDsKKyAgICAK
KyAgICAvLyBDZW50ZXIgdGhlIG9iamVjdCBpbiB0aGUgdmlld3BvcnQuCisgICAgcmV0dXJuIChv
YmplY3RNaW4gKyBvYmplY3RNYXggLSB2aWV3cG9ydE1pbiAtIHZpZXdwb3J0TWF4KSAvIDI7CiB9
Ci0KKyAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNPbnNjcmVlbigpIGNvbnN0CiB7
ICAgCiAgICAgYm9vbCBpc09uc2NyZWVuID0gdHJ1ZTsKQEAgLTI0NDksMjIgKzI0NzQsMzQgQEAK
ICAgICAvLyBGSVhNRTogdW5jbGVhciBpZiB3ZSBuZWVkIExlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QuCiAgICAgSW50UmVjdCBzY3JvbGxWaXNpYmxlUmVjdCA9IHNjcm9sbGFibGVBcmVhLT52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOwogCisgICAgaWYgKCFzY3JvbGxQYXJlbnQtPmlzU2Nyb2xsVmlldygpKSB7CisgICAg
ICAgIG9iamVjdFJlY3QubW92ZUJ5KHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgb2JqZWN0UmVj
dC5tb3ZlQnkoLXNuYXBwZWRJbnRSZWN0KHNjcm9sbFBhcmVudC0+ZWxlbWVudFJlY3QoKSkubG9j
YXRpb24oKSk7CisgICAgfQorICAgIAogICAgIGludCBkZXNpcmVkWCA9IGNvbXB1dGVCZXN0U2Ny
b2xsT2Zmc2V0KAogICAgICAgICBzY3JvbGxQb3NpdGlvbi54KCksCi0gICAgICAgIG9iamVjdFJl
Y3QueCgpICsgc3ViZm9jdXMueCgpLAorICAgICAgICBvYmplY3RSZWN0LngoKSArIHN1YmZvY3Vz
LngoKSwgb2JqZWN0UmVjdC54KCkgKyBzdWJmb2N1cy5tYXhYKCksCiAgICAgICAgIG9iamVjdFJl
Y3QueCgpLCBvYmplY3RSZWN0Lm1heFgoKSwKICAgICAgICAgMCwgc2Nyb2xsVmlzaWJsZVJlY3Qu
d2lkdGgoKSk7CiAgICAgaW50IGRlc2lyZWRZID0gY29tcHV0ZUJlc3RTY3JvbGxPZmZzZXQoCiAg
ICAgICAgIHNjcm9sbFBvc2l0aW9uLnkoKSwKLSAgICAgICAgb2JqZWN0UmVjdC55KCkgKyBzdWJm
b2N1cy55KCksCisgICAgICAgIG9iamVjdFJlY3QueSgpICsgc3ViZm9jdXMueSgpLCBvYmplY3RS
ZWN0LnkoKSArIHN1YmZvY3VzLm1heFkoKSwKICAgICAgICAgb2JqZWN0UmVjdC55KCksIG9iamVj
dFJlY3QubWF4WSgpLAogICAgICAgICAwLCBzY3JvbGxWaXNpYmxlUmVjdC5oZWlnaHQoKSk7CiAK
ICAgICBzY3JvbGxQYXJlbnQtPnNjcm9sbFRvKEludFBvaW50KGRlc2lyZWRYLCBkZXNpcmVkWSkp
OwogCisgICAgLy8gQ29udmVydCB0aGUgc3ViZm9jdXMgaW50byB0aGUgY29vcmRpbmF0ZXMgb2Yg
dGhlIHNjcm9sbCBwYXJlbnQuCisgICAgSW50UmVjdCBuZXdTdWJmb2N1cyA9IHN1YmZvY3VzOwor
ICAgIEludFJlY3QgbmV3RWxlbWVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChlbGVtZW50UmVjdCgp
KTsKKyAgICBJbnRSZWN0IHNjcm9sbFBhcmVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChzY3JvbGxQ
YXJlbnQtPmVsZW1lbnRSZWN0KCkpOworICAgIG5ld1N1YmZvY3VzLm1vdmUobmV3RWxlbWVudFJl
Y3QueCgpLCBuZXdFbGVtZW50UmVjdC55KCkpOworICAgIG5ld1N1YmZvY3VzLm1vdmUoLXNjcm9s
bFBhcmVudFJlY3QueCgpLCAtc2Nyb2xsUGFyZW50UmVjdC55KCkpOworICAgIAogICAgIC8vIFJl
Y3Vyc2l2ZWx5IG1ha2Ugc3VyZSB0aGUgc2Nyb2xsIHBhcmVudCBpdHNlbGYgaXMgdmlzaWJsZS4K
ICAgICBpZiAoc2Nyb2xsUGFyZW50LT5wYXJlbnRPYmplY3QoKSkKLSAgICAgICAgc2Nyb2xsUGFy
ZW50LT5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgICAgIHNjcm9sbFBhcmVudC0+c2Nyb2xs
VG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhuZXdTdWJmb2N1cyk7CiB9CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6c2Nyb2xsVG9HbG9iYWxQb2ludChjb25zdCBJbnRQb2ludCYgZ2xvYmFs
UG9pbnQpIGNvbnN0CkBAIC0yNTAzLDEzICsyNTQwLDEzIEBACiAKICAgICAgICAgaW50IGRlc2ly
ZWRYID0gY29tcHV0ZUJlc3RTY3JvbGxPZmZzZXQoCiAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgb2JqZWN0UmVjdC54KCksCiAgICAgICAgICAgICBvYmplY3RSZWN0LngoKSwgb2JqZWN0UmVj
dC5tYXhYKCksCisgICAgICAgICAgICBvYmplY3RSZWN0LngoKSwgb2JqZWN0UmVjdC5tYXhYKCks
CiAgICAgICAgICAgICBwb2ludC54KCksIHBvaW50LngoKSk7CiAgICAgICAgIGludCBkZXNpcmVk
WSA9IGNvbXB1dGVCZXN0U2Nyb2xsT2Zmc2V0KAogICAgICAgICAgICAgMCwKLSAgICAgICAgICAg
IG9iamVjdFJlY3QueSgpLAogICAgICAgICAgICAgb2JqZWN0UmVjdC55KCksIG9iamVjdFJlY3Qu
bWF4WSgpLAorICAgICAgICAgICAgb2JqZWN0UmVjdC55KCksIG9iamVjdFJlY3QubWF4WSgpLAog
ICAgICAgICAgICAgcG9pbnQueSgpLCBwb2ludC55KCkpOwogICAgICAgICBvdXRlci0+c2Nyb2xs
VG8oSW50UG9pbnQoZGVzaXJlZFgsIGRlc2lyZWRZKSk7CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODY2MykKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA4LTE5
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFdo
ZW4gbmF2aWdhdGluZyB0aGUgZWxlbWVudHMgb2YgYSBzY3JvbGxhYmxlIGVsZW1lbnQgd2l0aCBW
b2ljZU92ZXIsIHRoZSBzY3JvbGxUb3AoKSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBkb2VzIG5v
dCBwZXJtYW5lbnRseSBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNTcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZv
Y3VzIGFuZCBzY3JvbGxUb0dsb2JhbFBvaW50LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6CisgICAgICAgIChwcmVzc0NhbGxiYWNrKToKKyAg
ICAgICAgKHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayk6CisgICAgICAg
IChzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2spOgorICAgICAgICAoc2Nyb2xsVG9NYWtlVmlz
aWJsZUNhbGxiYWNrKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldEpTQ2xh
c3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
SU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlz
aWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNp
YmxlV2l0aFN1YkZvY3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9s
bFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0
ZWRUZXh0UmFuZ2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXRo
UHJlc2NyaXB0c0Rlc2NyaXB0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNjcm9sbFRvTWFrZVZpc2libGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1RleHRNYXJrZXJWYWxpZCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJGb3JJbmRleCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlz
aWJsZVdpdGhTdWJGb2N1cyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN1cHBvcnRlZEFjdGlvbnMpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjptYXRoUG9zdHNjcmlwdHNEZXNjcmlwdGlvbik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om1hdGhQcmVzY3JpcHRzRGVzY3JpcHRpb24pOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZv
Y3VzKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0
UmFuZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKwog
MjAxNS0wOC0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEJ1aWxkIFRlc3RXVEYgb24gTWFjIHdpdGggQ01ha2UuCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24g
MTg4NjU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCw2ICs2OTAsMzIgQEAKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNjcm9sbFRv
TWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgdW5zaWduZWQgeCA9IDAsIHkgPSAwLCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gNCkgeworICAgICAgICB4ID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICAgICAgeSA9IEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgICAgIHdp
ZHRoID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgaGVpZ2h0ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1szXSwg
ZXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnNj
cm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIHVuc2lnbmVkIHggPSAwLCB5ID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA9PSAyKSB7CisgICAgICAgIHggPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pOworICAgICAgICB5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICB0b0FYRWxlbWVudCh0aGlzT2Jq
ZWN0KS0+c2Nyb2xsVG9HbG9iYWxQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIHNjcm9sbFRvTWFrZVZp
c2libGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgdG9BWEVs
ZW1lbnQodGhpc09iamVjdCktPnNjcm9sbFRvTWFrZVZpc2libGUoKTsKQEAgLTE3MDAsNiArMTcy
Niw4IEBACiAgICAgICAgIHsgInNldFNlbGVjdGVkVmlzaWJsZVRleHRSYW5nZSIsIHNldFNlbGVj
dGVkVmlzaWJsZVRleHRSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNlbGVjdGVk
Q2hpbGRBdEluZGV4Iiwgc2VsZWN0ZWRDaGlsZEF0SW5kZXhDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzY3JvbGxUb01ha2VWaXNpYmxlIiwgc2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInNjcm9sbFRvR2xvYmFsUG9pbnQiLCBzY3JvbGxUb0dsb2Jh
bFBvaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2Nyb2xsVG9NYWtlVmlzaWJsZVdp
dGhTdWJGb2N1cyIsIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICB7ICJjaGFy
YWN0ZXJBdE9mZnNldCIsIGNoYXJhY3RlckF0T2Zmc2V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAid29yZEF0T2Zmc2V0Iiwgd29yZEF0T2Zmc2V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50SU9TLm1tCShyZXZpc2lvbiAxODg2NTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9pb3Mv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjgwLDYgKzY4
MCwxNiBAQAogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBp
bnQgeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKIEpTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKIHsKICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lv
biAxODg2NTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOCBAQAogLSAoTlNVSW50ZWdl
cilhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOihpZCljaGlsZDsKIC0gKE5TVUludGVnZXIpYWNj
ZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6KE5TU3RyaW5nICopYXR0cmlidXRlOwogLSAo
dm9pZClfYWNjZXNzaWJpbGl0eVNldFRlc3RWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihO
U1N0cmluZyopYXR0cmlidXRlTmFtZTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTY3JvbGxUb01h
a2VWaXNpYmxlV2l0aFN1YkZvY3VzOihOU1JlY3QpcmVjdDsKKy0gKHZvaWQpX2FjY2Vzc2liaWxp
dHlTY3JvbGxUb0dsb2JhbFBvaW50OihOU1BvaW50KXBvaW50OwogQGVuZAogCiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQpCkBAIC0xODI3LDcgKzE4MjksNiBAQAogICAgIHJldHVybiBudWxscHRyOwogfQogCi0K
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCiB7CiAg
ICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCkBAIC0xODM3LDEwICsxODM4LDE0IEBACiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1
cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgW21fZWxlbWVudCBf
YWNjZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6TlNNYWtlUmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KV07CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGlu
dCB5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQ
VElPTlMKKyAgICBbbV9lbGVtZW50IF9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9iYWxQb2ludDpO
U01ha2VQb2ludCh4LCB5KV07CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODg2NTUpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNiArMjI0LDggQEAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNUZXh0TWFya2VyVmFsaWQoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKSB7
IHJldHVybiBmYWxzZTsgfQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlckZvckluZGV4KGludCkgeyByZXR1cm4gMDsg
fQogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkgeyB9
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50LCBp
bnQpIHsgfQordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxl
V2l0aFN1YkZvY3VzKGludCwgaW50LCBpbnQsIGludCkgeyB9CiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3VwcG9ydGVkQWN0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjptYXRoUG9zdHNjcmlwdHNEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXRoUHJlc2Ny
aXB0c0Rlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gMDsgfQpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmgJKHJldmlzaW9uIDE4ODY1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjUsNiArMjI1LDggQEAKICAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Q7CiAKICAgICB2b2lkIHNjcm9sbFRvTWFrZVZp
c2libGUoKTsKKyAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KTsKKyAg
ICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwogICAgIAogICAgIC8vIFRleHQgbWFya2Vycy4KICAgICBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+IGxpbmVUZXh0TWFya2VyUmFuZ2VG
b3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwJKHJldmlzaW9uIDE4ODY1NSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksOSBAQAog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IHZlcnRpY2FsU2Ny
b2xsYmFyOwogCiAgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgdm9pZCBzY3Jv
bGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSk7CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNp
YmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKwog
ICAgIHZvaWQgdGFrZUZvY3VzKCk7CiAgICAgYm9vbGVhbiBzY3JvbGxQYWdlRG93bigpOwogICAg
IGJvb2xlYW4gc2Nyb2xsUGFnZVVwKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0JKHJldmlzaW9uIDE4ODY1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0JKHdv
cmtpbmcgY29weSkKQEAgLTY5OSw2ICs2OTksMTQgQEAKIHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCiB7CiB9CisgICAgCit2b2lkIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KQoreworfQorICAg
IAordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1
YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworfQogCiBKU1Jl
dGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0
UmFuZ2UoKQogewpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9t
YWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFj
Lm1tCShyZXZpc2lvbiAxODg2NTUpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04MCw2ICs4MCw4IEBACiAtIChOU1VJbnRlZ2VyKWFjY2Vzc2liaWxpdHlJbmRleE9mQ2hpbGQ6
KGlkKWNoaWxkOwogLSAoTlNVSW50ZWdlcilhY2Nlc3NpYmlsaXR5QXJyYXlBdHRyaWJ1dGVDb3Vu
dDooTlNTdHJpbmcgKilhdHRyaWJ1dGU7CiAtICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2V0VGVzdFZh
bHVlOihpZCl2YWx1ZSBmb3JBdHRyaWJ1dGU6KE5TU3RyaW5nKilhdHRyaWJ1dGVOYW1lOworLSAo
dm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6KE5TUmVj
dClyZWN0OworLSAodm9pZClfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6KE5TUG9p
bnQpcG9pbnQ7CiBAZW5kCiAKIG5hbWVzcGFjZSBXVFIgewpAQCAtMTM2Nyw2ICsxMzY5LDIwIEBA
CiAgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQogICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSkKK3sKKyAgICBCRUdJ
Tl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBbbV9lbGVtZW50IF9hY2Nlc3NpYmlsaXR5U2Nyb2xs
VG9HbG9iYWxQb2ludDpOU01ha2VQb2ludCh4LCB5KV07CisgICAgRU5EX0FYX09CSkNfRVhDRVBU
SU9OUworfQorCit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2li
bGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7Cisg
ICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgW21fZWxlbWVudCBfYWNjZXNzaWJpbGl0
eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6TlNNYWtlUmVjdCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KV07CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworfQorCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0UmFuZ2UoKQog
ewogICAgIE5TUmFuZ2UgcmFuZ2UgPSBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE4ODY2MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDE1LTA4LTE5ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVp
emFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFdoZW4gbmF2aWdhdGluZyB0aGUgZWxlbWVu
dHMgb2YgYSBzY3JvbGxhYmxlIGVsZW1lbnQgd2l0aCBWb2ljZU92ZXIsIHRoZSBzY3JvbGxUb3Ao
KSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBwZXJtYW5lbnRseSBjaGFuZ2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNTcyMAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFtZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVz
dGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwt
dG8tZ2xvYmFsLXBvaW50LWlmcmFtZS1uZXN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogYWNj
ZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFtZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtbWFpbi13aW5kb3ct
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1n
bG9iYWwtcG9pbnQtbWFpbi13aW5kb3cuaHRtbDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW5lc3RlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1uZXN0ZWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxl
LWRpdi1vdmVyZmxvdy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1kaXYtb3ZlcmZsb3cuaHRtbDogQWRkZWQuCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWlmcmFtZS1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Utdmlz
aWJsZS1pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwt
dG8tbWFrZS12aXNpYmxlLW5lc3RlZC0yLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC0yLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1t
YWtlLXZpc2libGUtbmVzdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkv
c2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS13aXRoLXN1YmZvY3VzLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLXdpdGgtc3Vi
Zm9jdXMuaHRtbDogQWRkZWQuCisKIDIwMTUtMDgtMTkgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFw
cGxlLmNvbT4KIAogICAgICAgICBvdXRsaW5lLXN0eWxlOiBhdXRvIGxlYXZlcyBiaXRzIGJlaGlu
ZCBvbiBzdHJhdmEncyBmbHlieSB2aWV3LgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFtZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFt
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE3IEBACitUZXN0cyB0aGF0IHNjcm9sbGluZyB0byBtb3ZlIGFuIGVsZW1l
bnQgdG8gYSBzcGVjaWZpYyBwb2ludCBzdWNjZXNzZnVsbHkgc2Nyb2xscyBhbiBpZnJhbWUuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCis1MDAwLXBpeGVsIGJveAorCis1MDAwLXBp
eGVsIGJveAorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyBmcmFtZVdpbmRvdy5w
YWdlWU9mZnNldCBpcyAwCitQQVNTIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ag
aXMgMAorUEFTUyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDMwMAorUEFT
UyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDMwMDAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLW5lc3RlZC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwt
dG8tZ2xvYmFsLXBvaW50LWlmcmFtZS1uZXN0ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFt
ZS1uZXN0ZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK1Rl
c3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1vdmUgYW4gZWxlbWVudCB0byBhIHNwZWNpZmljIHBvaW50
IHN1Y2Nlc3NmdWxseSBzY3JvbGxzIGJvdGggYW4gaWZyYW1lIGFuZCBhIGRpdiB3aXRoIG92ZXJm
bG93LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworNTAwMC1waXhlbCBib3gKKwor
NTAwMC1waXhlbCBib3gKK1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAKK1BBU1MgZnJhbWVX
aW5kb3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyBjb250YWluZXIuc2Nyb2xsVG9wIGlzIDAKK1BB
U1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCitQQVNTIHRhcmdldC5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMzAwCitQQVNTIHRhcmdldC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AgaXMgMzAwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFtZS1uZXN0
ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xs
LXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMt
dGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHAgaWQ9ImRlc2NyaXB0aW9u
Ij48L3A+CisKKzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAw
MHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKworPCEtLSBUaGUgY29udGVudHMgb2YgdGhpcyBp
ZnJhbWUsIG1vcmUgbmljZWx5IGZvcm1hdHRlZDoKKyA8Ym9keT4KKyAgIDxzdHlsZT4KKyAgICAg
YnV0dG9uIHsKKyAgICAgICBib3JkZXI6IDA7CisgICAgIH0KKyAgIDwvc3R5bGU+CisgICA8ZGl2
IHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAtcGl4
ZWwgYm94PC9kaXY+CisgICA8ZGl2IGlkPSdjb250YWluZXInIHN0eWxlPSdoZWlnaHQ6IDEwMHB4
OyBvdmVyZmxvdzogc2Nyb2xsJz4KKyAgICAgPGRpdiBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQg
IzAwMDsgaGVpZ2h0OiA1MDAwcHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2PgorICAgICA8YnV0dG9u
IGlkPSd0YXJnZXQnPlRhcmdldDwvYnV0dG9uPgorICAgICA8ZGl2IHN0eWxlPSdib3JkZXI6IDFw
eCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgICA8
L2Rpdj4KKyAgIDxkaXYgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAw
MHB4Oyc+NTAwMC1waXhlbCBib3g8L2Rpdj4KKyAgPC9ib2R5PgorIC0tPgorPGlmcmFtZSBpZD0i
ZnJhbWUiIHNyYz0iZGF0YTp0ZXh0L2h0bWwsPGJvZHk+PHN0eWxlPmJ1dHRvbiB7IGJvcmRlcjog
MDsgfTwvc3R5bGU+PGRpdiBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1
MDAwcHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2PjxkaXYgaWQ9J2NvbnRhaW5lcicgc3R5bGU9J2hl
aWdodDogMTAwcHg7IG92ZXJmbG93OiBzY3JvbGwnPjxkaXYgc3R5bGU9J2JvcmRlcjogMXB4IHNv
bGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1waXhlbCBib3g8L2Rpdj48YnV0dG9uIGlk
PSd0YXJnZXQnPlRhcmdldDwvYnV0dG9uPjxkaXYgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMw
MDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1waXhlbCBib3g8L2Rpdj48L2Rpdj48ZGl2IHN0eWxl
PSdib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94
PC9kaXY+PC9ib2R5PiI+PC9pZnJhbWU+CisKKzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlk
ICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKworPGRpdiBpZD0i
Y29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzY3Jv
bGxpbmcgdG8gbW92ZSBhbiBlbGVtZW50IHRvIGEgc3BlY2lmaWMgcG9pbnQgc3VjY2Vzc2Z1bGx5
IHNjcm9sbHMgYm90aCBhbiBpZnJhbWUgYW5kIGEgZGl2IHdpdGggb3ZlcmZsb3cuIik7CisKK2lm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7
CisKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsK
KyAgICB3aW5kb3cuZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWUiKTsKKyAg
ICB3aW5kb3cuZnJhbWVXaW5kb3cgPSBmcmFtZS5jb250ZW50V2luZG93OworICAgIHdpbmRvdy5m
cmFtZURvYyA9IGZyYW1lV2luZG93LmRvY3VtZW50OworICAgIHdpbmRvdy5jb250YWluZXIgPSBm
cmFtZURvYy5nZXRFbGVtZW50QnlJZCgiY29udGFpbmVyIik7CisgICAgd2luZG93LnRhcmdldCA9
IGZyYW1lRG9jLmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKTsKKworICAgIGlmICh3aW5kb3cuYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGFyZ2V0LmZvY3VzKCk7CisgICAgICAg
IHZhciB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9j
dXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhlIGluaXRpYWwgc2Nyb2xsIHBv
c2l0aW9uIChzaW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9sbCB0aGUgcGFnZSB0b28pLgor
ICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICBmcmFtZVdpbmRvdy5zY3JvbGxUbygwLCAw
KTsKKyAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gMDsKKyAgICBzaG91bGRCZSgid2luZG93LnBh
Z2VZT2Zmc2V0IiwgIjAiKTsKKyAgICBzaG91bGRCZSgiZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQi
LCAiMCIpOworICAgIHNob3VsZEJlKCJjb250YWluZXIuc2Nyb2xsVG9wIiwgIjAiKTsKKworICAg
IC8vIFNjcm9sbCB0byB2YXJpb3VzIGxvY2F0aW9ucyBhbmQgY2hlY2suCisgICAgaWYgKHdpbmRv
dy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVj
dC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjAiKTsKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxp
dHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvR2xv
YmFsUG9pbnQoMCwgMzAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLnRvcCIsICIzMDAiKTsKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQo
MCwgMzAwMCk7CisgICAgc2hvdWxkQmUoInRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50
b3AiLCAiMzAwMCIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CisgICAgc2V0VGltZW91dChydW5UZXN0LCAx
MCk7Cit9LCBmYWxzZSk7CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xv
YmFsLXBvaW50LWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNz
aWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFtZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjMgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorCis8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWln
aHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisKKzxpZnJhbWUgaWQ9ImZyYW1lIiBz
cmM9ImRhdGE6dGV4dC9odG1sLDxib2R5PjxzdHlsZT5idXR0b24geyBib3JkZXI6IDA7IH08L3N0
eWxlPjxkaXYgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+
NTAwMC1waXhlbCBib3g8L2Rpdj48YnV0dG9uIGlkPSd0YXJnZXQnPlRhcmdldDwvYnV0dG9uPjxk
aXYgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1w
aXhlbCBib3g8L2Rpdj48L2JvZHk+Ij48L2lmcmFtZT4KKworPGRpdiBzdHlsZT0iYm9yZGVyOiAx
cHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorCis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0
aGF0IHNjcm9sbGluZyB0byBtb3ZlIGFuIGVsZW1lbnQgdG8gYSBzcGVjaWZpYyBwb2ludCBzdWNj
ZXNzZnVsbHkgc2Nyb2xscyBhbiBpZnJhbWUuIik7CisKK2lmICh3aW5kb3cudGVzdFJ1bm5lcikK
KyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKK3dpbmRvdy5qc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB3aW5kb3cuZnJhbWUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWUiKTsKKyAgICB3aW5kb3cuZnJhbWVXaW5kb3cg
PSBmcmFtZS5jb250ZW50V2luZG93OworICAgIHdpbmRvdy5mcmFtZURvYyA9IGZyYW1lV2luZG93
LmRvY3VtZW50OworICAgIHdpbmRvdy50YXJnZXQgPSBmcmFtZURvYy5nZXRFbGVtZW50QnlJZCgi
dGFyZ2V0Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7Cisg
ICAgICAgIHRhcmdldC5mb2N1cygpOworICAgICAgICB2YXIgdGFyZ2V0QWNjZXNzaWJsZU9iamVj
dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgIH0KKworICAg
IC8vIFJlc2V0IHRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbiAoc2luY2UgY2FsbGluZyBmb2N1
cygpIGNhbiBzY3JvbGwgdGhlIHBhZ2UgdG9vKS4KKyAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7
CisgICAgZnJhbWVXaW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisgICAgc2hvdWxkQmUoIndpbmRvdy5w
YWdlWU9mZnNldCIsICIwIik7CisgICAgc2hvdWxkQmUoImZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0
IiwgIjAiKTsKKworICAgIC8vIFNjcm9sbCB0byB2YXJpb3VzIGxvY2F0aW9ucyBhbmQgY2hlY2su
CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0
QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDApOworICAgIHNob3VsZEJl
KCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjAiKTsKKyAgICBpZiAod2lu
ZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2Jq
ZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMzAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0Lmdl
dEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIsICIzMDAiKTsKKyAgICBpZiAod2luZG93LmFjY2Vz
c2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9s
bFRvR2xvYmFsUG9pbnQoMCwgMzAwMCk7CisgICAgc2hvdWxkQmUoInRhcmdldC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AiLCAiMzAwMCIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisK
K3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CisgICAgc2V0VGlt
ZW91dChydW5UZXN0LCAxMCk7Cit9LCBmYWxzZSk7CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwt
cG9pbnQtbWFpbi13aW5kb3ctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1tYWluLXdpbmRvdy1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10
by1nbG9iYWwtcG9pbnQtbWFpbi13aW5kb3ctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTYgQEAKK1Rlc3RzIHRoYXQgc2Nyb2xsaW5nIGFuIGVsZW1lbnQgdG8gYSBzcGVj
aWZpYyBwb2ludCBzdWNjZXNzZnVsbHkgc2Nyb2xscyB0aGUgbWFpbiB3aW5kb3cuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCis1MDAwLXBpeGVsIGJveAorVGFyZ2V0Cis1MDAwLXBp
eGVsIGJveAorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyB0YXJnZXQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLnRvcCBpcyAzMDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRv
cCBpcyAzMDAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBv
aW50LW1haW4td2luZG93Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1haW4td2luZG93Lmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtbWFp
bi13aW5kb3cuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
dHlsZT4KK2J1dHRvbiB7CisgIGJvcmRlcjogMDsKK30KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisKKzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4
IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKzxidXR0
b24gaWQ9InRhcmdldCI+VGFyZ2V0PC9idXR0b24+Cis8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBz
b2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisKKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQg
c2Nyb2xsaW5nIGFuIGVsZW1lbnQgdG8gYSBzcGVjaWZpYyBwb2ludCBzdWNjZXNzZnVsbHkgc2Ny
b2xscyB0aGUgbWFpbiB3aW5kb3cuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgdmFy
IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKTsKKworICAgIGlmICh3
aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGFyZ2V0LmZvY3VzKCk7
CisgICAgICAgIHZhciB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhlIGluaXRpYWwg
c2Nyb2xsIHBvc2l0aW9uIChzaW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9sbCB0aGUgcGFn
ZSB0b28pLgorICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICBzaG91bGRCZSgid2luZG93
LnBhZ2VZT2Zmc2V0IiwgIjAiKTsKKworICAgIC8vIFNjcm9sbCB0byB2YXJpb3VzIGxvY2F0aW9u
cyBhbmQgY2hlY2suCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAg
ICAgICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDApOwor
ICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjAiKTsK
KyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRB
Y2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMzAwKTsKKyAgICBzaG91bGRC
ZSgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIsICIzMDAiKTsKKyAgICBpZiAo
d2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxl
T2JqZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMzAwMCk7CisgICAgc2hvdWxkQmUoInRhcmdl
dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMzAwMCIpOworCisgICAgZmluaXNoSlNU
ZXN0KCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1u
ZXN0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxp
dHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1uZXN0ZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW5l
c3RlZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMyBAQAorVGVzdHMg
dGhhdCBzY3JvbGxpbmcgYW4gZWxlbWVudCB0byBhIHNwZWNpZmljIHBvaW50IGNhbiBzdWNjZXNz
ZnVsbHkgc2Nyb2xsIG11bHRpcGxlIG5lc3RlZCBzY3JvbGxpbmcgdmlld3MnLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworNTAwMC1waXhlbCBib3gKKzUwMDAtcGl4ZWwgYm94Cis1
MDAwLXBpeGVsIGJveAorVGFyZ2V0Cis1MDAwLXBpeGVsIGJveAorNTAwMC1waXhlbCBib3gKKzUw
MDAtcGl4ZWwgYm94CitQQVNTIHdpbmRvdy5wYWdlWU9mZnNldCBpcyAwCitQQVNTIG91dGVyQ29u
dGFpbmVyLnNjcm9sbFRvcCBpcyAwCitQQVNTIGlubmVyQ29udGFpbmVyLnNjcm9sbFRvcCBpcyAw
CitQQVNTIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgPj0gMTUwMDAKK1BB
U1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCitQQVNTIHRhcmdldC5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMzAwCitQQVNTIHRhcmdldC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AgaXMgMzAwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLWdsb2JhbC1wb2ludC1uZXN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtbmVzdGVkLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9p
bnQtbmVzdGVkLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8
c3R5bGU+CitidXR0b24geworICBib3JkZXI6IDA7Cit9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJv
ZHk+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2IHN0eWxlPSJib3JkZXI6IDFw
eCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisKKzxk
aXYgaWQ9Im91dGVyX2NvbnRhaW5lciIgc3R5bGU9ImhlaWdodDogMTAwcHg7IG92ZXJmbG93OiBz
Y3JvbGwiPgorICA8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUw
MDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgIDxkaXYgaWQ9ImlubmVyX2NvbnRhaW5lciIg
c3R5bGU9ImhlaWdodDogMTAwcHg7IG92ZXJmbG93OiBzY3JvbGwiPgorICAgIDxkaXYgc3R5bGU9
ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8
L2Rpdj4KKyAgICA8YnV0dG9uIGlkPSJ0YXJnZXQiPlRhcmdldDwvYnV0dG9uPgorICAgIDxkaXYg
c3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhl
bCBib3g8L2Rpdj4KKyAgPC9kaXY+CisgIDxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMw
MDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKzwvZGl2PgorCis8ZGl2
IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4
ZWwgYm94PC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVz
Y3JpcHRpb24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5nIGFuIGVsZW1lbnQgdG8gYSBzcGVjaWZpYyBw
b2ludCBjYW4gc3VjY2Vzc2Z1bGx5IHNjcm9sbCBtdWx0aXBsZSBuZXN0ZWQgc2Nyb2xsaW5nIHZp
ZXdzJy4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB3aW5kb3cub3V0ZXJDb250YWlu
ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgib3V0ZXJfY29udGFpbmVyIik7CisgICAgd2lu
ZG93LmlubmVyQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlubmVyX2NvbnRh
aW5lciIpOworICAgIHdpbmRvdy50YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFy
Z2V0Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAg
ICAgIHRhcmdldC5mb2N1cygpOworICAgICAgICB2YXIgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdCA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgIH0KKworICAgIC8v
IFJlc2V0IHRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbnMgKHNpbmNlIGNhbGxpbmcgZm9jdXMo
KSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbykuCisgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOwor
ICAgIG91dGVyQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7CisgICAgaW5uZXJDb250YWluZXIuc2Ny
b2xsVG9wID0gMDsKKyAgICBzaG91bGRCZSgid2luZG93LnBhZ2VZT2Zmc2V0IiwgIjAiKTsKKyAg
ICBzaG91bGRCZSgib3V0ZXJDb250YWluZXIuc2Nyb2xsVG9wIiwgIjAiKTsKKyAgICBzaG91bGRC
ZSgiaW5uZXJDb250YWluZXIuc2Nyb2xsVG9wIiwgIjAiKTsKKyAgICBzaG91bGRCZUdyZWF0ZXJU
aGFuT3JFcXVhbCgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIsICIxNTAwMCIp
OworCisgICAgLy8gU2Nyb2xsIHRvIHZhcmlvdXMgbG9jYXRpb25zIGFuZCBjaGVjay4KKworICAg
IGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vz
c2libGVPYmplY3Quc2Nyb2xsVG9HbG9iYWxQb2ludCgwLCAwKTsKKyAgICBzaG91bGRCZSgidGFy
Z2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIsICIwIik7CisKKyAgICBpZiAod2luZG93
LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0
LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMzAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0LmdldEJv
dW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIsICIzMDAiKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xs
VG9HbG9iYWxQb2ludCgwLCAzMDAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLnRvcCIsICIzMDAwIik7CisKKyAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3J1
blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1kaXYtb3ZlcmZsb3ctZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xs
LXRvLW1ha2UtdmlzaWJsZS1kaXYtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWRpdi1v
dmVyZmxvdy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOSBAQAorVGVz
dHMgdGhhdCBzY3JvbGxpbmcgdG8gbWFrZSBhbiBlbGVtZW50IHZpc2libGUgc3VjY2Vzc2Z1bGx5
IHNjcm9sbHMgYW4gYXJiaXRyYXJ5IEhUTUwgZWxlbWVudCB0aGF0IGhhcyBDU1Mgb3ZlcmZsb3cg
c2V0IHRvICdzY3JvbGwnLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworVXBwZXIg
VGFyZ2V0Cis1MDAwLXBpeGVsIGJveAorTG93ZXIgVGFyZ2V0CitQQVNTIGNvbnRhaW5lci5zY3Jv
bGxUb3AgaXMgMAorUEFTUyBjb250YWluZXIuc2Nyb2xsVG9wID49IG1pbllPZmZzZXQgaXMgdHJ1
ZQorUEFTUyBjb250YWluZXIuc2Nyb2xsVG9wIDw9IG1heFlPZmZzZXQgaXMgdHJ1ZQorUEFTUyBj
b250YWluZXIuc2Nyb2xsVG9wID49IG1pbllPZmZzZXQgaXMgdHJ1ZQorUEFTUyBjb250YWluZXIu
c2Nyb2xsVG9wIDw9IG1heFlPZmZzZXQgaXMgdHJ1ZQorUEFTUyBjb250YWluZXIuc2Nyb2xsVG9w
ID49IG1pbllPZmZzZXQgaXMgdHJ1ZQorUEFTUyBjb250YWluZXIuc2Nyb2xsVG9wIDw9IG1heFlP
ZmZzZXQgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Ut
dmlzaWJsZS1kaXYtb3ZlcmZsb3cuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtZGl2LW92ZXJmbG93Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2li
bGUtZGl2LW92ZXJmbG93Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisKKzxkaXYg
aWQ9ImNvbnRhaW5lciIgc3R5bGU9ImhlaWdodDogMTAwcHg7IG92ZXJmbG93OiBzY3JvbGwiPgor
ICA8YnV0dG9uIGlkPSJ1cHBlcl90YXJnZXQiPlVwcGVyIFRhcmdldDwvYnV0dG9uPgorICA8ZGl2
IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4
ZWwgYm94PC9kaXY+CisgIDxidXR0b24gaWQ9Imxvd2VyX3RhcmdldCI+TG93ZXIgVGFyZ2V0PC9i
dXR0b24+Cis8L2Rpdj4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzY3JvbGxpbmcgdG8gbWFrZSBhbiBlbGVtZW50IHZpc2li
bGUgc3VjY2Vzc2Z1bGx5IHNjcm9sbHMgYW4gYXJiaXRyYXJ5IEhUTUwgZWxlbWVudCB0aGF0IGhh
cyBDU1Mgb3ZlcmZsb3cgc2V0IHRvICdzY3JvbGwnLiIpOworCitmdW5jdGlvbiBydW5UZXN0KCkg
eworICAgIHdpbmRvdy5jb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGFp
bmVyIik7CisgICAgdmFyIHVwcGVyVGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVw
cGVyX3RhcmdldCIpOworICAgIHZhciBsb3dlclRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJsb3dlcl90YXJnZXQiKTsKKworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIpIHsKKyAgICAgICAgbG93ZXJUYXJnZXQuZm9jdXMoKTsKKyAgICAgICAgdmFyIGxvd2Vy
VGFyZ2V0QWNjZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRF
bGVtZW50OworICAgICAgICB1cHBlclRhcmdldC5mb2N1cygpOworICAgICAgICB2YXIgdXBwZXJU
YXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVs
ZW1lbnQ7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhlIGluaXRpYWwgc2Nyb2xsIHBvc2l0aW9u
IChzaW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9sbCB0aGUgcGFnZSB0b28pLgorICAgIGNv
bnRhaW5lci5zY3JvbGxUb3AgPSAwOworICAgIHNob3VsZEJlKCJjb250YWluZXIuc2Nyb2xsVG9w
IiwgIjAiKTsKKworICAgIC8vIFNjcm9sbCB0byBtYWtlIGxvd2VyIHRhcmdldCB2aXNpYmxlIGFu
ZCBjaGVjay4KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAg
ICBsb3dlclRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAg
IHZhciB0b3AgPSBsb3dlclRhcmdldC5vZmZzZXRUb3AgLSBjb250YWluZXIub2Zmc2V0VG9wOwor
ICAgIHdpbmRvdy5taW5ZT2Zmc2V0ID0gdG9wICsgbG93ZXJUYXJnZXQub2Zmc2V0SGVpZ2h0IC0g
Y29udGFpbmVyLm9mZnNldEhlaWdodDsKKyAgICB3aW5kb3cubWF4WU9mZnNldCA9IHRvcDsKKyAg
ICBzaG91bGRCZSgiY29udGFpbmVyLnNjcm9sbFRvcCA+PSBtaW5ZT2Zmc2V0IiwgInRydWUiKTsK
KyAgICBzaG91bGRCZSgiY29udGFpbmVyLnNjcm9sbFRvcCA8PSBtYXhZT2Zmc2V0IiwgInRydWUi
KTsKKworICAgIC8vIERvIGl0IGFnYWluLiBJdCBzaG91bGRuJ3Qgc2Nyb2xsLgorICAgIGlmICh3
aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIGxvd2VyVGFyZ2V0QWNjZXNz
aWJsZU9iamVjdC5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgdmFyIHRvcCA9IGxvd2VyVGFy
Z2V0Lm9mZnNldFRvcCAtIGNvbnRhaW5lci5vZmZzZXRUb3A7CisgICAgd2luZG93Lm1pbllPZmZz
ZXQgPSB0b3AgKyBsb3dlclRhcmdldC5vZmZzZXRIZWlnaHQgLSBjb250YWluZXIub2Zmc2V0SGVp
Z2h0OworICAgIHdpbmRvdy5tYXhZT2Zmc2V0ID0gdG9wOworICAgIHNob3VsZEJlKCJjb250YWlu
ZXIuc2Nyb2xsVG9wID49IG1pbllPZmZzZXQiLCAidHJ1ZSIpOworICAgIHNob3VsZEJlKCJjb250
YWluZXIuc2Nyb2xsVG9wIDw9IG1heFlPZmZzZXQiLCAidHJ1ZSIpOworCisgICAgLy8gU2Nyb2xs
IHRvIG1ha2UgdXBwZXIgdGFyZ2V0IHZpc2libGUgYW5kIGNoZWNrLgorICAgIGlmICh3aW5kb3cu
YWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHVwcGVyVGFyZ2V0QWNjZXNzaWJsZU9i
amVjdC5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgdG9wID0gdXBwZXJUYXJnZXQub2Zmc2V0
VG9wIC0gY29udGFpbmVyLm9mZnNldFRvcDsKKyAgICB3aW5kb3cubWluWU9mZnNldCA9IHRvcCAr
IHVwcGVyVGFyZ2V0Lm9mZnNldEhlaWdodCAtIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7CisgICAg
d2luZG93Lm1heFlPZmZzZXQgPSB0b3A7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxU
b3AgPj0gbWluWU9mZnNldCIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3Jv
bGxUb3AgPD0gbWF4WU9mZnNldCIsICJ0cnVlIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KworcnVuVGVzdCgpOworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWlmcmFtZS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwt
dG8tbWFrZS12aXNpYmxlLWlmcmFtZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1IEBACitUZXN0cyB0aGF0IHNjcm9s
bGluZyB0byBtYWtlIGFuIGVsZW1lbnQgdmlzaWJsZSBzdWNjZXNzZnVsbHkgc2Nyb2xscyBhbiBp
ZnJhbWUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisKK1BBU1MgZnJhbWVXaW5k
b3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyBmcmFtZVdpbmRvdy5wYWdlWU9mZnNldCA+PSBtaW5Z
T2Zmc2V0IGlzIHRydWUKK1BBU1MgZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQgPD0gbWF4WU9mZnNl
dCBpcyB0cnVlCitQQVNTIGZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0ID49IG1pbllPZmZzZXQgaXMg
dHJ1ZQorUEFTUyBmcmFtZVdpbmRvdy5wYWdlWU9mZnNldCA8PSBtYXhZT2Zmc2V0IGlzIHRydWUK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1l
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8t
bWFrZS12aXNpYmxlLWlmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWlmcmFtZS5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjYgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwIGlkPSJk
ZXNjcmlwdGlvbiI+PC9wPgorCis8aWZyYW1lIGlkPSJmcmFtZSIgc3JjPSJkYXRhOnRleHQvaHRt
bCw8Ym9keT48YnV0dG9uIGlkPSd1cHBlcl90YXJnZXQnPlVwcGVyIFRhcmdldDwvYnV0dG9uPjxk
aXYgc3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1w
aXhlbCBib3g8L2Rpdj48YnV0dG9uIGlkPSdsb3dlcl90YXJnZXQnPkxvd2VyIFRhcmdldDwvYnV0
dG9uPjwvYm9keT4iPjwvaWZyYW1lPgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNj
cmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHNjcm9sbGluZyB0byBtYWtlIGFuIGVsZW1l
bnQgdmlzaWJsZSBzdWNjZXNzZnVsbHkgc2Nyb2xscyBhbiBpZnJhbWUuIik7CisKK2lmICh3aW5k
b3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisKK3dp
bmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB3
aW5kb3cuZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnJhbWUiKTsKKyAgICB3aW5k
b3cuZnJhbWVXaW5kb3cgPSBmcmFtZS5jb250ZW50V2luZG93OworICAgIHdpbmRvdy5mcmFtZURv
YyA9IGZyYW1lV2luZG93LmRvY3VtZW50OworCisgICAgdmFyIHVwcGVyVGFyZ2V0ID0gZnJhbWVE
b2MuZ2V0RWxlbWVudEJ5SWQoInVwcGVyX3RhcmdldCIpOworICAgIHZhciBsb3dlclRhcmdldCA9
IGZyYW1lRG9jLmdldEVsZW1lbnRCeUlkKCJsb3dlcl90YXJnZXQiKTsKKworICAgIGlmICh3aW5k
b3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgbG93ZXJUYXJnZXQuZm9jdXMo
KTsKKyAgICAgICAgdmFyIGxvd2VyVGFyZ2V0QWNjZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgICAgICB1cHBlclRhcmdldC5mb2N1cygp
OworICAgICAgICB2YXIgdXBwZXJUYXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJpbGl0
eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhlIGlu
aXRpYWwgc2Nyb2xsIHBvc2l0aW9uIChzaW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9sbCB0
aGUgcGFnZSB0b28pLgorICAgIGZyYW1lV2luZG93LnNjcm9sbFRvKDAsIDApOworICAgIHNob3Vs
ZEJlKCJmcmFtZVdpbmRvdy5wYWdlWU9mZnNldCIsICIwIik7CisKKyAgICAvLyBTY3JvbGwgdG8g
bWFrZSBsb3dlciB0YXJnZXQgdmlzaWJsZSBhbmQgY2hlY2suCisgICAgaWYgKHdpbmRvdy5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgbG93ZXJUYXJnZXRBY2Nlc3NpYmxlT2JqZWN0
LnNjcm9sbFRvTWFrZVZpc2libGUoKTsKKyAgICB3aW5kb3cubWluWU9mZnNldCA9IGxvd2VyVGFy
Z2V0Lm9mZnNldFRvcCArIGxvd2VyVGFyZ2V0Lm9mZnNldEhlaWdodCAtIGZyYW1lV2luZG93Lmlu
bmVySGVpZ2h0OworICAgIHdpbmRvdy5tYXhZT2Zmc2V0ID0gbG93ZXJUYXJnZXQub2Zmc2V0VG9w
OworICAgIHNob3VsZEJlKCJmcmFtZVdpbmRvdy5wYWdlWU9mZnNldCA+PSBtaW5ZT2Zmc2V0Iiwg
InRydWUiKTsKKyAgICBzaG91bGRCZSgiZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQgPD0gbWF4WU9m
ZnNldCIsICJ0cnVlIik7CisKKyAgICAvLyBTY3JvbGwgdG8gbWFrZSB1cHBlciB0YXJnZXQgdmlz
aWJsZSBhbmQgY2hlY2suCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikK
KyAgICAgICAgdXBwZXJUYXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvTWFrZVZpc2libGUo
KTsKKyAgICB3aW5kb3cubWluWU9mZnNldCA9IHVwcGVyVGFyZ2V0Lm9mZnNldFRvcCArIHVwcGVy
VGFyZ2V0Lm9mZnNldEhlaWdodCAtIGZyYW1lV2luZG93LmlubmVySGVpZ2h0OworICAgIHdpbmRv
dy5tYXhZT2Zmc2V0ID0gdXBwZXJUYXJnZXQub2Zmc2V0VG9wOworICAgIHNob3VsZEJlKCJmcmFt
ZVdpbmRvdy5wYWdlWU9mZnNldCA+PSBtaW5ZT2Zmc2V0IiwgInRydWUiKTsKKyAgICBzaG91bGRC
ZSgiZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQgPD0gbWF4WU9mZnNldCIsICJ0cnVlIik7CisKKyAg
ICBmaW5pc2hKU1Rlc3QoKTsKK30KKword2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBm
dW5jdGlvbigpIHsKKyAgICBzZXRUaW1lb3V0KHJ1blRlc3QsIDEwKTsKK30sIGZhbHNlKTsKKwor
PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxl
LW5lc3RlZC0yLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorVGVzdHMgdGhhdCBzY3JvbGxpbmcgdG8gbWFr
ZSBhbiBlbGVtZW50IHZpc2libGUgd29ya3Mgd2hlbiB0aGUgaW5uZXIgc2Nyb2xsIGNvbnRhaW5l
ciBkb2Vzbid0IG5lZWQgdG8gYmUgc2Nyb2xsZWQsIGJ1dCB0aGUgb3RoZXIgb25lIGRvZXMuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCis1MDAwLXBpeGVsIGJveAorVGFyZ2V0IFRh
cmdldCBUYXJnZXQKKzUwMDAtcGl4ZWwgYm94CitQQVNTIHdpbmRvdy5wYWdlWU9mZnNldCBpcyAw
CitQQVNTIGNvbnRhaW5lci5zY3JvbGxUb3AgaXMgMAorUEFTUyB0YXJnZXQxLmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpLnRvcCBpcyA+PSA1MDAwCitQQVNTIHdpbmRvdy5pbm5lckhlaWdodCBpcyA+
PSB0YXJnZXQyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmJvdHRvbQorUEFTUyB0YXJnZXQydG9w
IGlzIHRhcmdldDIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wCitQQVNTIHRhcmdldDJ0b3Ag
aXMgdGFyZ2V0Mi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLTIuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVz
dGVkLTIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzAgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+
PC9wPgorCis8ZGl2IGlkPSJjb250YWluZXIiIHN0eWxlPSJ3aWR0aDogMTAwcHg7IG92ZXJmbG93
OiBzY3JvbGwiPgorICA8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyB3aWR0aDog
MTAwMHB4OyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgIDxidXR0b24g
aWQ9InRhcmdldDEiPlRhcmdldDwvYnV0dG9uPgorICA8YnV0dG9uIGlkPSJ0YXJnZXQyIj5UYXJn
ZXQ8L2J1dHRvbj4KKyAgPGJ1dHRvbiBpZD0idGFyZ2V0MyI+VGFyZ2V0PC9idXR0b24+CisgIDxk
aXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IHdpZHRoOiAxMDAwcHg7IGhlaWdodDog
NTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKzwvZGl2PgorCis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHNjcm9sbGluZyB0
byBtYWtlIGFuIGVsZW1lbnQgdmlzaWJsZSB3b3JrcyB3aGVuIHRoZSBpbm5lciBzY3JvbGwgY29u
dGFpbmVyIGRvZXNuJ3QgbmVlZCB0byBiZSBzY3JvbGxlZCwgYnV0IHRoZSBvdGhlciBvbmUgZG9l
cy4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB3aW5kb3cuY29udGFpbmVyID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOworICAgIHdpbmRvdy50YXJnZXQxID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldDEiKTsKKyAgICB3aW5kb3cudGFyZ2V0MiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQyIik7CisgICAgd2luZG93LnRhcmdldDMg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0MyIpOworCisgICAgaWYgKHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB0YXJnZXQxLmZvY3VzKCk7CisgICAg
ICAgIHZhciB0YXJnZXQxQWNjZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVy
LmZvY3VzZWRFbGVtZW50OworICAgICAgICB0YXJnZXQyLmZvY3VzKCk7CisgICAgICAgIHZhciB0
YXJnZXQyQWNjZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRF
bGVtZW50OworICAgICAgICB0YXJnZXQzLmZvY3VzKCk7CisgICAgICAgIHZhciB0YXJnZXQzQWNj
ZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50Owor
ICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbnMgKHNpbmNl
IGNhbGxpbmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbykuCisgICAgd2luZG93LnNj
cm9sbFRvKDAsIDApOworICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSAwOworICAgIHNob3VsZEJl
KCJ3aW5kb3cucGFnZVlPZmZzZXQiLCAiMCIpOworICAgIHNob3VsZEJlKCJjb250YWluZXIuc2Ny
b2xsVG9wIiwgIjAiKTsKKyAgICBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCgidGFyZ2V0MS5n
ZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiNTAwMCIpOworCisgICAgLy8gU2Nyb2xsIHRv
IG1ha2UgdGhlIG1pZGRsZSB0YXJnZXQgdmlzaWJsZS4KKyAgICBpZiAod2luZG93LmFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXQyQWNjZXNzaWJsZU9iamVjdC5zY3JvbGxU
b01ha2VWaXNpYmxlKCk7CisKKyAgICAvLyBJbnN0ZWFkIG9mIHRlc3RpbmcgdGhlIGV4YWN0IHNj
cm9sbCBvZmZzZXRzIG9mIHRoZSB0d28gY29udGFpbmVycywganVzdCB0ZXN0IHRoYXQKKyAgICAv
LyB0aGUgbmV3IGFic29sdXRlIHBvc2l0aW9uIG9mIHRoZSB0YXJnZXQgaXMgb24tc2NyZWVuLgor
ICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKCJ3aW5kb3cuaW5uZXJIZWlnaHQiLCAidGFy
Z2V0Mi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20iKTsKKworICAgIC8vIE1ha2Ugc3Vy
ZSB0aGF0IGNhbGxpbmcgc2Nyb2xsVG9NYWtlVmlzaWJsZSBvbiB0YXJnZXQxIGFuZCB0YXJnZXQz
IGRvbid0IHJlc3VsdCBpbiBhbnkKKyAgICAvLyBzY3JvbGxpbmcsIGJlY2F1c2UgdGhleSBzaG91
bGQgYWxyZWFkeSBiZSB3aXRoaW4gdGhlIHZpZXdwb3J0LgorICAgIHdpbmRvdy50YXJnZXQydG9w
ID0gdGFyZ2V0Mi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7CisgICAgaWYgKHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0MUFjY2Vzc2libGVPYmplY3Qu
c2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAgIHNob3VsZEJlKCJ0YXJnZXQydG9wIiwgInRhcmdl
dDIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIik7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3Np
YmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0M0FjY2Vzc2libGVPYmplY3Quc2Nyb2xs
VG9NYWtlVmlzaWJsZSgpOworICAgIHNob3VsZEJlKCJ0YXJnZXQydG9wIiwgInRhcmdldDIuZ2V0
Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30KKwor
cnVuVGVzdCgpOworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8t
bWFrZS12aXNpYmxlLW5lc3RlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACitUZXN0cyB0aGF0IHNjcm9sbGlu
ZyB0byBtYWtlIGFuIGVsZW1lbnQgdmlzaWJsZSBzdWNjZXNzZnVsbHkgc2Nyb2xscyBtdWx0aXBs
ZSBuZXN0ZWQgc2Nyb2xsaW5nIHZpZXdzJy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CisKKzUwMDAtcGl4ZWwgYm94Cis1MDAwLXBpeGVsIGJveAorNTAwMC1waXhlbCBib3gKK1Rhcmdl
dAorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyBvdXRlckNvbnRhaW5lci5zY3Jv
bGxUb3AgaXMgMAorUEFTUyBpbm5lckNvbnRhaW5lci5zY3JvbGxUb3AgaXMgMAorUEFTUyB0YXJn
ZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzID49IDE1MDAwCitQQVNTIHdpbmRvdy5p
bm5lckhlaWdodCBpcyA+PSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1h
a2UtdmlzaWJsZS1uZXN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291
cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8cCBpZD0iZGVz
Y3JpcHRpb24iPjwvcD4KKworPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVp
Z2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorCis8ZGl2IGlkPSJvdXRlcl9jb250
YWluZXIiIHN0eWxlPSJoZWlnaHQ6IDEwMHB4OyBvdmVyZmxvdzogc2Nyb2xsIj4KKyAgPGRpdiBz
dHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVs
IGJveDwvZGl2PgorICA8ZGl2IGlkPSJpbm5lcl9jb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6IDEw
MHB4OyBvdmVyZmxvdzogc2Nyb2xsIj4KKyAgICA8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xp
ZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgICAgPGJ1dHRv
biBpZD0idGFyZ2V0Ij5UYXJnZXQ8L2J1dHRvbj4KKyAgPC9kaXY+Cis8L2Rpdj4KKworPGRpdiBp
ZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBz
Y3JvbGxpbmcgdG8gbWFrZSBhbiBlbGVtZW50IHZpc2libGUgc3VjY2Vzc2Z1bGx5IHNjcm9sbHMg
bXVsdGlwbGUgbmVzdGVkIHNjcm9sbGluZyB2aWV3cycuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3Qo
KSB7CisgICAgd2luZG93Lm91dGVyQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im91dGVyX2NvbnRhaW5lciIpOworICAgIHdpbmRvdy5pbm5lckNvbnRhaW5lciA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJpbm5lcl9jb250YWluZXIiKTsKKyAgICB3aW5kb3cudGFyZ2V0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nl
c3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB0YXJnZXQuZm9jdXMoKTsKKyAgICAgICAg
dmFyIHRhcmdldEFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1
c2VkRWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwgcG9z
aXRpb25zIChzaW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9sbCB0aGUgcGFnZSB0b28pLgor
ICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICBvdXRlckNvbnRhaW5lci5zY3JvbGxUb3Ag
PSAwOworICAgIGlubmVyQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7CisgICAgc2hvdWxkQmUoIndp
bmRvdy5wYWdlWU9mZnNldCIsICIwIik7CisgICAgc2hvdWxkQmUoIm91dGVyQ29udGFpbmVyLnNj
cm9sbFRvcCIsICIwIik7CisgICAgc2hvdWxkQmUoImlubmVyQ29udGFpbmVyLnNjcm9sbFRvcCIs
ICIwIik7CisgICAgc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoInRhcmdldC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKS50b3AiLCAiMTUwMDAiKTsKKworICAgIC8vIFNjcm9sbCB0byBtYWtlIHRh
cmdldCB2aXNpYmxlLgorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisg
ICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworCisg
ICAgLy8gSW5zdGVhZCBvZiB0ZXN0aW5nIHRoZSBleGFjdCBzY3JvbGwgb2Zmc2V0cyBvZiB0aGUg
dHdvIGNvbnRhaW5lcnMsIGp1c3QgdGVzdCB0aGF0CisgICAgLy8gdGhlIG5ldyBhYnNvbHV0ZSBw
b3NpdGlvbiBvZiB0aGUgdGFyZ2V0IGlzIG9uLXNjcmVlbi4KKyAgICBzaG91bGRCZUdyZWF0ZXJU
aGFuT3JFcXVhbCgid2luZG93LmlubmVySGVpZ2h0IiwgInRhcmdldC5nZXRCb3VuZGluZ0NsaWVu
dFJlY3QoKS5ib3R0b20iKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitydW5UZXN0KCk7
CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1cy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFr
ZS12aXNpYmxlLXdpdGgtc3ViZm9jdXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLXdpdGgtc3ViZm9j
dXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKK1Rlc3RzIHRo
YXQgc2Nyb2xsaW5nIHRvIG1ha2UgYSBjZXJ0YWluIHJlZ2lvbiB3aXRoaW4gYW4gZWxlbWVudCB2
aXNpYmxlIHN1Y2Nlc3NmdWxseSBzY3JvbGxzIHRoZSBtYWluIHdpbmRvdy4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCisKKzUwMDAtcGl4ZWwgYm94CitUYXJnZXQKK1BBU1Mgd2luZG93
LnBhZ2VZT2Zmc2V0IGlzIDAKK1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0ID49IG1pbllPZmZzZXQg
aXMgdHJ1ZQorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQgPD0gbWF4WU9mZnNldCBpcyB0cnVlCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLXdpdGgtc3Vi
Zm9jdXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9s
bC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1cy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLXdpdGgtc3ViZm9j
dXMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGRpdiBzdHlsZT0iYm9yZGVy
OiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2Pgor
PGJ1dHRvbiBpZD0idGFyZ2V0IiBzdHlsZT0iaGVpZ2h0OiA1MDAwcHg7Ij5UYXJnZXQ8L2J1dHRv
bj4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigi
VGVzdHMgdGhhdCBzY3JvbGxpbmcgdG8gbWFrZSBhIGNlcnRhaW4gcmVnaW9uIHdpdGhpbiBhbiBl
bGVtZW50IHZpc2libGUgc3VjY2Vzc2Z1bGx5IHNjcm9sbHMgdGhlIG1haW4gd2luZG93LiIpOwor
CitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgidGFyZ2V0Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKSB7CisgICAgICAgIHRhcmdldC5mb2N1cygpOworICAgICAgICB2YXIgdGFyZ2V0QWNjZXNz
aWJsZU9iamVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAg
IH0KKworICAgIC8vIFJlc2V0IHRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbiAoc2luY2UgY2Fs
bGluZyBmb2N1cygpIGNhbiBzY3JvbGwgdGhlIHBhZ2UgdG9vKS4KKyAgICB3aW5kb3cuc2Nyb2xs
VG8oMCwgMCk7CisgICAgc2hvdWxkQmUoIndpbmRvdy5wYWdlWU9mZnNldCIsICIwIik7CisKKyAg
ICAvLyBTY3JvbGwgdG8gbWFrZSB0aGUgbWlkcG9pbnQgb2YgdGhlIHRhcmdldCB2aXNpYmxlIGFu
ZCBjaGVjay4KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAg
ICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMo
MCwgMjUwMCwgMTAwLCAyNjAwKTsKKyAgICB3aW5kb3cubWluWU9mZnNldCA9IHRhcmdldC5vZmZz
ZXRUb3AgKyAyNTAwIC0gd2luZG93LmlubmVySGVpZ2h0OworICAgIHdpbmRvdy5tYXhZT2Zmc2V0
ID0gdGFyZ2V0Lm9mZnNldFRvcCArIDI1MDA7CisgICAgc2hvdWxkQmUoIndpbmRvdy5wYWdlWU9m
ZnNldCA+PSBtaW5ZT2Zmc2V0IiwgInRydWUiKTsKKyAgICBzaG91bGRCZSgid2luZG93LnBhZ2VZ
T2Zmc2V0IDw9IG1heFlPZmZzZXQiLCAidHJ1ZSIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9
CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>259468</attachid>
            <date>2015-08-20 08:49:36 -0700</date>
            <delta_ts>2015-08-25 22:45:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>56098</size>
            <attacher name="chris fleizach">cfleizach</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODY2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBACisyMDE1LTA4LTE5ICBDaHJpcyBG
bGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFdoZW4gbmF2aWdh
dGluZyB0aGUgZWxlbWVudHMgb2YgYSBzY3JvbGxhYmxlIGVsZW1lbnQgd2l0aCBWb2ljZU92ZXIs
IHRoZSBzY3JvbGxUb3AoKSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBwZXJtYW5l
bnRseSBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEyNTcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoZSBzY3JvbGxUb1Zpc2libGUgY29kZSBkaWQgbm90IGFjY291bnQgZm9yIHNjcm9sbGFi
bGUgZWxlbWVudHMgdGhhdCBhcmUgbGFyZ2VyIHRoYW4gdGhlaXIgdmlld3BvcnRzLgorICAgICAg
ICBGaXJzdCwgd2UgbmVlZCB0byBwYXNzIHRoZSBzdWItZm9jdXMgdXAgdGhlIHNjcm9sbCBjaGFp
biAob3RoZXJ3aXNlIHdlJ2xsIHNjcm9sbCBzb21lIHBhcmVudCB0byB5PTApLgorICAgICAgICBT
ZWNvbmQsIHdlIHNob3VsZCB0cnkgdG8gY2VudGVyIHRoZSBmb2N1cyB3aXRoaW4gdGhlIHZpZXdw
b3J0LCByYXRoZXIgdGhhbiBwb3NpdGlvbmluZyBhdCB0aGUgYm90dG9tIGZvciBhIAorICAgICAg
ICBiZXR0ZXIgZXhwZXJpZW5jZS4KKworICAgICAgICBUaGlzIGNoYW5nZSB3YXMgYWRhcHRlZCBm
cm9tIEJsaW5rIHIxODM5MjY6CisgICAgICAgIGh0dHBzOi8vc3JjLmNocm9taXVtLm9yZy92aWV3
dmMvYmxpbms/dmlldz1yZXYmcmV2aXNpb249MTgzOTI2CisKKyAgICAgICAgVGVzdHM6IGFjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLmh0bWwKKyAgICAg
ICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUuaHRt
bAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1h
aW4td2luZG93Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWds
b2JhbC1wb2ludC1uZXN0ZWQuaHRtbAorICAgICAgICAgICAgICAgYWNjZXNzaWJpbGl0eS9zY3Jv
bGwtdG8tbWFrZS12aXNpYmxlLWRpdi1vdmVyZmxvdy5odG1sCisgICAgICAgICAgICAgICBhY2Nl
c3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLmh0bWwKKyAgICAgICAgICAg
ICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi5odG1sCisg
ICAgICAgICAgICAgICBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVk
Lmh0bWwKKyAgICAgICAgICAgICAgIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJs
ZS13aXRoLXN1YmZvY3VzLmh0bWwKKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21wdXRlQmVzdFNjcm9sbE9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0Ojppc09uc2NyZWVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OnNjcm9sbFRvTWFrZVZpc2li
bGVXaXRoU3ViRm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
c2Nyb2xsVG9HbG9iYWxQb2ludCk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlTY3JvbGxUb1Zpc2libGVdKToKKyAgICAgICAg
KC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2FjY2Vzc2liaWxpdHlTY3JvbGxUb01h
a2VWaXNpYmxlV2l0aFN1YkZvY3VzOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlciBfYWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFjY2Vzc2liaWxpdHlQZXJmb3JtQWN0
aW9uOl0pOgorCiAyMDE1LTA4LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAK
ICAgICAgICAgQXZvaWQgZG91YmxlIGhhc2ggbG9va3VwIGluIG91ciBKUyBiaW5kaW5ncyBuYW1l
ZCBwcm9wZXJ0eSBnZXR0ZXIgY29kZQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdy
YXBwZXJNYWMubW0JKHJldmlzaW9uIDE4ODU1OCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0zMzIxLDYgKzMzMjEsMTYgQEAKICAgICBtX29iamVjdC0+c2Nyb2xsVG9NYWtlVmlz
aWJsZSgpOwogfQogCistICh2b2lkKV9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9NYWtlVmlzaWJsZVdp
dGhTdWJGb2N1czooTlNSZWN0KXJlY3QKK3sKKyAgICBtX29iamVjdC0+c2Nyb2xsVG9NYWtlVmlz
aWJsZVdpdGhTdWJGb2N1cyhJbnRSZWN0KHJlY3QpKTsKK30KKworLSAodm9pZClfYWNjZXNzaWJp
bGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6KE5TUG9pbnQpcG9pbnQKK3sKKyAgICBtX29iamVjdC0+
c2Nyb2xsVG9HbG9iYWxQb2ludChJbnRQb2ludChwb2ludCkpOworfQorCiAtICh2b2lkKWFjY2Vz
c2liaWxpdHlQZXJmb3JtQWN0aW9uOihOU1N0cmluZyopYWN0aW9uCiB7CiAgICAgaWYgKCFbc2Vs
ZiB1cGRhdGVPYmplY3RCYWNraW5nU3RvcmVdKQpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCShyZXZpc2lvbiAxODc3
MzApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMxLDY3ICsyMzMxLDkyIEBACiAvLyBsb2dpYyBpcyB0
aGUgc2FtZS4gVGhlIGdvYWwgaXMgdG8gY29tcHV0ZSB0aGUgYmVzdCBzY3JvbGwgb2Zmc2V0CiAv
LyBpbiBvcmRlciB0byBtYWtlIGFuIG9iamVjdCB2aXNpYmxlIHdpdGhpbiBhIHZpZXdwb3J0Lgog
Ly8KKy8vIElmIHRoZSBvYmplY3QgaXMgYWxyZWFkeSBmdWxseSB2aXNpYmxlLCByZXR1cm5zIHRo
ZSBzYW1lIHNjcm9sbAorLy8gb2Zmc2V0LgorLy8KIC8vIEluIGNhc2UgdGhlIHdob2xlIG9iamVj
dCBjYW5ub3QgZml0LCB5b3UgY2FuIHNwZWNpZnkgYQogLy8gc3ViZm9jdXMgLSBhIHNtYWxsZXIg
cmVnaW9uIHdpdGhpbiB0aGUgb2JqZWN0IHRoYXQgc2hvdWxkCiAvLyBiZSBwcmlvcml0aXplZC4g
SWYgdGhlIHdob2xlIG9iamVjdCBjYW4gZml0LCB0aGUgc3ViZm9jdXMgaXMKIC8vIGlnbm9yZWQu
CiAvLwotLy8gRXhhbXBsZTogdGhlIHZpZXdwb3J0IGlzIHNjcm9sbGVkIHRvIHRoZSByaWdodCBq
dXN0IGVub3VnaAotLy8gdGhhdCB0aGUgb2JqZWN0IGlzIGluIHZpZXcuCisvLyBJZiBwb3NzaWJs
ZSwgdGhlIG9iamVjdCBhbmQgc3ViZm9jdXMgYXJlIGNlbnRlcmVkIHdpdGhpbiB0aGUKKy8vIHZp
ZXdwb3J0LgorLy8KKy8vIEV4YW1wbGUgMTogdGhlIG9iamVjdCBpcyBhbHJlYWR5IHZpc2libGUs
IHNvIG5vdGhpbmcgaGFwcGVucy4KKy8vICAgKy0tLS0tLS0tLS1WaWV3cG9ydC0tLS0tLS0tLSsK
Ky8vICAgICAgICAgICAgICAgICArLS0tT2JqZWN0LS0tKworLy8gICAgICAgICAgICAgICAgICst
LVN1YkZvY3VzLS0rCisvLworLy8gRXhhbXBsZSAyOiB0aGUgb2JqZWN0IGlzIG5vdCBmdWxseSB2
aXNpYmxlLCBzbyBpdCdzIGNlbnRlcmVkCisvLyB3aXRoaW4gdGhlIHZpZXdwb3J0LgogLy8gICBC
ZWZvcmU6CiAvLyAgICstLS0tLS0tLS0tVmlld3BvcnQtLS0tLS0tLS0rCiAvLyAgICAgICAgICAg
ICAgICAgICAgICAgICArLS0tT2JqZWN0LS0tKwogLy8gICAgICAgICAgICAgICAgICAgICAgICAg
Ky0tU3ViRm9jdXMtLSsKIC8vCiAvLyAgIEFmdGVyOgotLy8gICAgICAgICAgKy0tLS0tLS0tLS1W
aWV3cG9ydC0tLS0tLS0tLSsKKy8vICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLVZpZXdwb3J0
LS0tLS0tLS0tKwogLy8gICAgICAgICAgICAgICAgICAgICAgICAgKy0tLU9iamVjdC0tLSsKIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICstLVN1YkZvY3VzLS0rCiAvLworLy8gRXhhbXBsZSAz
OiB0aGUgb2JqZWN0IGlzIGxhcmdlciB0aGFuIHRoZSB2aWV3cG9ydCwgc28gdGhlCisvLyB2aWV3
cG9ydCBtb3ZlcyB0byBzaG93IGFzIG11Y2ggb2YgdGhlIG9iamVjdCBhcyBwb3NzaWJsZSwKKy8v
IHdoaWxlIGFsc28gdHJ5aW5nIHRvIGNlbnRlciB0aGUgc3ViZm9jdXMuCisvLyAgIEJlZm9yZToK
Ky8vICAgKy0tLS0tLS0tLS1WaWV3cG9ydC0tLS0tLS0tLSsKKy8vICAgICArLS0tLS0tLS0tLS0t
LS0tT2JqZWN0LS0tLS0tLS0tLS0tLS0rCisvLyAgICAgICAgICAgICAgICAgICAgICAgICArLVN1
YkZvY3VzLSsKKy8vCisvLyAgIEFmdGVyOgorLy8gICAgICAgICAgICAgKy0tLS0tLS0tLS1WaWV3
cG9ydC0tLS0tLS0tLSsKKy8vICAgICArLS0tLS0tLS0tLS0tLS0tT2JqZWN0LS0tLS0tLS0tLS0t
LS0rCisvLyAgICAgICAgICAgICAgICAgICAgICAgICArLVN1YkZvY3VzLSsKKy8vCiAvLyBXaGVu
IGNvbnN0cmFpbnRzIGNhbm5vdCBiZSBmdWxseSBzYXRpc2ZpZWQsIHRoZSBtaW4KIC8vIChsZWZ0
L3RvcCkgcG9zaXRpb24gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBtYXggKHJpZ2h0L2JvdHRv
bSkuCiAvLwogLy8gTm90ZSB0aGF0IHRoZSByZXR1cm4gdmFsdWUgcmVwcmVzZW50cyB0aGUgaWRl
YWwgbmV3IHNjcm9sbCBvZmZzZXQuCiAvLyBUaGlzIG1heSBiZSBvdXQgb2YgcmFuZ2UgLSB0aGUg
Y2FsbGluZyBmdW5jdGlvbiBzaG91bGQgY2xpcCB0aGlzCiAvLyB0byB0aGUgYXZhaWxhYmxlIHJh
bmdlLgotc3RhdGljIGludCBjb21wdXRlQmVzdFNjcm9sbE9mZnNldChpbnQgY3VycmVudFNjcm9s
bE9mZnNldCwgaW50IHN1YmZvY3VzTWluLCBpbnQgb2JqZWN0TWluLCBpbnQgb2JqZWN0TWF4LCBp
bnQgdmlld3BvcnRNaW4sIGludCB2aWV3cG9ydE1heCkKK3N0YXRpYyBpbnQgY29tcHV0ZUJlc3RT
Y3JvbGxPZmZzZXQoaW50IGN1cnJlbnRTY3JvbGxPZmZzZXQsIGludCBzdWJmb2N1c01pbiwgaW50
IHN1YmZvY3VzTWF4LCBpbnQgb2JqZWN0TWluLCBpbnQgb2JqZWN0TWF4LCBpbnQgdmlld3BvcnRN
aW4sIGludCB2aWV3cG9ydE1heCkKIHsKICAgICBpbnQgdmlld3BvcnRTaXplID0gdmlld3BvcnRN
YXggLSB2aWV3cG9ydE1pbjsKLQotICAgIC8vIElmIHRoZSBmb2N1cyBzaXplIGlzIGxhcmdlciB0
aGFuIHRoZSB2aWV3cG9ydCBzaXplLCBzaHJpbmsgaXQgaW4gdGhlCi0gICAgLy8gZGlyZWN0aW9u
IG9mIHN1YmZvY3VzLgorICAgIAorICAgIC8vIElmIHRoZSBvYmplY3Qgc2l6ZSBpcyBsYXJnZXIg
dGhhbiB0aGUgdmlld3BvcnQgc2l6ZSwgY29uc2lkZXIKKyAgICAvLyBvbmx5IGEgcG9ydGlvbiB0
aGF0J3MgYXMgbGFyZ2UgYXMgdGhlIHZpZXdwb3J0LCBjZW50ZXJpbmcgb24KKyAgICAvLyB0aGUg
c3ViZm9jdXMgYXMgbXVjaCBhcyBwb3NzaWJsZS4KICAgICBpZiAob2JqZWN0TWF4IC0gb2JqZWN0
TWluID4gdmlld3BvcnRTaXplKSB7Ci0gICAgICAgIC8vIFN1YmZvY3VzIG11c3QgYmUgd2l0aGlu
IGZvY3VzOgorICAgICAgICAvLyBTaW5jZSBpdCdzIGltcG9zc2libGUgdG8gZml0IHRoZSB3aG9s
ZSBvYmplY3QgaW4gdGhlCisgICAgICAgIC8vIHZpZXdwb3J0LCBleGl0IG5vdyBpZiB0aGUgc3Vi
Zm9jdXMgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIHZpZXdwb3J0LgorICAgICAgICBpZiAoc3ViZm9j
dXNNaW4gLSBjdXJyZW50U2Nyb2xsT2Zmc2V0ID49IHZpZXdwb3J0TWluCisgICAgICAgICAgICAm
JiBzdWJmb2N1c01heCAtIGN1cnJlbnRTY3JvbGxPZmZzZXQgPD0gdmlld3BvcnRNYXgpCisgICAg
ICAgICAgICByZXR1cm4gY3VycmVudFNjcm9sbE9mZnNldDsKKyAgICAgICAgCisgICAgICAgIC8v
IFN1YmZvY3VzIG11c3QgYmUgd2l0aGluIGZvY3VzLgogICAgICAgICBzdWJmb2N1c01pbiA9IHN0
ZDo6bWF4KHN1YmZvY3VzTWluLCBvYmplY3RNaW4pOworICAgICAgICBzdWJmb2N1c01heCA9IHN0
ZDo6bWluKHN1YmZvY3VzTWF4LCBvYmplY3RNYXgpOworICAgICAgICAKKyAgICAgICAgLy8gU3Vi
Zm9jdXMgbXVzdCBiZSBubyBsYXJnZXIgdGhhbiB0aGUgdmlld3BvcnQgc2l6ZTsgZmF2b3IgdG9w
L2xlZnQuCisgICAgICAgIGlmIChzdWJmb2N1c01heCAtIHN1YmZvY3VzTWluID4gdmlld3BvcnRT
aXplKQorICAgICAgICAgICAgc3ViZm9jdXNNYXggPSBzdWJmb2N1c01pbiArIHZpZXdwb3J0U2l6
ZTsKKyAgICAgICAgCisgICAgICAgIC8vIENvbXB1dGUgdGhlIHNpemUgb2YgYW4gb2JqZWN0IGNl
bnRlcmVkIG9uIHRoZSBzdWJmb2N1cywgdGhlIHNpemUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAg
ICBpbnQgY2VudGVyZWRPYmplY3RNaW4gPSAoc3ViZm9jdXNNaW4gKyBzdWJmb2N1c01heCAtIHZp
ZXdwb3J0U2l6ZSkgLyAyOworICAgICAgICBpbnQgY2VudGVyZWRPYmplY3RNYXggPSBjZW50ZXJl
ZE9iamVjdE1pbiArIHZpZXdwb3J0U2l6ZTsKIAotICAgICAgICAvLyBTdWJmb2N1cyBtdXN0IGJl
IG5vIGxhcmdlciB0aGFuIHRoZSB2aWV3cG9ydCBzaXplOyBmYXZvciB0b3AvbGVmdC4KLSAgICAg
ICAgaWYgKHN1YmZvY3VzTWluICsgdmlld3BvcnRTaXplID4gb2JqZWN0TWF4KQotICAgICAgICAg
ICAgb2JqZWN0TWluID0gb2JqZWN0TWF4IC0gdmlld3BvcnRTaXplOwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIG9iamVjdE1pbiA9IHN1YmZvY3VzTWluOwotICAgICAgICAgICAgb2JqZWN0
TWF4ID0gc3ViZm9jdXNNaW4gKyB2aWV3cG9ydFNpemU7Ci0gICAgICAgIH0KKyAgICAgICAgb2Jq
ZWN0TWluID0gc3RkOjptYXgob2JqZWN0TWluLCBjZW50ZXJlZE9iamVjdE1pbik7CisgICAgICAg
IG9iamVjdE1heCA9IHN0ZDo6bWluKG9iamVjdE1heCwgY2VudGVyZWRPYmplY3RNYXgpOwogICAg
IH0KLQorICAgIAogICAgIC8vIEV4aXQgbm93IGlmIHRoZSBmb2N1cyBpcyBhbHJlYWR5IHdpdGhp
biB0aGUgdmlld3BvcnQuCiAgICAgaWYgKG9iamVjdE1pbiAtIGN1cnJlbnRTY3JvbGxPZmZzZXQg
Pj0gdmlld3BvcnRNaW4KICAgICAgICAgJiYgb2JqZWN0TWF4IC0gY3VycmVudFNjcm9sbE9mZnNl
dCA8PSB2aWV3cG9ydE1heCkKICAgICAgICAgcmV0dXJuIGN1cnJlbnRTY3JvbGxPZmZzZXQ7Ci0K
LSAgICAvLyBTY3JvbGwgbGVmdCBpZiB3ZSdyZSB0b28gZmFyIHRvIHRoZSByaWdodC4KLSAgICBp
ZiAob2JqZWN0TWF4IC0gY3VycmVudFNjcm9sbE9mZnNldCA+IHZpZXdwb3J0TWF4KQotICAgICAg
ICByZXR1cm4gb2JqZWN0TWF4IC0gdmlld3BvcnRNYXg7Ci0KLSAgICAvLyBTY3JvbGwgcmlnaHQg
aWYgd2UncmUgdG9vIGZhciB0byB0aGUgbGVmdC4KLSAgICBpZiAob2JqZWN0TWluIC0gY3VycmVu
dFNjcm9sbE9mZnNldCA8IHZpZXdwb3J0TWluKQotICAgICAgICByZXR1cm4gb2JqZWN0TWluIC0g
dmlld3BvcnRNaW47Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIC8vIFRoaXMg
c2hvdWxkbid0IGhhcHBlbi4KLSAgICByZXR1cm4gY3VycmVudFNjcm9sbE9mZnNldDsKKyAgICAK
KyAgICAvLyBDZW50ZXIgdGhlIG9iamVjdCBpbiB0aGUgdmlld3BvcnQuCisgICAgcmV0dXJuIChv
YmplY3RNaW4gKyBvYmplY3RNYXggLSB2aWV3cG9ydE1pbiAtIHZpZXdwb3J0TWF4KSAvIDI7CiB9
Ci0KKyAgICAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNPbnNjcmVlbigpIGNvbnN0CiB7
ICAgCiAgICAgYm9vbCBpc09uc2NyZWVuID0gdHJ1ZTsKQEAgLTI0NDksMjIgKzI0NzQsMzQgQEAK
ICAgICAvLyBGSVhNRTogdW5jbGVhciBpZiB3ZSBuZWVkIExlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QuCiAgICAgSW50UmVjdCBzY3JvbGxWaXNpYmxlUmVjdCA9IHNjcm9sbGFibGVBcmVhLT52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOwogCisgICAgaWYgKCFzY3JvbGxQYXJlbnQtPmlzU2Nyb2xsVmlldygpKSB7CisgICAg
ICAgIG9iamVjdFJlY3QubW92ZUJ5KHNjcm9sbFBvc2l0aW9uKTsKKyAgICAgICAgb2JqZWN0UmVj
dC5tb3ZlQnkoLXNuYXBwZWRJbnRSZWN0KHNjcm9sbFBhcmVudC0+ZWxlbWVudFJlY3QoKSkubG9j
YXRpb24oKSk7CisgICAgfQorICAgIAogICAgIGludCBkZXNpcmVkWCA9IGNvbXB1dGVCZXN0U2Ny
b2xsT2Zmc2V0KAogICAgICAgICBzY3JvbGxQb3NpdGlvbi54KCksCi0gICAgICAgIG9iamVjdFJl
Y3QueCgpICsgc3ViZm9jdXMueCgpLAorICAgICAgICBvYmplY3RSZWN0LngoKSArIHN1YmZvY3Vz
LngoKSwgb2JqZWN0UmVjdC54KCkgKyBzdWJmb2N1cy5tYXhYKCksCiAgICAgICAgIG9iamVjdFJl
Y3QueCgpLCBvYmplY3RSZWN0Lm1heFgoKSwKICAgICAgICAgMCwgc2Nyb2xsVmlzaWJsZVJlY3Qu
d2lkdGgoKSk7CiAgICAgaW50IGRlc2lyZWRZID0gY29tcHV0ZUJlc3RTY3JvbGxPZmZzZXQoCiAg
ICAgICAgIHNjcm9sbFBvc2l0aW9uLnkoKSwKLSAgICAgICAgb2JqZWN0UmVjdC55KCkgKyBzdWJm
b2N1cy55KCksCisgICAgICAgIG9iamVjdFJlY3QueSgpICsgc3ViZm9jdXMueSgpLCBvYmplY3RS
ZWN0LnkoKSArIHN1YmZvY3VzLm1heFkoKSwKICAgICAgICAgb2JqZWN0UmVjdC55KCksIG9iamVj
dFJlY3QubWF4WSgpLAogICAgICAgICAwLCBzY3JvbGxWaXNpYmxlUmVjdC5oZWlnaHQoKSk7CiAK
ICAgICBzY3JvbGxQYXJlbnQtPnNjcm9sbFRvKEludFBvaW50KGRlc2lyZWRYLCBkZXNpcmVkWSkp
OwogCisgICAgLy8gQ29udmVydCB0aGUgc3ViZm9jdXMgaW50byB0aGUgY29vcmRpbmF0ZXMgb2Yg
dGhlIHNjcm9sbCBwYXJlbnQuCisgICAgSW50UmVjdCBuZXdTdWJmb2N1cyA9IHN1YmZvY3VzOwor
ICAgIEludFJlY3QgbmV3RWxlbWVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChlbGVtZW50UmVjdCgp
KTsKKyAgICBJbnRSZWN0IHNjcm9sbFBhcmVudFJlY3QgPSBzbmFwcGVkSW50UmVjdChzY3JvbGxQ
YXJlbnQtPmVsZW1lbnRSZWN0KCkpOworICAgIG5ld1N1YmZvY3VzLm1vdmUobmV3RWxlbWVudFJl
Y3QueCgpLCBuZXdFbGVtZW50UmVjdC55KCkpOworICAgIG5ld1N1YmZvY3VzLm1vdmUoLXNjcm9s
bFBhcmVudFJlY3QueCgpLCAtc2Nyb2xsUGFyZW50UmVjdC55KCkpOworICAgIAogICAgIC8vIFJl
Y3Vyc2l2ZWx5IG1ha2Ugc3VyZSB0aGUgc2Nyb2xsIHBhcmVudCBpdHNlbGYgaXMgdmlzaWJsZS4K
ICAgICBpZiAoc2Nyb2xsUGFyZW50LT5wYXJlbnRPYmplY3QoKSkKLSAgICAgICAgc2Nyb2xsUGFy
ZW50LT5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgICAgIHNjcm9sbFBhcmVudC0+c2Nyb2xs
VG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhuZXdTdWJmb2N1cyk7CiB9CiAKIHZvaWQgQWNjZXNz
aWJpbGl0eU9iamVjdDo6c2Nyb2xsVG9HbG9iYWxQb2ludChjb25zdCBJbnRQb2ludCYgZ2xvYmFs
UG9pbnQpIGNvbnN0CkBAIC0yNTAzLDEzICsyNTQwLDEzIEBACiAKICAgICAgICAgaW50IGRlc2ly
ZWRYID0gY29tcHV0ZUJlc3RTY3JvbGxPZmZzZXQoCiAgICAgICAgICAgICAwLAotICAgICAgICAg
ICAgb2JqZWN0UmVjdC54KCksCiAgICAgICAgICAgICBvYmplY3RSZWN0LngoKSwgb2JqZWN0UmVj
dC5tYXhYKCksCisgICAgICAgICAgICBvYmplY3RSZWN0LngoKSwgb2JqZWN0UmVjdC5tYXhYKCks
CiAgICAgICAgICAgICBwb2ludC54KCksIHBvaW50LngoKSk7CiAgICAgICAgIGludCBkZXNpcmVk
WSA9IGNvbXB1dGVCZXN0U2Nyb2xsT2Zmc2V0KAogICAgICAgICAgICAgMCwKLSAgICAgICAgICAg
IG9iamVjdFJlY3QueSgpLAogICAgICAgICAgICAgb2JqZWN0UmVjdC55KCksIG9iamVjdFJlY3Qu
bWF4WSgpLAorICAgICAgICAgICAgb2JqZWN0UmVjdC55KCksIG9iamVjdFJlY3QubWF4WSgpLAog
ICAgICAgICAgICAgcG9pbnQueSgpLCBwb2ludC55KCkpOwogICAgICAgICBvdXRlci0+c2Nyb2xs
VG8oSW50UG9pbnQoZGVzaXJlZFgsIGRlc2lyZWRZKSk7CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODY2MykKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBACisyMDE1LTA4LTE5
ICBDaHJpcyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IFdo
ZW4gbmF2aWdhdGluZyB0aGUgZWxlbWVudHMgb2YgYSBzY3JvbGxhYmxlIGVsZW1lbnQgd2l0aCBW
b2ljZU92ZXIsIHRoZSBzY3JvbGxUb3AoKSBwb3NpdGlvbiBvZiB0aGUgZWxlbWVudCBkb2VzIG5v
dCBwZXJtYW5lbnRseSBjaGFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNTcyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciBzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZv
Y3VzIGFuZCBzY3JvbGxUb0dsb2JhbFBvaW50LgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6CisgICAgICAgIChwcmVzc0NhbGxiYWNrKToKKyAg
ICAgICAgKHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayk6CisgICAgICAg
IChzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2spOgorICAgICAgICAoc2Nyb2xsVG9NYWtlVmlz
aWJsZUNhbGxiYWNrKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldEpTQ2xh
c3MpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
SU9TLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlz
aWJsZSk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNp
YmxlV2l0aFN1YkZvY3VzKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9s
bFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0
ZWRUZXh0UmFuZ2UpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudCk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXRo
UHJlc2NyaXB0c0Rlc2NyaXB0aW9uKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnNjcm9sbFRvTWFrZVZpc2libGUpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojppc1RleHRNYXJrZXJWYWxpZCk6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnRleHRNYXJrZXJGb3JJbmRleCk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUpOgor
ICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlz
aWJsZVdpdGhTdWJGb2N1cyk6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnN1cHBvcnRlZEFjdGlvbnMpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjptYXRoUG9zdHNjcmlwdHNEZXNjcmlwdGlvbik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om1hdGhQcmVzY3JpcHRzRGVzY3JpcHRpb24pOgorICAgICAgICAqIFdlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgorICAg
ICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSk6CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQpOgorICAgICAgICAo
V1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZv
Y3VzKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2VsZWN0ZWRUZXh0
UmFuZ2UpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyk6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKToKKwog
MjAxNS0wOC0xOSAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEJ1aWxkIFRlc3RXVEYgb24gTWFjIHdpdGggQ01ha2UuCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24g
MTg4NjU1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY5MCw2ICs2OTAsMzIgQEAKICAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIHNjcm9sbFRv
TWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCit7CisgICAgdW5zaWduZWQgeCA9IDAsIHkgPSAwLCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7
CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gNCkgeworICAgICAgICB4ID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICAgICAgeSA9IEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgICAgIHdp
ZHRoID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1syXSwgZXhjZXB0aW9uKTsK
KyAgICAgICAgaGVpZ2h0ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1szXSwg
ZXhjZXB0aW9uKTsKKyAgICB9CisgICAgCisgICAgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnNj
cm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCitzdGF0aWMgSlNWYWx1
ZVJlZiBzY3JvbGxUb0dsb2JhbFBvaW50Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQoreworICAgIHVuc2lnbmVkIHggPSAwLCB5ID0gMDsKKyAgICBpZiAoYXJndW1lbnRDb3Vu
dCA9PSAyKSB7CisgICAgICAgIHggPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzBdLCBleGNlcHRpb24pOworICAgICAgICB5ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICB9CisKKyAgICB0b0FYRWxlbWVudCh0aGlzT2Jq
ZWN0KS0+c2Nyb2xsVG9HbG9iYWxQb2ludCh4LCB5KTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIHNjcm9sbFRvTWFrZVZp
c2libGVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgdG9BWEVs
ZW1lbnQodGhpc09iamVjdCktPnNjcm9sbFRvTWFrZVZpc2libGUoKTsKQEAgLTE3MDAsNiArMTcy
Niw4IEBACiAgICAgICAgIHsgInNldFNlbGVjdGVkVmlzaWJsZVRleHRSYW5nZSIsIHNldFNlbGVj
dGVkVmlzaWJsZVRleHRSYW5nZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNlbGVjdGVk
Q2hpbGRBdEluZGV4Iiwgc2VsZWN0ZWRDaGlsZEF0SW5kZXhDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJzY3JvbGxUb01ha2VWaXNpYmxlIiwgc2Nyb2xsVG9NYWtlVmlzaWJsZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCisgICAgICAgIHsgInNjcm9sbFRvR2xvYmFsUG9pbnQiLCBzY3JvbGxUb0dsb2Jh
bFBvaW50Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAic2Nyb2xsVG9NYWtlVmlzaWJsZVdp
dGhTdWJGb2N1cyIsIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXNDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogI2lmIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oRUZMKQogICAgICAgICB7ICJjaGFy
YWN0ZXJBdE9mZnNldCIsIGNoYXJhY3RlckF0T2Zmc2V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAid29yZEF0T2Zmc2V0Iiwgd29yZEF0T2Zmc2V0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50SU9TLm1tCShyZXZpc2lvbiAxODg2NTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9pb3Mv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjgwLDYgKzY4
MCwxNiBAQAogICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKIH0KIAordm9pZCBBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKwor
dm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4LCBp
bnQgeSkKK3sKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50Cit9CisKIEpTU3RyaW5nUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKIHsKICAgICByZXR1cm4gSlNT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycygwLCAwKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZpc2lv
biAxODg2NTUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzYsNiArNzYsOCBAQAogLSAoTlNVSW50ZWdl
cilhY2Nlc3NpYmlsaXR5SW5kZXhPZkNoaWxkOihpZCljaGlsZDsKIC0gKE5TVUludGVnZXIpYWNj
ZXNzaWJpbGl0eUFycmF5QXR0cmlidXRlQ291bnQ6KE5TU3RyaW5nICopYXR0cmlidXRlOwogLSAo
dm9pZClfYWNjZXNzaWJpbGl0eVNldFRlc3RWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihO
U1N0cmluZyopYXR0cmlidXRlTmFtZTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTY3JvbGxUb01h
a2VWaXNpYmxlV2l0aFN1YkZvY3VzOihOU1JlY3QpcmVjdDsKKy0gKHZvaWQpX2FjY2Vzc2liaWxp
dHlTY3JvbGxUb0dsb2JhbFBvaW50OihOU1BvaW50KXBvaW50OwogQGVuZAogCiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KFBsYXRmb3JtVUlFbGVtZW50IGVs
ZW1lbnQpCkBAIC0xODI3LDcgKzE4MjksNiBAQAogICAgIHJldHVybiBudWxscHRyOwogfQogCi0K
IHZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZSgpCiB7CiAg
ICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCkBAIC0xODM3LDEwICsxODM4LDE0IEBACiAKIHZv
aWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1
cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICAvLyBGSVhNRTog
aW1wbGVtZW50CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgW21fZWxlbWVudCBf
YWNjZXNzaWJpbGl0eVNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXM6TlNNYWtlUmVjdCh4
LCB5LCB3aWR0aCwgaGVpZ2h0KV07CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQogCiB2
b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGlu
dCB5KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQ
VElPTlMKKyAgICBbbV9lbGVtZW50IF9hY2Nlc3NpYmlsaXR5U2Nyb2xsVG9HbG9iYWxQb2ludDpO
U01ha2VQb2ludCh4LCB5KV07CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUwogfQpJbmRleDog
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODg2NTUpCisrKyBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQsNiArMjI0LDggQEAKIGJvb2wgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6aXNUZXh0TWFya2VyVmFsaWQoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKSB7
IHJldHVybiBmYWxzZTsgfQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6dGV4dE1hcmtlckZvckluZGV4KGludCkgeyByZXR1cm4gMDsg
fQogdm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlKCkgeyB9
Cit2b2lkIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvR2xvYmFsUG9pbnQoaW50LCBp
bnQpIHsgfQordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxl
V2l0aFN1YkZvY3VzKGludCwgaW50LCBpbnQsIGludCkgeyB9CiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c3VwcG9ydGVkQWN0aW9ucygpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjptYXRoUG9zdHNjcmlwdHNEZXNjcmlwdGlvbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXRoUHJlc2Ny
aXB0c0Rlc2NyaXB0aW9uKCkgY29uc3QgeyByZXR1cm4gMDsgfQpJbmRleDogVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmgJKHJldmlzaW9uIDE4ODY1NSkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjUsNiArMjI1LDggQEAKICAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ+IHZlcnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Q7CiAKICAgICB2b2lkIHNjcm9sbFRvTWFrZVZp
c2libGUoKTsKKyAgICB2b2lkIHNjcm9sbFRvR2xvYmFsUG9pbnQoaW50IHgsIGludCB5KTsKKyAg
ICB2b2lkIHNjcm9sbFRvTWFrZVZpc2libGVXaXRoU3ViRm9jdXMoaW50IHgsIGludCB5LCBpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwogICAgIAogICAgIC8vIFRleHQgbWFya2Vycy4KICAgICBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+IGxpbmVUZXh0TWFya2VyUmFuZ2VG
b3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CkluZGV4OiBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwJKHJldmlzaW9uIDE4ODY1NSkK
KysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTE2OSw2ICsxNjksOSBAQAog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IHZlcnRpY2FsU2Ny
b2xsYmFyOwogCiAgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgdm9pZCBzY3Jv
bGxUb0dsb2JhbFBvaW50KGludCB4LCBpbnQgeSk7CisgICAgdm9pZCBzY3JvbGxUb01ha2VWaXNp
YmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKwog
ICAgIHZvaWQgdGFrZUZvY3VzKCk7CiAgICAgYm9vbGVhbiBzY3JvbGxQYWdlRG93bigpOwogICAg
IGJvb2xlYW4gc2Nyb2xsUGFnZVVwKCk7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0lu
amVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50QXRrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2F0ay9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50QXRrLmNwcAkocmV2aXNpb24gMTg4NjU1KQorKysgVG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9hdGsvQWNjZXNzaWJpbGl0eVVJRWxlbWVudEF0ay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5MzUsNiArMTkzNSwxNiBAQAogewogICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKIH0KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9H
bG9iYWxQb2ludChpbnQgeCwgaW50IHkpCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQor
ICAgIAordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0
aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKK30KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnN1cHBvcnRlZEFjdGlvbnMoKSBjb25zdAogewpJbmRleDogVG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCShyZXZpc2lvbiAxODg2NTUpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OTksNiArNjk5LDE0IEBACiB2b2lk
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNjcm9sbFRvTWFrZVZpc2libGUoKQogewogfQorICAg
IAordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzY3JvbGxUb0dsb2JhbFBvaW50KGludCB4
LCBpbnQgeSkKK3sKK30KKyAgICAKK3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xs
VG9NYWtlVmlzaWJsZVdpdGhTdWJGb2N1cyhpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhl
aWdodCkKK3sKK30KIAogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnNlbGVjdGVkVGV4dFJhbmdlKCkKIHsKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNpb24gMTg4NjU1KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5t
bQkod29ya2luZyBjb3B5KQpAQCAtODAsNiArODAsOCBAQAogLSAoTlNVSW50ZWdlcilhY2Nlc3Np
YmlsaXR5SW5kZXhPZkNoaWxkOihpZCljaGlsZDsKIC0gKE5TVUludGVnZXIpYWNjZXNzaWJpbGl0
eUFycmF5QXR0cmlidXRlQ291bnQ6KE5TU3RyaW5nICopYXR0cmlidXRlOwogLSAodm9pZClfYWNj
ZXNzaWJpbGl0eVNldFRlc3RWYWx1ZTooaWQpdmFsdWUgZm9yQXR0cmlidXRlOihOU1N0cmluZyop
YXR0cmlidXRlTmFtZTsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTY3JvbGxUb01ha2VWaXNpYmxl
V2l0aFN1YkZvY3VzOihOU1JlY3QpcmVjdDsKKy0gKHZvaWQpX2FjY2Vzc2liaWxpdHlTY3JvbGxU
b0dsb2JhbFBvaW50OihOU1BvaW50KXBvaW50OwogQGVuZAogCiBuYW1lc3BhY2UgV1RSIHsKQEAg
LTEzNjcsNiArMTM2OSwyMCBAQAogICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKIH0KICAgICAK
K3ZvaWQgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6c2Nyb2xsVG9HbG9iYWxQb2ludChpbnQgeCwg
aW50IHkpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgW21fZWxlbWVudCBf
YWNjZXNzaWJpbGl0eVNjcm9sbFRvR2xvYmFsUG9pbnQ6TlNNYWtlUG9pbnQoeCwgeSldOworICAg
IEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpzY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzKGludCB4LCBpbnQgeSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQoreworICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIFttX2Vs
ZW1lbnQgX2FjY2Vzc2liaWxpdHlTY3JvbGxUb01ha2VWaXNpYmxlV2l0aFN1YkZvY3VzOk5TTWFr
ZVJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCldOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMK
K30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnNl
bGVjdGVkVGV4dFJhbmdlKCkKIHsKICAgICBOU1JhbmdlIHJhbmdlID0gTlNNYWtlUmFuZ2UoTlNO
b3RGb3VuZCwgMCk7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODg2NjMpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxNS0wOC0xOSAgQ2hy
aXMgRmxlaXphY2ggIDxjZmxlaXphY2hAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBXaGVuIG5h
dmlnYXRpbmcgdGhlIGVsZW1lbnRzIG9mIGEgc2Nyb2xsYWJsZSBlbGVtZW50IHdpdGggVm9pY2VP
dmVyLCB0aGUgc2Nyb2xsVG9wKCkgcG9zaXRpb24gb2YgdGhlIGVsZW1lbnQgZG9lcyBub3QgcGVy
bWFuZW50bHkgY2hhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMjU3MjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9i
YWwtcG9pbnQtaWZyYW1lLW5lc3RlZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJh
bWUuaHRtbDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFs
LXBvaW50LW1haW4td2luZG93LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1haW4td2luZG93Lmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1uZXN0ZWQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9i
YWwtcG9pbnQtbmVzdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLW1ha2UtdmlzaWJsZS1kaXYtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtZGl2LW92ZXJmbG93
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Utdmlz
aWJsZS1pZnJhbWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5
L3Njcm9sbC10by1tYWtlLXZpc2libGUtaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1u
ZXN0ZWQtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1t
YWtlLXZpc2libGUtbmVzdGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5lc3RlZC5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBhY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtd2l0aC1zdWJmb2N1cy1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1h
a2UtdmlzaWJsZS13aXRoLXN1YmZvY3VzLmh0bWw6IEFkZGVkLgorCiAyMDE1LTA4LTE5ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgb3V0bGluZS1zdHlsZTogYXV0
byBsZWF2ZXMgYml0cyBiZWhpbmQgb24gc3RyYXZhJ3MgZmx5Ynkgdmlldy4KSW5kZXg6IExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRv
LWdsb2JhbC1wb2ludC1pZnJhbWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LWlmcmFtZS1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNyBAQAorVGVzdHMgdGhhdCBzY3JvbGxp
bmcgdG8gbW92ZSBhbiBlbGVtZW50IHRvIGEgc3BlY2lmaWMgcG9pbnQgc3VjY2Vzc2Z1bGx5IHNj
cm9sbHMgYW4gaWZyYW1lLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworNTAwMC1w
aXhlbCBib3gKKworNTAwMC1waXhlbCBib3gKK1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAK
K1BBU1MgZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyB0YXJnZXQuZ2V0Qm91bmRp
bmdDbGllbnRSZWN0KCkudG9wIGlzIDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVj
dCgpLnRvcCBpcyAzMDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBp
cyAzMDAwCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50
LWlmcmFtZS1uZXN0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRv
LWdsb2JhbC1wb2ludC1pZnJhbWUtbmVzdGVkLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE4IEBACitUZXN0cyB0aGF0IHNjcm9sbGluZyB0byBtb3ZlIGFuIGVsZW1lbnQg
dG8gYSBzcGVjaWZpYyBwb2ludCBzdWNjZXNzZnVsbHkgc2Nyb2xscyBib3RoIGFuIGlmcmFtZSBh
bmQgYSBkaXYgd2l0aCBvdmVyZmxvdy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
KzUwMDAtcGl4ZWwgYm94CisKKzUwMDAtcGl4ZWwgYm94CitQQVNTIHdpbmRvdy5wYWdlWU9mZnNl
dCBpcyAwCitQQVNTIGZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAKK1BBU1MgY29udGFpbmVy
LnNjcm9sbFRvcCBpcyAwCitQQVNTIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ag
aXMgMAorUEFTUyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDMwMAorUEFT
UyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDMwMDAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLW5lc3RlZC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2Jh
bC1wb2ludC1pZnJhbWUtbmVzdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtaWZyYW1lLW5lc3RlZC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisK
KzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xp
ZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisKKzwhLS0gVGhl
IGNvbnRlbnRzIG9mIHRoaXMgaWZyYW1lLCBtb3JlIG5pY2VseSBmb3JtYXR0ZWQ6CisgPGJvZHk+
CisgICA8c3R5bGU+CisgICAgIGJ1dHRvbiB7CisgICAgICAgYm9yZGVyOiAwOworICAgICB9Cisg
ICA8L3N0eWxlPgorICAgPGRpdiBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0
OiA1MDAwcHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2PgorICAgPGRpdiBpZD0nY29udGFpbmVyJyBz
dHlsZT0naGVpZ2h0OiAxMDBweDsgb3ZlcmZsb3c6IHNjcm9sbCc+CisgICAgIDxkaXYgc3R5bGU9
J2JvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1waXhlbCBib3g8
L2Rpdj4KKyAgICAgPGJ1dHRvbiBpZD0ndGFyZ2V0Jz5UYXJnZXQ8L2J1dHRvbj4KKyAgICAgPGRp
diBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Jz41MDAwLXBp
eGVsIGJveDwvZGl2PgorICAgPC9kaXY+CisgICA8ZGl2IHN0eWxlPSdib3JkZXI6IDFweCBzb2xp
ZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgIDwvYm9keT4K
KyAtLT4KKzxpZnJhbWUgaWQ9ImZyYW1lIiBzcmM9ImRhdGE6dGV4dC9odG1sLDxib2R5PjxzdHls
ZT5idXR0b24geyBib3JkZXI6IDA7IH08L3N0eWxlPjxkaXYgc3R5bGU9J2JvcmRlcjogMXB4IHNv
bGlkICMwMDA7IGhlaWdodDogNTAwMHB4Oyc+NTAwMC1waXhlbCBib3g8L2Rpdj48ZGl2IGlkPSdj
b250YWluZXInIHN0eWxlPSdoZWlnaHQ6IDEwMHB4OyBvdmVyZmxvdzogc2Nyb2xsJz48ZGl2IHN0
eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwg
Ym94PC9kaXY+PGJ1dHRvbiBpZD0ndGFyZ2V0Jz5UYXJnZXQ8L2J1dHRvbj48ZGl2IHN0eWxlPSdi
b3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94PC9k
aXY+PC9kaXY+PGRpdiBzdHlsZT0nYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAw
cHg7Jz41MDAwLXBpeGVsIGJveDwvZGl2PjwvYm9keT4iPjwvaWZyYW1lPgorCis8ZGl2IHN0eWxl
PSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94
PC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRp
b24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1vdmUgYW4gZWxlbWVudCB0byBhIHNwZWNpZmlj
IHBvaW50IHN1Y2Nlc3NmdWxseSBzY3JvbGxzIGJvdGggYW4gaWZyYW1lIGFuZCBhIGRpdiB3aXRo
IG92ZXJmbG93LiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5u
ZXIud2FpdFVudGlsRG9uZSgpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1
bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgd2luZG93LmZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImZyYW1lIik7CisgICAgd2luZG93LmZyYW1lV2luZG93ID0gZnJhbWUuY29udGVudFdp
bmRvdzsKKyAgICB3aW5kb3cuZnJhbWVEb2MgPSBmcmFtZVdpbmRvdy5kb2N1bWVudDsKKyAgICB3
aW5kb3cuY29udGFpbmVyID0gZnJhbWVEb2MuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOwor
ICAgIHdpbmRvdy50YXJnZXQgPSBmcmFtZURvYy5nZXRFbGVtZW50QnlJZCgidGFyZ2V0Iik7CisK
KyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIHRhcmdl
dC5mb2N1cygpOworICAgICAgICB2YXIgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgIH0KKworICAgIC8vIFJlc2V0IHRo
ZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbiAoc2luY2UgY2FsbGluZyBmb2N1cygpIGNhbiBzY3Jv
bGwgdGhlIHBhZ2UgdG9vKS4KKyAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisgICAgZnJhbWVX
aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisgICAgY29udGFpbmVyLnNjcm9sbFRvcCA9IDA7CisgICAg
c2hvdWxkQmUoIndpbmRvdy5wYWdlWU9mZnNldCIsICIwIik7CisgICAgc2hvdWxkQmUoImZyYW1l
V2luZG93LnBhZ2VZT2Zmc2V0IiwgIjAiKTsKKyAgICBzaG91bGRCZSgiY29udGFpbmVyLnNjcm9s
bFRvcCIsICIwIik7CisKKyAgICAvLyBTY3JvbGwgdG8gdmFyaW91cyBsb2NhdGlvbnMgYW5kIGNo
ZWNrLgorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRh
cmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9HbG9iYWxQb2ludCgwLCAwKTsKKyAgICBzaG91
bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIsICIwIik7CisgICAgaWYg
KHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0QWNjZXNzaWJs
ZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDMwMCk7CisgICAgc2hvdWxkQmUoInRhcmdl
dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMzAwIik7CisgICAgaWYgKHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5z
Y3JvbGxUb0dsb2JhbFBvaW50KDAsIDMwMDApOworICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91
bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjMwMDAiKTsKKworICAgIGZpbmlzaEpTVGVzdCgpOwor
fQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0aW9uKCkgeworICAgIHNl
dFRpbWVvdXQocnVuVGVzdCwgMTApOworfSwgZmFsc2UpOworCis8L3NjcmlwdD4KKworPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xv
YmFsLXBvaW50LWlmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1pZnJhbWUu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGRpdiBzdHlsZT0iYm9yZGVyOiAx
cHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorCis8
aWZyYW1lIGlkPSJmcmFtZSIgc3JjPSJkYXRhOnRleHQvaHRtbCw8Ym9keT48c3R5bGU+YnV0dG9u
IHsgYm9yZGVyOiAwOyB9PC9zdHlsZT48ZGl2IHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjMDAw
OyBoZWlnaHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94PC9kaXY+PGJ1dHRvbiBpZD0ndGFyZ2V0
Jz5UYXJnZXQ8L2J1dHRvbj48ZGl2IHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWln
aHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94PC9kaXY+PC9ib2R5PiI+PC9pZnJhbWU+CisKKzxk
aXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1w
aXhlbCBib3g8L2Rpdj4KKworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+Citk
ZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzY3JvbGxpbmcgdG8gbW92ZSBhbiBlbGVtZW50IHRvIGEg
c3BlY2lmaWMgcG9pbnQgc3VjY2Vzc2Z1bGx5IHNjcm9sbHMgYW4gaWZyYW1lLiIpOworCitpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOwor
Cit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7Cisg
ICAgd2luZG93LmZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImZyYW1lIik7CisgICAg
d2luZG93LmZyYW1lV2luZG93ID0gZnJhbWUuY29udGVudFdpbmRvdzsKKyAgICB3aW5kb3cuZnJh
bWVEb2MgPSBmcmFtZVdpbmRvdy5kb2N1bWVudDsKKyAgICB3aW5kb3cudGFyZ2V0ID0gZnJhbWVE
b2MuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmls
aXR5Q29udHJvbGxlcikgeworICAgICAgICB0YXJnZXQuZm9jdXMoKTsKKyAgICAgICAgdmFyIHRh
cmdldEFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxl
bWVudDsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwgcG9zaXRpb24g
KHNpbmNlIGNhbGxpbmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbykuCisgICAgd2lu
ZG93LnNjcm9sbFRvKDAsIDApOworICAgIGZyYW1lV2luZG93LnNjcm9sbFRvKDAsIDApOworICAg
IHNob3VsZEJlKCJ3aW5kb3cucGFnZVlPZmZzZXQiLCAiMCIpOworICAgIHNob3VsZEJlKCJmcmFt
ZVdpbmRvdy5wYWdlWU9mZnNldCIsICIwIik7CisKKyAgICAvLyBTY3JvbGwgdG8gdmFyaW91cyBs
b2NhdGlvbnMgYW5kIGNoZWNrLgorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xs
ZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9HbG9iYWxQb2ludCgw
LCAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIs
ICIwIik7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAg
dGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDMwMCk7CisgICAg
c2hvdWxkQmUoInRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMzAwIik7Cisg
ICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0QWNj
ZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDMwMDApOworICAgIHNob3VsZEJl
KCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjMwMDAiKTsKKworICAgIGZp
bmlzaEpTVGVzdCgpOworfQorCit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZ1bmN0
aW9uKCkgeworICAgIHNldFRpbWVvdXQocnVuVGVzdCwgMTApOworfSwgZmFsc2UpOworCis8L3Nj
cmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1haW4td2luZG93LWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQt
bWFpbi13aW5kb3ctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNj
ZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50LW1haW4td2luZG93LWV4cGVjdGVkLnR4
dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitUZXN0cyB0aGF0IHNjcm9sbGluZyBh
biBlbGVtZW50IHRvIGEgc3BlY2lmaWMgcG9pbnQgc3VjY2Vzc2Z1bGx5IHNjcm9sbHMgdGhlIG1h
aW4gd2luZG93LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworNTAwMC1waXhlbCBi
b3gKK1RhcmdldAorNTAwMC1waXhlbCBib3gKK1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAK
K1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyAwCitQQVNTIHRhcmdl
dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMzAwCitQQVNTIHRhcmdldC5nZXRCb3Vu
ZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgMzAwMAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
c2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1tYWluLXdpbmRvdy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLWdsb2JhbC1wb2ludC1tYWluLXdpbmRv
dy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwt
dG8tZ2xvYmFsLXBvaW50LW1haW4td2luZG93Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC5qcyI+PC9zY3JpcHQ+Cis8c3R5bGU+CitidXR0b24geworICBib3JkZXI6IDA7Cit9Cis8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgorCis8ZGl2
IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4
ZWwgYm94PC9kaXY+Cis8YnV0dG9uIGlkPSJ0YXJnZXQiPlRhcmdldDwvYnV0dG9uPgorPGRpdiBz
dHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVs
IGJveDwvZGl2PgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KK2Rlc2Ny
aXB0aW9uKCJUZXN0cyB0aGF0IHNjcm9sbGluZyBhbiBlbGVtZW50IHRvIGEgc3BlY2lmaWMgcG9p
bnQgc3VjY2Vzc2Z1bGx5IHNjcm9sbHMgdGhlIG1haW4gd2luZG93LiIpOworCitmdW5jdGlvbiBy
dW5UZXN0KCkgeworICAgIHZhciB0YXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFy
Z2V0Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAg
ICAgIHRhcmdldC5mb2N1cygpOworICAgICAgICB2YXIgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdCA9
IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgIH0KKworICAgIC8v
IFJlc2V0IHRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbiAoc2luY2UgY2FsbGluZyBmb2N1cygp
IGNhbiBzY3JvbGwgdGhlIHBhZ2UgdG9vKS4KKyAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7Cisg
ICAgc2hvdWxkQmUoIndpbmRvdy5wYWdlWU9mZnNldCIsICIwIik7CisKKyAgICAvLyBTY3JvbGwg
dG8gdmFyaW91cyBsb2NhdGlvbnMgYW5kIGNoZWNrLgorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9H
bG9iYWxQb2ludCgwLCAwKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50
UmVjdCgpLnRvcCIsICIwIik7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxl
cikKKyAgICAgICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAs
IDMwMCk7CisgICAgc2hvdWxkQmUoInRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ai
LCAiMzAwIik7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAg
ICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDMwMDApOwor
ICAgIHNob3VsZEJlKCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjMwMDAi
KTsKKworICAgIGZpbmlzaEpTVGVzdCgpOworfQorCitydW5UZXN0KCk7CisKKzwvc2NyaXB0Pgor
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9s
bC10by1nbG9iYWwtcG9pbnQtbmVzdGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtbmVzdGVkLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xs
LXRvLWdsb2JhbC1wb2ludC1uZXN0ZWQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjMgQEAKK1Rlc3RzIHRoYXQgc2Nyb2xsaW5nIGFuIGVsZW1lbnQgdG8gYSBzcGVjaWZp
YyBwb2ludCBjYW4gc3VjY2Vzc2Z1bGx5IHNjcm9sbCBtdWx0aXBsZSBuZXN0ZWQgc2Nyb2xsaW5n
IHZpZXdzJy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKzUwMDAtcGl4ZWwgYm94
Cis1MDAwLXBpeGVsIGJveAorNTAwMC1waXhlbCBib3gKK1RhcmdldAorNTAwMC1waXhlbCBib3gK
KzUwMDAtcGl4ZWwgYm94Cis1MDAwLXBpeGVsIGJveAorUEFTUyB3aW5kb3cucGFnZVlPZmZzZXQg
aXMgMAorUEFTUyBvdXRlckNvbnRhaW5lci5zY3JvbGxUb3AgaXMgMAorUEFTUyBpbm5lckNvbnRh
aW5lci5zY3JvbGxUb3AgaXMgMAorUEFTUyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCku
dG9wIGlzID49IDE1MDAwCitQQVNTIHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3Ag
aXMgMAorUEFTUyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDMwMAorUEFT
UyB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIGlzIDMwMDAKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1nbG9iYWwtcG9pbnQtbmVzdGVkLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tZ2xvYmFsLXBvaW50
LW5lc3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9z
Y3JvbGwtdG8tZ2xvYmFsLXBvaW50LW5lc3RlZC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QuanMiPjwvc2NyaXB0PgorPHN0eWxlPgorYnV0dG9uIHsKKyAgYm9yZGVyOiAwOworfQorPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGRp
diBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBp
eGVsIGJveDwvZGl2PgorCis8ZGl2IGlkPSJvdXRlcl9jb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6
IDEwMHB4OyBvdmVyZmxvdzogc2Nyb2xsIj4KKyAgPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29s
aWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorICA8ZGl2IGlk
PSJpbm5lcl9jb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6IDEwMHB4OyBvdmVyZmxvdzogc2Nyb2xs
Ij4KKyAgICA8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBw
eDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgICAgPGJ1dHRvbiBpZD0idGFyZ2V0Ij5UYXJnZXQ8
L2J1dHRvbj4KKyAgICA8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6
IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+CisgIDwvZGl2PgorICA8ZGl2IHN0eWxlPSJi
b3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9k
aXY+Cis8L2Rpdj4KKworPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0
OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorCis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKworPHNjcmlwdD4KK2Rlc2NyaXB0aW9uKCJUZXN0cyB0aGF0IHNjcm9sbGluZyBhbiBlbGVt
ZW50IHRvIGEgc3BlY2lmaWMgcG9pbnQgY2FuIHN1Y2Nlc3NmdWxseSBzY3JvbGwgbXVsdGlwbGUg
bmVzdGVkIHNjcm9sbGluZyB2aWV3cycuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAg
d2luZG93Lm91dGVyQ29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dGVyX2Nv
bnRhaW5lciIpOworICAgIHdpbmRvdy5pbm5lckNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJpbm5lcl9jb250YWluZXIiKTsKKyAgICB3aW5kb3cudGFyZ2V0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoInRhcmdldCIpOworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikgeworICAgICAgICB0YXJnZXQuZm9jdXMoKTsKKyAgICAgICAgdmFyIHRhcmdl
dEFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVu
dDsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwgcG9zaXRpb25zIChz
aW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9sbCB0aGUgcGFnZSB0b28pLgorICAgIHdpbmRv
dy5zY3JvbGxUbygwLCAwKTsKKyAgICBvdXRlckNvbnRhaW5lci5zY3JvbGxUb3AgPSAwOworICAg
IGlubmVyQ29udGFpbmVyLnNjcm9sbFRvcCA9IDA7CisgICAgc2hvdWxkQmUoIndpbmRvdy5wYWdl
WU9mZnNldCIsICIwIik7CisgICAgc2hvdWxkQmUoIm91dGVyQ29udGFpbmVyLnNjcm9sbFRvcCIs
ICIwIik7CisgICAgc2hvdWxkQmUoImlubmVyQ29udGFpbmVyLnNjcm9sbFRvcCIsICIwIik7Cisg
ICAgc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoInRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJl
Y3QoKS50b3AiLCAiMTUwMDAiKTsKKworICAgIC8vIFNjcm9sbCB0byB2YXJpb3VzIGxvY2F0aW9u
cyBhbmQgY2hlY2suCisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQor
ICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMCk7
CisgICAgc2hvdWxkQmUoInRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMCIp
OworCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFy
Z2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb0dsb2JhbFBvaW50KDAsIDMwMCk7CisgICAgc2hv
dWxkQmUoInRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMzAwIik7CisKKyAg
ICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nl
c3NpYmxlT2JqZWN0LnNjcm9sbFRvR2xvYmFsUG9pbnQoMCwgMzAwMCk7CisgICAgc2hvdWxkQmUo
InRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AiLCAiMzAwMCIpOworCisgIGZpbmlz
aEpTVGVzdCgpOworfQorCitydW5UZXN0KCk7CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2li
bGUtZGl2LW92ZXJmbG93LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtZGl2LW92ZXJmbG93LWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRv
LW1ha2UtdmlzaWJsZS1kaXYtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTkgQEAKK1Rlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1ha2UgYW4gZWxlbWVudCB2
aXNpYmxlIHN1Y2Nlc3NmdWxseSBzY3JvbGxzIGFuIGFyYml0cmFyeSBIVE1MIGVsZW1lbnQgdGhh
dCBoYXMgQ1NTIG92ZXJmbG93IHNldCB0byAnc2Nyb2xsJy4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1VwcGVyIFRhcmdldAorNTAwMC1waXhlbCBib3gKK0xvd2VyIFRhcmdldAor
UEFTUyBjb250YWluZXIuc2Nyb2xsVG9wIGlzIDAKK1BBU1MgY29udGFpbmVyLnNjcm9sbFRvcCA+
PSBtaW5ZT2Zmc2V0IGlzIHRydWUKK1BBU1MgY29udGFpbmVyLnNjcm9sbFRvcCA8PSBtYXhZT2Zm
c2V0IGlzIHRydWUKK1BBU1MgY29udGFpbmVyLnNjcm9sbFRvcCA+PSBtaW5ZT2Zmc2V0IGlzIHRy
dWUKK1BBU1MgY29udGFpbmVyLnNjcm9sbFRvcCA8PSBtYXhZT2Zmc2V0IGlzIHRydWUKK1BBU1Mg
Y29udGFpbmVyLnNjcm9sbFRvcCA+PSBtaW5ZT2Zmc2V0IGlzIHRydWUKK1BBU1MgY29udGFpbmVy
LnNjcm9sbFRvcCA8PSBtYXhZT2Zmc2V0IGlzIHRydWUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmls
aXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtZGl2LW92ZXJmbG93Lmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLWRpdi1v
dmVyZmxvdy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9z
Y3JvbGwtdG8tbWFrZS12aXNpYmxlLWRpdi1vdmVyZmxvdy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzEgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2Vz
L2pzLXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisKKzxwIGlkPSJkZXNjcmlw
dGlvbiI+PC9wPgorCis8ZGl2IGlkPSJjb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6IDEwMHB4OyBv
dmVyZmxvdzogc2Nyb2xsIj4KKyAgPGJ1dHRvbiBpZD0idXBwZXJfdGFyZ2V0Ij5VcHBlciBUYXJn
ZXQ8L2J1dHRvbj4KKyAgPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0
OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJveDwvZGl2PgorICA8YnV0dG9uIGlkPSJsb3dlcl90YXJn
ZXQiPkxvd2VyIFRhcmdldDwvYnV0dG9uPgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorCis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1h
a2UgYW4gZWxlbWVudCB2aXNpYmxlIHN1Y2Nlc3NmdWxseSBzY3JvbGxzIGFuIGFyYml0cmFyeSBI
VE1MIGVsZW1lbnQgdGhhdCBoYXMgQ1NTIG92ZXJmbG93IHNldCB0byAnc2Nyb2xsJy4iKTsKKwor
ZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB3aW5kb3cuY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOworICAgIHZhciB1cHBlclRhcmdldCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJ1cHBlcl90YXJnZXQiKTsKKyAgICB2YXIgbG93ZXJUYXJnZXQgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG93ZXJfdGFyZ2V0Iik7CisKKyAgICBpZiAod2luZG93
LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAgIGxvd2VyVGFyZ2V0LmZvY3VzKCk7
CisgICAgICAgIHZhciBsb3dlclRhcmdldEFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAgdXBwZXJUYXJnZXQuZm9jdXMoKTsK
KyAgICAgICAgdmFyIHVwcGVyVGFyZ2V0QWNjZXNzaWJsZU9iamVjdCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgIH0KKworICAgIC8vIFJlc2V0IHRoZSBpbml0
aWFsIHNjcm9sbCBwb3NpdGlvbiAoc2luY2UgY2FsbGluZyBmb2N1cygpIGNhbiBzY3JvbGwgdGhl
IHBhZ2UgdG9vKS4KKyAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gMDsKKyAgICBzaG91bGRCZSgi
Y29udGFpbmVyLnNjcm9sbFRvcCIsICIwIik7CisKKyAgICAvLyBTY3JvbGwgdG8gbWFrZSBsb3dl
ciB0YXJnZXQgdmlzaWJsZSBhbmQgY2hlY2suCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikKKyAgICAgICAgbG93ZXJUYXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRv
TWFrZVZpc2libGUoKTsKKyAgICB2YXIgdG9wID0gbG93ZXJUYXJnZXQub2Zmc2V0VG9wIC0gY29u
dGFpbmVyLm9mZnNldFRvcDsKKyAgICB3aW5kb3cubWluWU9mZnNldCA9IHRvcCArIGxvd2VyVGFy
Z2V0Lm9mZnNldEhlaWdodCAtIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQ7CisgICAgd2luZG93Lm1h
eFlPZmZzZXQgPSB0b3A7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxUb3AgPj0gbWlu
WU9mZnNldCIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImNvbnRhaW5lci5zY3JvbGxUb3AgPD0g
bWF4WU9mZnNldCIsICJ0cnVlIik7CisKKyAgICAvLyBEbyBpdCBhZ2Fpbi4gSXQgc2hvdWxkbid0
IHNjcm9sbC4KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAg
ICBsb3dlclRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAg
IHZhciB0b3AgPSBsb3dlclRhcmdldC5vZmZzZXRUb3AgLSBjb250YWluZXIub2Zmc2V0VG9wOwor
ICAgIHdpbmRvdy5taW5ZT2Zmc2V0ID0gdG9wICsgbG93ZXJUYXJnZXQub2Zmc2V0SGVpZ2h0IC0g
Y29udGFpbmVyLm9mZnNldEhlaWdodDsKKyAgICB3aW5kb3cubWF4WU9mZnNldCA9IHRvcDsKKyAg
ICBzaG91bGRCZSgiY29udGFpbmVyLnNjcm9sbFRvcCA+PSBtaW5ZT2Zmc2V0IiwgInRydWUiKTsK
KyAgICBzaG91bGRCZSgiY29udGFpbmVyLnNjcm9sbFRvcCA8PSBtYXhZT2Zmc2V0IiwgInRydWUi
KTsKKworICAgIC8vIFNjcm9sbCB0byBtYWtlIHVwcGVyIHRhcmdldCB2aXNpYmxlIGFuZCBjaGVj
ay4KKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKQorICAgICAgICB1cHBl
clRhcmdldEFjY2Vzc2libGVPYmplY3Quc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworICAgIHRvcCA9
IHVwcGVyVGFyZ2V0Lm9mZnNldFRvcCAtIGNvbnRhaW5lci5vZmZzZXRUb3A7CisgICAgd2luZG93
Lm1pbllPZmZzZXQgPSB0b3AgKyB1cHBlclRhcmdldC5vZmZzZXRIZWlnaHQgLSBjb250YWluZXIu
b2Zmc2V0SGVpZ2h0OworICAgIHdpbmRvdy5tYXhZT2Zmc2V0ID0gdG9wOworICAgIHNob3VsZEJl
KCJjb250YWluZXIuc2Nyb2xsVG9wID49IG1pbllPZmZzZXQiLCAidHJ1ZSIpOworICAgIHNob3Vs
ZEJlKCJjb250YWluZXIuc2Nyb2xsVG9wIDw9IG1heFlPZmZzZXQiLCAidHJ1ZSIpOworCisgICAg
ZmluaXNoSlNUZXN0KCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Ut
dmlzaWJsZS1pZnJhbWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Fj
Y2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1pZnJhbWUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12
aXNpYmxlLWlmcmFtZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNSBA
QAorVGVzdHMgdGhhdCBzY3JvbGxpbmcgdG8gbWFrZSBhbiBlbGVtZW50IHZpc2libGUgc3VjY2Vz
c2Z1bGx5IHNjcm9sbHMgYW4gaWZyYW1lLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworCitQQVNTIGZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAKK1BBU1MgZnJhbWVXaW5kb3cu
cGFnZVlPZmZzZXQgPj0gbWluWU9mZnNldCBpcyB0cnVlCitQQVNTIGZyYW1lV2luZG93LnBhZ2VZ
T2Zmc2V0IDw9IG1heFlPZmZzZXQgaXMgdHJ1ZQorUEFTUyBmcmFtZVdpbmRvdy5wYWdlWU9mZnNl
dCA+PSBtaW5ZT2Zmc2V0IGlzIHRydWUKK1BBU1MgZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQgPD0g
bWF4WU9mZnNldCBpcyB0cnVlCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8t
bWFrZS12aXNpYmxlLWlmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1pZnJh
bWUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorCis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGlmcmFtZSBpZD0iZnJhbWUi
IHNyYz0iZGF0YTp0ZXh0L2h0bWwsPGJvZHk+PGJ1dHRvbiBpZD0ndXBwZXJfdGFyZ2V0Jz5VcHBl
ciBUYXJnZXQ8L2J1dHRvbj48ZGl2IHN0eWxlPSdib3JkZXI6IDFweCBzb2xpZCAjMDAwOyBoZWln
aHQ6IDUwMDBweDsnPjUwMDAtcGl4ZWwgYm94PC9kaXY+PGJ1dHRvbiBpZD0nbG93ZXJfdGFyZ2V0
Jz5Mb3dlciBUYXJnZXQ8L2J1dHRvbj48L2JvZHk+Ij48L2lmcmFtZT4KKworPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCBzY3JvbGxp
bmcgdG8gbWFrZSBhbiBlbGVtZW50IHZpc2libGUgc3VjY2Vzc2Z1bGx5IHNjcm9sbHMgYW4gaWZy
YW1lLiIpOworCitpZiAod2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHRlc3RSdW5uZXIud2Fp
dFVudGlsRG9uZSgpOworCit3aW5kb3cuanNUZXN0SXNBc3luYyA9IHRydWU7CisKK2Z1bmN0aW9u
IHJ1blRlc3QoKSB7CisgICAgd2luZG93LmZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImZyYW1lIik7CisgICAgd2luZG93LmZyYW1lV2luZG93ID0gZnJhbWUuY29udGVudFdpbmRvdzsK
KyAgICB3aW5kb3cuZnJhbWVEb2MgPSBmcmFtZVdpbmRvdy5kb2N1bWVudDsKKworICAgIHZhciB1
cHBlclRhcmdldCA9IGZyYW1lRG9jLmdldEVsZW1lbnRCeUlkKCJ1cHBlcl90YXJnZXQiKTsKKyAg
ICB2YXIgbG93ZXJUYXJnZXQgPSBmcmFtZURvYy5nZXRFbGVtZW50QnlJZCgibG93ZXJfdGFyZ2V0
Iik7CisKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9sbGVyKSB7CisgICAgICAg
IGxvd2VyVGFyZ2V0LmZvY3VzKCk7CisgICAgICAgIHZhciBsb3dlclRhcmdldEFjY2Vzc2libGVP
YmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAg
dXBwZXJUYXJnZXQuZm9jdXMoKTsKKyAgICAgICAgdmFyIHVwcGVyVGFyZ2V0QWNjZXNzaWJsZU9i
amVjdCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmZvY3VzZWRFbGVtZW50OworICAgIH0KKwor
ICAgIC8vIFJlc2V0IHRoZSBpbml0aWFsIHNjcm9sbCBwb3NpdGlvbiAoc2luY2UgY2FsbGluZyBm
b2N1cygpIGNhbiBzY3JvbGwgdGhlIHBhZ2UgdG9vKS4KKyAgICBmcmFtZVdpbmRvdy5zY3JvbGxU
bygwLCAwKTsKKyAgICBzaG91bGRCZSgiZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQiLCAiMCIpOwor
CisgICAgLy8gU2Nyb2xsIHRvIG1ha2UgbG93ZXIgdGFyZ2V0IHZpc2libGUgYW5kIGNoZWNrLgor
ICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIGxvd2VyVGFy
Z2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgd2luZG93Lm1p
bllPZmZzZXQgPSBsb3dlclRhcmdldC5vZmZzZXRUb3AgKyBsb3dlclRhcmdldC5vZmZzZXRIZWln
aHQgLSBmcmFtZVdpbmRvdy5pbm5lckhlaWdodDsKKyAgICB3aW5kb3cubWF4WU9mZnNldCA9IGxv
d2VyVGFyZ2V0Lm9mZnNldFRvcDsKKyAgICBzaG91bGRCZSgiZnJhbWVXaW5kb3cucGFnZVlPZmZz
ZXQgPj0gbWluWU9mZnNldCIsICJ0cnVlIik7CisgICAgc2hvdWxkQmUoImZyYW1lV2luZG93LnBh
Z2VZT2Zmc2V0IDw9IG1heFlPZmZzZXQiLCAidHJ1ZSIpOworCisgICAgLy8gU2Nyb2xsIHRvIG1h
a2UgdXBwZXIgdGFyZ2V0IHZpc2libGUgYW5kIGNoZWNrLgorICAgIGlmICh3aW5kb3cuYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHVwcGVyVGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5z
Y3JvbGxUb01ha2VWaXNpYmxlKCk7CisgICAgd2luZG93Lm1pbllPZmZzZXQgPSB1cHBlclRhcmdl
dC5vZmZzZXRUb3AgKyB1cHBlclRhcmdldC5vZmZzZXRIZWlnaHQgLSBmcmFtZVdpbmRvdy5pbm5l
ckhlaWdodDsKKyAgICB3aW5kb3cubWF4WU9mZnNldCA9IHVwcGVyVGFyZ2V0Lm9mZnNldFRvcDsK
KyAgICBzaG91bGRCZSgiZnJhbWVXaW5kb3cucGFnZVlPZmZzZXQgPj0gbWluWU9mZnNldCIsICJ0
cnVlIik7CisgICAgc2hvdWxkQmUoImZyYW1lV2luZG93LnBhZ2VZT2Zmc2V0IDw9IG1heFlPZmZz
ZXQiLCAidHJ1ZSIpOworCisgICAgZmluaXNoSlNUZXN0KCk7Cit9CisKK3dpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCdsb2FkJywgZnVuY3Rpb24oKSB7CisgICAgc2V0VGltZW91dChydW5UZXN0LCAx
MCk7Cit9LCBmYWxzZSk7CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLTIt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Ny
b2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtMi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVk
LTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKK1Rlc3RzIHRo
YXQgc2Nyb2xsaW5nIHRvIG1ha2UgYW4gZWxlbWVudCB2aXNpYmxlIHdvcmtzIHdoZW4gdGhlIGlu
bmVyIHNjcm9sbCBjb250YWluZXIgZG9lc24ndCBuZWVkIHRvIGJlIHNjcm9sbGVkLCBidXQgdGhl
IG90aGVyIG9uZSBkb2VzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworNTAwMC1w
aXhlbCBib3gKK1RhcmdldCBUYXJnZXQgVGFyZ2V0Cis1MDAwLXBpeGVsIGJveAorUEFTUyB3aW5k
b3cucGFnZVlPZmZzZXQgaXMgMAorUEFTUyBjb250YWluZXIuc2Nyb2xsVG9wIGlzIDAKK1BBU1Mg
dGFyZ2V0MS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgaXMgPj0gNTAwMAorUEFTUyB3aW5k
b3cuaW5uZXJIZWlnaHQgaXMgPj0gdGFyZ2V0Mi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0
b20KK1BBU1MgdGFyZ2V0MnRvcCBpcyB0YXJnZXQyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRv
cAorUEFTUyB0YXJnZXQydG9wIGlzIHRhcmdldDIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9w
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRl
eDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLW5lc3Rl
ZC0yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwt
dG8tbWFrZS12aXNpYmxlLW5lc3RlZC0yLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLTIuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorCis8
cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKworPGRpdiBpZD0iY29udGFpbmVyIiBzdHlsZT0id2lk
dGg6IDEwMHB4OyBvdmVyZmxvdzogc2Nyb2xsIj4KKyAgPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHgg
c29saWQgIzAwMDsgd2lkdGg6IDEwMDBweDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJv
eDwvZGl2PgorICA8YnV0dG9uIGlkPSJ0YXJnZXQxIj5UYXJnZXQ8L2J1dHRvbj4KKyAgPGJ1dHRv
biBpZD0idGFyZ2V0MiI+VGFyZ2V0PC9idXR0b24+CisgIDxidXR0b24gaWQ9InRhcmdldDMiPlRh
cmdldDwvYnV0dG9uPgorICA8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjMDAwOyB3aWR0
aDogMTAwMHB4OyBoZWlnaHQ6IDUwMDBweDsiPjUwMDAtcGl4ZWwgYm94PC9kaXY+Cis8L2Rpdj4K
KworPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVz
dHMgdGhhdCBzY3JvbGxpbmcgdG8gbWFrZSBhbiBlbGVtZW50IHZpc2libGUgd29ya3Mgd2hlbiB0
aGUgaW5uZXIgc2Nyb2xsIGNvbnRhaW5lciBkb2Vzbid0IG5lZWQgdG8gYmUgc2Nyb2xsZWQsIGJ1
dCB0aGUgb3RoZXIgb25lIGRvZXMuIik7CisKK2Z1bmN0aW9uIHJ1blRlc3QoKSB7CisgICAgd2lu
ZG93LmNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb250YWluZXIiKTsKKyAg
ICB3aW5kb3cudGFyZ2V0MSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQxIik7Cisg
ICAgd2luZG93LnRhcmdldDIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFyZ2V0MiIpOwor
ICAgIHdpbmRvdy50YXJnZXQzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldDMiKTsK
KworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGFy
Z2V0MS5mb2N1cygpOworICAgICAgICB2YXIgdGFyZ2V0MUFjY2Vzc2libGVPYmplY3QgPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAgdGFyZ2V0Mi5mb2N1
cygpOworICAgICAgICB2YXIgdGFyZ2V0MkFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5
Q29udHJvbGxlci5mb2N1c2VkRWxlbWVudDsKKyAgICAgICAgdGFyZ2V0My5mb2N1cygpOworICAg
ICAgICB2YXIgdGFyZ2V0M0FjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxl
ci5mb2N1c2VkRWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3Jv
bGwgcG9zaXRpb25zIChzaW5jZSBjYWxsaW5nIGZvY3VzKCkgY2FuIHNjcm9sbCB0aGUgcGFnZSB0
b28pLgorICAgIHdpbmRvdy5zY3JvbGxUbygwLCAwKTsKKyAgICBjb250YWluZXIuc2Nyb2xsVG9w
ID0gMDsKKyAgICBzaG91bGRCZSgid2luZG93LnBhZ2VZT2Zmc2V0IiwgIjAiKTsKKyAgICBzaG91
bGRCZSgiY29udGFpbmVyLnNjcm9sbFRvcCIsICIwIik7CisgICAgc2hvdWxkQmVHcmVhdGVyVGhh
bk9yRXF1YWwoInRhcmdldDEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjUwMDAiKTsK
KworICAgIC8vIFNjcm9sbCB0byBtYWtlIHRoZSBtaWRkbGUgdGFyZ2V0IHZpc2libGUuCisgICAg
aWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0MkFjY2Vz
c2libGVPYmplY3Quc2Nyb2xsVG9NYWtlVmlzaWJsZSgpOworCisgICAgLy8gSW5zdGVhZCBvZiB0
ZXN0aW5nIHRoZSBleGFjdCBzY3JvbGwgb2Zmc2V0cyBvZiB0aGUgdHdvIGNvbnRhaW5lcnMsIGp1
c3QgdGVzdCB0aGF0CisgICAgLy8gdGhlIG5ldyBhYnNvbHV0ZSBwb3NpdGlvbiBvZiB0aGUgdGFy
Z2V0IGlzIG9uLXNjcmVlbi4KKyAgICBzaG91bGRCZUdyZWF0ZXJUaGFuT3JFcXVhbCgid2luZG93
LmlubmVySGVpZ2h0IiwgInRhcmdldDIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIik7
CisKKyAgICAvLyBNYWtlIHN1cmUgdGhhdCBjYWxsaW5nIHNjcm9sbFRvTWFrZVZpc2libGUgb24g
dGFyZ2V0MSBhbmQgdGFyZ2V0MyBkb24ndCByZXN1bHQgaW4gYW55CisgICAgLy8gc2Nyb2xsaW5n
LCBiZWNhdXNlIHRoZXkgc2hvdWxkIGFscmVhZHkgYmUgd2l0aGluIHRoZSB2aWV3cG9ydC4KKyAg
ICB3aW5kb3cudGFyZ2V0MnRvcCA9IHRhcmdldDIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9w
OworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdl
dDFBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRvTWFrZVZpc2libGUoKTsKKyAgICBzaG91bGRCZSgi
dGFyZ2V0MnRvcCIsICJ0YXJnZXQyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIpOworICAg
IGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpCisgICAgICAgIHRhcmdldDNBY2Nl
c3NpYmxlT2JqZWN0LnNjcm9sbFRvTWFrZVZpc2libGUoKTsKKyAgICBzaG91bGRCZSgidGFyZ2V0
MnRvcCIsICJ0YXJnZXQyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCIpOworCisgICAgZmlu
aXNoSlNUZXN0KCk7Cit9CisKK3J1blRlc3QoKTsKKworPC9zY3JpcHQ+CisKKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Utdmlz
aWJsZS1uZXN0ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS1uZXN0ZWQtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNp
YmxlLW5lc3RlZC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAor
VGVzdHMgdGhhdCBzY3JvbGxpbmcgdG8gbWFrZSBhbiBlbGVtZW50IHZpc2libGUgc3VjY2Vzc2Z1
bGx5IHNjcm9sbHMgbXVsdGlwbGUgbmVzdGVkIHNjcm9sbGluZyB2aWV3cycuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCis1MDAwLXBpeGVsIGJveAorNTAwMC1waXhlbCBib3gKKzUw
MDAtcGl4ZWwgYm94CitUYXJnZXQKK1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0IGlzIDAKK1BBU1Mg
b3V0ZXJDb250YWluZXIuc2Nyb2xsVG9wIGlzIDAKK1BBU1MgaW5uZXJDb250YWluZXIuc2Nyb2xs
VG9wIGlzIDAKK1BBU1MgdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCBpcyA+PSAx
NTAwMAorUEFTUyB3aW5kb3cuaW5uZXJIZWlnaHQgaXMgPj0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xp
ZW50UmVjdCgpLmJvdHRvbQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1h
a2UtdmlzaWJsZS1uZXN0ZWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3Np
YmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVkLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L3Njcm9sbC10by1tYWtlLXZpc2libGUtbmVzdGVk
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorPGh0bWw+Cis8aGVhZD4KKzxz
Y3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisKKzxkaXYgc3R5bGU9ImJvcmRlcjog
MXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKwor
PGRpdiBpZD0ib3V0ZXJfY29udGFpbmVyIiBzdHlsZT0iaGVpZ2h0OiAxMDBweDsgb3ZlcmZsb3c6
IHNjcm9sbCI+CisgIDxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDog
NTAwMHB4OyI+NTAwMC1waXhlbCBib3g8L2Rpdj4KKyAgPGRpdiBpZD0iaW5uZXJfY29udGFpbmVy
IiBzdHlsZT0iaGVpZ2h0OiAxMDBweDsgb3ZlcmZsb3c6IHNjcm9sbCI+CisgICAgPGRpdiBzdHls
ZT0iYm9yZGVyOiAxcHggc29saWQgIzAwMDsgaGVpZ2h0OiA1MDAwcHg7Ij41MDAwLXBpeGVsIGJv
eDwvZGl2PgorICAgIDxidXR0b24gaWQ9InRhcmdldCI+VGFyZ2V0PC9idXR0b24+CisgIDwvZGl2
PgorPC9kaXY+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorZGVzY3Jp
cHRpb24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1ha2UgYW4gZWxlbWVudCB2aXNpYmxlIHN1
Y2Nlc3NmdWxseSBzY3JvbGxzIG11bHRpcGxlIG5lc3RlZCBzY3JvbGxpbmcgdmlld3MnLiIpOwor
CitmdW5jdGlvbiBydW5UZXN0KCkgeworICAgIHdpbmRvdy5vdXRlckNvbnRhaW5lciA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJvdXRlcl9jb250YWluZXIiKTsKKyAgICB3aW5kb3cuaW5uZXJD
b250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiaW5uZXJfY29udGFpbmVyIik7Cisg
ICAgd2luZG93LnRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YXJnZXQiKTsKKwor
ICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAgICAgdGFyZ2V0
LmZvY3VzKCk7CisgICAgICAgIHZhciB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0ID0gYWNjZXNzaWJp
bGl0eUNvbnRyb2xsZXIuZm9jdXNlZEVsZW1lbnQ7CisgICAgfQorCisgICAgLy8gUmVzZXQgdGhl
IGluaXRpYWwgc2Nyb2xsIHBvc2l0aW9ucyAoc2luY2UgY2FsbGluZyBmb2N1cygpIGNhbiBzY3Jv
bGwgdGhlIHBhZ2UgdG9vKS4KKyAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CisgICAgb3V0ZXJD
b250YWluZXIuc2Nyb2xsVG9wID0gMDsKKyAgICBpbm5lckNvbnRhaW5lci5zY3JvbGxUb3AgPSAw
OworICAgIHNob3VsZEJlKCJ3aW5kb3cucGFnZVlPZmZzZXQiLCAiMCIpOworICAgIHNob3VsZEJl
KCJvdXRlckNvbnRhaW5lci5zY3JvbGxUb3AiLCAiMCIpOworICAgIHNob3VsZEJlKCJpbm5lckNv
bnRhaW5lci5zY3JvbGxUb3AiLCAiMCIpOworICAgIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFs
KCJ0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIiwgIjE1MDAwIik7CisKKyAgICAv
LyBTY3JvbGwgdG8gbWFrZSB0YXJnZXQgdmlzaWJsZS4KKyAgICBpZiAod2luZG93LmFjY2Vzc2li
aWxpdHlDb250cm9sbGVyKQorICAgICAgICB0YXJnZXRBY2Nlc3NpYmxlT2JqZWN0LnNjcm9sbFRv
TWFrZVZpc2libGUoKTsKKworICAgIC8vIEluc3RlYWQgb2YgdGVzdGluZyB0aGUgZXhhY3Qgc2Ny
b2xsIG9mZnNldHMgb2YgdGhlIHR3byBjb250YWluZXJzLCBqdXN0IHRlc3QgdGhhdAorICAgIC8v
IHRoZSBuZXcgYWJzb2x1dGUgcG9zaXRpb24gb2YgdGhlIHRhcmdldCBpcyBvbi1zY3JlZW4uCisg
ICAgc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwoIndpbmRvdy5pbm5lckhlaWdodCIsICJ0YXJn
ZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuYm90dG9tIik7CisKKyAgICBmaW5pc2hKU1Rlc3Qo
KTsKK30KKworcnVuVGVzdCgpOworCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLXdpdGgt
c3ViZm9jdXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvc2Nyb2xsLXRvLW1ha2UtdmlzaWJsZS13aXRoLXN1YmZvY3VzLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Ut
dmlzaWJsZS13aXRoLXN1YmZvY3VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0IEBACitUZXN0cyB0aGF0IHNjcm9sbGluZyB0byBtYWtlIGEgY2VydGFpbiByZWdpb24g
d2l0aGluIGFuIGVsZW1lbnQgdmlzaWJsZSBzdWNjZXNzZnVsbHkgc2Nyb2xscyB0aGUgbWFpbiB3
aW5kb3cuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVz
c2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCis1MDAwLXBpeGVsIGJveAor
VGFyZ2V0CitQQVNTIHdpbmRvdy5wYWdlWU9mZnNldCBpcyAwCitQQVNTIHdpbmRvdy5wYWdlWU9m
ZnNldCA+PSBtaW5ZT2Zmc2V0IGlzIHRydWUKK1BBU1Mgd2luZG93LnBhZ2VZT2Zmc2V0IDw9IG1h
eFlPZmZzZXQgaXMgdHJ1ZQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1h
a2UtdmlzaWJsZS13aXRoLXN1YmZvY3VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9zY3JvbGwtdG8tbWFrZS12aXNpYmxlLXdpdGgtc3ViZm9jdXMuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvc2Nyb2xsLXRvLW1ha2Ut
dmlzaWJsZS13aXRoLXN1YmZvY3VzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBA
QAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+CisK
KzxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IHNvbGlkICMwMDA7IGhlaWdodDogNTAwMHB4OyI+NTAw
MC1waXhlbCBib3g8L2Rpdj4KKzxidXR0b24gaWQ9InRhcmdldCIgc3R5bGU9ImhlaWdodDogNTAw
MHB4OyI+VGFyZ2V0PC9idXR0b24+CisKKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2Ny
aXB0PgorZGVzY3JpcHRpb24oIlRlc3RzIHRoYXQgc2Nyb2xsaW5nIHRvIG1ha2UgYSBjZXJ0YWlu
IHJlZ2lvbiB3aXRoaW4gYW4gZWxlbWVudCB2aXNpYmxlIHN1Y2Nlc3NmdWxseSBzY3JvbGxzIHRo
ZSBtYWluIHdpbmRvdy4iKTsKKworZnVuY3Rpb24gcnVuVGVzdCgpIHsKKyAgICB2YXIgdGFyZ2V0
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRhcmdldCIpOworCisgICAgaWYgKHdpbmRvdy5h
Y2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICB0YXJnZXQuZm9jdXMoKTsKKyAgICAg
ICAgdmFyIHRhcmdldEFjY2Vzc2libGVPYmplY3QgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5m
b2N1c2VkRWxlbWVudDsKKyAgICB9CisKKyAgICAvLyBSZXNldCB0aGUgaW5pdGlhbCBzY3JvbGwg
cG9zaXRpb24gKHNpbmNlIGNhbGxpbmcgZm9jdXMoKSBjYW4gc2Nyb2xsIHRoZSBwYWdlIHRvbyku
CisgICAgd2luZG93LnNjcm9sbFRvKDAsIDApOworICAgIHNob3VsZEJlKCJ3aW5kb3cucGFnZVlP
ZmZzZXQiLCAiMCIpOworCisgICAgLy8gU2Nyb2xsIHRvIG1ha2UgdGhlIG1pZHBvaW50IG9mIHRo
ZSB0YXJnZXQgdmlzaWJsZSBhbmQgY2hlY2suCisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5
Q29udHJvbGxlcikKKyAgICAgICAgdGFyZ2V0QWNjZXNzaWJsZU9iamVjdC5zY3JvbGxUb01ha2VW
aXNpYmxlV2l0aFN1YkZvY3VzKDAsIDI1MDAsIDEwMCwgMjYwMCk7CisgICAgd2luZG93Lm1pbllP
ZmZzZXQgPSB0YXJnZXQub2Zmc2V0VG9wICsgMjUwMCAtIHdpbmRvdy5pbm5lckhlaWdodDsKKyAg
ICB3aW5kb3cubWF4WU9mZnNldCA9IHRhcmdldC5vZmZzZXRUb3AgKyAyNTAwOworICAgIHNob3Vs
ZEJlKCJ3aW5kb3cucGFnZVlPZmZzZXQgPj0gbWluWU9mZnNldCIsICJ0cnVlIik7CisgICAgc2hv
dWxkQmUoIndpbmRvdy5wYWdlWU9mZnNldCA8PSBtYXhZT2Zmc2V0IiwgInRydWUiKTsKKworICAg
IGZpbmlzaEpTVGVzdCgpOworfQorCitydW5UZXN0KCk7CisKKzwvc2NyaXB0PgorCis8L2JvZHk+
Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="284648"
          type_id="1"
          status="+"
          setter="dbates"
    />
          </attachment>
      

    </bug>

</bugzilla>