<?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>209112</bug_id>
          
          <creation_ts>2020-03-14 13:13:14 -0700</creation_ts>
          <short_desc>ASSERTION FAILURE: !result.innerNode() || (request.resultIsElementList() &amp;&amp; result.listBasedTestResult().size()) in RenderLayer::hitTestContents()</short_desc>
          <delta_ts>2020-03-16 10:35:16 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=209113</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=209110</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=99656</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=121013</see_also>
          <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="Daniel Bates">dbates</reporter>
          <assigned_to name="Daniel Bates">dbates</assigned_to>
          <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1630075</commentid>
    <comment_count>0</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 13:13:14 -0700</bug_when>
    <thetext>Steps to reproduce:

Using a debug build + MiniBrowser.

Consider a page with the following markup:

[[
&lt;style&gt;
.icon::before {
    content: url(&apos;data:image/svg+xml,&lt;svg xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; version=&quot;1.1&quot; height=&quot;727px&quot;&gt;&lt;/svg&gt;&apos;);
}

.icon {
    position: absolute;
}
&lt;/style&gt;
&lt;body&gt;
    &lt;p&gt;This test FAILED if it causes an assertion failure a debug build.&lt;/p&gt;
    &lt;div class=&quot;icon&quot;&gt;&lt;/div&gt;
    &lt;script&gt;
        // Need to use a zero-timer to ensure we run this code AFTER .icon has loaded its content.
        window.setTimeout(() =&gt; {
            document.elementsFromPoint(200, 200);
        }, 0);
    &lt;/script&gt;
&lt;/body&gt;
]]

1. Ensure Settings &gt; Internal Features &gt; Simple line layout is DISABLED (under Debug &gt; WebKit Internal Features in Safari)

2. Ensure Settings &gt; Internal Features &gt; Next-generation line layout integration (LFC) is DISABLED (under Debug &gt; WebKit Internal Features in Safari).

3. Open in a NEW WK2 window in MiniBrowser the above page.

Then the WebContent process with crash due to the ASSERT(!result.innerNode() || (request.resultIsElementList() &amp;&amp; result.listBasedTestResult().size()) in RenderLayer::hitTestContents()) failing in RenderLayer::hitTestContents(): &lt;https://trac.webkit.org/browser/trunk/Source/WebCore/rendering/RenderLayer.cpp?rev=258400#L5630&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630077</commentid>
    <comment_count>1</comment_count>
      <attachid>393589</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 13:13:40 -0700</bug_when>
    <thetext>Created attachment 393589
Test

Test case (for convenience)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630078</commentid>
    <comment_count>2</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 13:14:43 -0700</bug_when>
    <thetext>(In reply to Daniel Bates from comment #1)
&gt; Created attachment 393589 [details]
&gt; Test
&gt; 
&gt; Test case (for convenience)

If you open this test case from Bugzilla, you may need to reload it to trigger the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630079</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 13:15:29 -0700</bug_when>
    <thetext>#0  0x000000012d55190e in ::WTFCrash() at /Volumes/.../Source/WTF/wtf/Assertions.cpp:305
#1  0x0000000112c138eb in WTFCrashWithInfo(int, char const*, char const*, int) at /Volumes/.../WebKitBuild/Debug/usr/local/include/wtf/Assertions.h:620
#2  0x00000001168a7bd5 in WebCore::RenderLayer::hitTestContents(WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestFilter) const at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5630
#3  0x00000001168a7866 in WebCore::RenderLayer::hitTestContentsForFragments(WTF::Vector&lt;WebCore::LayerFragment, 1ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt; const&amp;, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestFilter, bool&amp;) const at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5533
#4  0x00000001168a5fbb in WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*) at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5476
#5  0x00000001168a747d in WebCore::RenderLayer::hitTestList(WebCore::RenderLayer::LayerList, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool) at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5676
#6  0x00000001168a5c2b in WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*) at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5443
#7  0x00000001168a747d in WebCore::RenderLayer::hitTestList(WebCore::RenderLayer::LayerList, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestingTransformState const*, double*, double*, WebCore::HitTestingTransformState const*, bool) at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5676
#8  0x00000001168a5c2b in WebCore::RenderLayer::hitTestLayer(WebCore::RenderLayer*, WebCore::RenderLayer*, WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;, WebCore::LayoutRect const&amp;, WebCore::HitTestLocation const&amp;, bool, WebCore::HitTestingTransformState const*, double*) at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5443
#9  0x00000001168a5285 in WebCore::RenderLayer::hitTest(WebCore::HitTestRequest const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestResult&amp;) at /Volumes/.../Source/WebCore/rendering/RenderLayer.cpp:5238
#10 0x000000011535c2bf in WebCore::Document::hitTest(WebCore::HitTestRequest const&amp;, WebCore::HitTestLocation const&amp;, WebCore::HitTestResult&amp;) at /Volumes/.../Source/WebCore/dom/Document.cpp:8269
#11 0x0000000115340f74 in WebCore::Document::hitTest(WebCore::HitTestRequest const&amp;, WebCore::HitTestResult&amp;) at /Volumes/.../Source/WebCore/dom/Document.cpp:8250
#12 0x0000000115572772 in WebCore::TreeScope::elementsFromPoint(double, double) at /Volumes/.../Source/WebCore/dom/TreeScope.cpp:400
#13 0x00000001134c68f9 in WebCore::jsDocumentPrototypeFunctionElementsFromPointBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;) at /Volumes/.../WebKitBuild/Debug/DerivedSources/WebCore/JSDocument.cpp:5971
#14 0x00000001133cffc2 in long long WebCore::IDLOperation&lt;WebCore::JSDocument&gt;::call&lt;&amp;(WebCore::jsDocumentPrototypeFunctionElementsFromPointBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::JSDocument*, JSC::ThrowScope&amp;)), (WebCore::CastedThisErrorBehavior)0&gt;(JSC::JSGlobalObject&amp;, JSC::CallFrame&amp;, char const*) at /Volumes/.../Source/WebCore/bindings/js/JSDOMOperation.h:53
#15 0x00000001133cfca4 in WebCore::jsDocumentPrototypeFunctionElementsFromPoint(JSC::JSGlobalObject*, JSC::CallFrame*) at /Volumes/.../WebKitBuild/Debug/DerivedSources/WebCore/JSDocument.cpp:5976
#16 0x0000344110c01178 in 0x344110c01178 ()
#17 0x000000012da511e3 in llint_entry at /Volumes/.../Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1039
#18 0x000000012da33dc3 in vmEntryToJavaScript at /Volumes/.../Source/JavaScriptCore/llint/LowLevelInterpreter64.asm:296
#19 0x000000012e7c0a77 in JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) at /Volumes/.../Source/JavaScriptCore/jit/JITCodeInlines.h:38
#20 0x000000012e7c10ed in JSC::Interpreter::executeCall(JSC::JSGlobalObject*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) at /Volumes/.../Source/JavaScriptCore/interpreter/Interpreter.cpp:910
#21 0x000000012eac9b69 in JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) at /Volumes/.../Source/JavaScriptCore/runtime/CallData.cpp:59
#22 0x000000012eac9c5a in JSC::call(JSC::JSGlobalObject*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) at /Volumes/.../Source/JavaScriptCore/runtime/CallData.cpp:66
#23 0x000000012eac9f4e in JSC::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) at /Volumes/.../Source/JavaScriptCore/runtime/CallData.cpp:87
#24 0x0000000114dd2d78 in WebCore::JSExecState::profiledCall(JSC::JSGlobalObject*, JSC::ProfilingReason, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) at /Volumes/.../Source/WebCore/bindings/js/JSExecState.h:73
#25 0x0000000114e72a64 in WebCore::ScheduledAction::executeFunctionInContext(JSC::JSGlobalObject*, JSC::JSValue, WebCore::ScriptExecutionContext&amp;) at /Volumes/.../Source/WebCore/bindings/js/ScheduledAction.cpp:118
#26 0x0000000114e72505 in WebCore::ScheduledAction::execute(WebCore::Document&amp;) at /Volumes/.../Source/WebCore/bindings/js/ScheduledAction.cpp:137
#27 0x0000000114e723c3 in WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext&amp;) at /Volumes/.../Source/WebCore/bindings/js/ScheduledAction.cpp:86
#28 0x0000000115f70559 in WebCore::DOMTimer::fired() at /Volumes/.../Source/WebCore/page/DOMTimer.cpp:340
#29 0x0000000116242304 in WebCore::ThreadTimers::sharedTimerFiredInternal() at /Volumes/.../Source/WebCore/platform/ThreadTimers.cpp:127
#30 0x0000000116249ff1 in WebCore::ThreadTimers::setSharedTimer(WebCore::SharedTimer*)::$_0::operator()() const at /Volumes/.../Source/WebCore/platform/ThreadTimers.cpp:67
#31 0x0000000116249f9e in WTF::Detail::CallableWrapper&lt;WebCore::ThreadTimers::setSharedTimer(WebCore::SharedTimer*)::$_0, void&gt;::call() at /Volumes/.../WebKitBuild/Debug/usr/local/include/wtf/Function.h:52
#32 0x0000000112c261d2 in WTF::Function&lt;void ()&gt;::operator()() const at /Volumes/.../WebKitBuild/Debug/usr/local/include/wtf/Function.h:84
#33 0x000000011620ff5b in WebCore::MainThreadSharedTimer::fired() at /Volumes/.../Source/WebCore/platform/MainThreadSharedTimer.cpp:83
#34 0x00000001162a4a86 in WebCore::timerFired(__CFRunLoopTimer*, void*) at /Volumes/.../Source/WebCore/platform/cf/MainThreadSharedTimerCF.cpp:74</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630128</commentid>
    <comment_count>4</comment_count>
      <attachid>393601</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 17:42:40 -0700</bug_when>
    <thetext>Created attachment 393601
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630140</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 21:47:58 -0700</bug_when>
    <thetext>Test failures are progressions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630142</commentid>
    <comment_count>6</comment_count>
      <attachid>393605</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 22:23:06 -0700</bug_when>
    <thetext>Created attachment 393605
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630143</commentid>
    <comment_count>7</comment_count>
      <attachid>393605</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-14 23:11:34 -0700</bug_when>
    <thetext>Comment on attachment 393605
Patch

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

&gt; Source/WebCore/ChangeLog:37
&gt; +        was passed, which is nullptr for an anonymouse node, and addNodeToListBasedTestResult() doesn&apos;t have enough info

anonymouse =&gt; anonymous</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630222</commentid>
    <comment_count>8</comment_count>
      <attachid>393605</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-03-15 17:22:26 -0700</bug_when>
    <thetext>Comment on attachment 393605
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:1993
&gt;      return continuation() ? continuation()-&gt;element() : element();

Do we have a guarantee these are not the anonymous renderers in before or after content? They can’t be RenderBlock?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630360</commentid>
    <comment_count>9</comment_count>
      <attachid>393605</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-16 10:15:03 -0700</bug_when>
    <thetext>Comment on attachment 393605
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:1993
&gt;&gt;      return continuation() ? continuation()-&gt;element() : element();
&gt; 
&gt; Do we have a guarantee these are not the anonymous renderers in before or after content? They can’t be RenderBlock?

🤷‍♂️. I didn&apos;t think about it. I only thought about the isRenderView logic. I cannot think of a way using CSS for ::before or ::after content to contain anonymous blocks. Looks like if inserting a renderer for ::before or ::after breaks the inline/block invariants then anonymous blocks are added to the **containing element**.

Here&apos;s some examples I was playing with:

1. ::before with display:block

Because ::before generates a block, anonymous blocks must be added and the span split.

&lt;data:text/html,&lt;style&gt;span::before { content: &quot;FL&quot;; display: block; } span::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;span&gt;before span text&lt;div&gt;span text&lt;/div&gt;after span text&lt;/span&gt;&gt;

2 . ::before default (display:inline)
&lt;data:text/html,&lt;style&gt;span::before { content: &quot;FL&quot; } span::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;span&gt;before span text&lt;div&gt;span text&lt;/div&gt;after span text&lt;/span&gt;&gt;

3. &lt;p&gt; must be split:

&lt;data:text/html,&lt;style&gt;p::before { content: &quot;FL&quot; } p::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;p&gt;before div text&lt;div&gt;div text&lt;/div&gt;after div text&lt;/p&gt;&gt;

4. Anonymous blocks must be added for the text before and after then &lt;img&gt;.

&lt;data:text/html,&lt;style&gt;p::before { content: &quot;FL&quot; } p::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;p&gt;before img text&lt;img style=&quot;display: block&quot; height=&quot;20&quot; width=&quot;20&quot;&gt;after img text&lt;/p&gt;&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630361</commentid>
    <comment_count>10</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-16 10:15:14 -0700</bug_when>
    <thetext>Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630366</commentid>
    <comment_count>11</comment_count>
      <attachid>393605</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-16 10:30:51 -0700</bug_when>
    <thetext>Comment on attachment 393605
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.cpp:1993
&gt;&gt;&gt;      return continuation() ? continuation()-&gt;element() : element();
&gt;&gt; 
&gt;&gt; Do we have a guarantee these are not the anonymous renderers in before or after content? They can’t be RenderBlock?
&gt; 
&gt; 🤷‍♂️. I didn&apos;t think about it. I only thought about the isRenderView logic. I cannot think of a way using CSS for ::before or ::after content to contain anonymous blocks. Looks like if inserting a renderer for ::before or ::after breaks the inline/block invariants then anonymous blocks are added to the **containing element**.
&gt; 
&gt; Here&apos;s some examples I was playing with:
&gt; 
&gt; 1. ::before with display:block
&gt; 
&gt; Because ::before generates a block, anonymous blocks must be added and the span split.
&gt; 
&gt; &lt;data:text/html,&lt;style&gt;span::before { content: &quot;FL&quot;; display: block; } span::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;span&gt;before span text&lt;div&gt;span text&lt;/div&gt;after span text&lt;/span&gt;&gt;
&gt; 
&gt; 2 . ::before default (display:inline)
&gt; &lt;data:text/html,&lt;style&gt;span::before { content: &quot;FL&quot; } span::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;span&gt;before span text&lt;div&gt;span text&lt;/div&gt;after span text&lt;/span&gt;&gt;
&gt; 
&gt; 3. &lt;p&gt; must be split:
&gt; 
&gt; &lt;data:text/html,&lt;style&gt;p::before { content: &quot;FL&quot; } p::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;p&gt;before div text&lt;div&gt;div text&lt;/div&gt;after div text&lt;/p&gt;&gt;
&gt; 
&gt; 4. Anonymous blocks must be added for the text before and after then &lt;img&gt;.
&gt; 
&gt; &lt;data:text/html,&lt;style&gt;p::before { content: &quot;FL&quot; } p::first-letter { color:red;  float:left; }&lt;/style&gt;&lt;p&gt;before img text&lt;img style=&quot;display: block&quot; height=&quot;20&quot; width=&quot;20&quot;&gt;after img text&lt;/p&gt;&gt;

containing element =&gt; originating element

Ok.. I looked at the specs, emphasis mine:

[[

The content property dictates what is rendered inside an element or pseudo-element.

For elements, it has only one purpose: specifying that the element renders as normal, or replacing the element with an image (and possibly some associated &quot;alt text&quot;).

For pseudo-elements and margin boxes, it is more powerful. It controls whether the element renders at all, can replace the element with an image, or replace it with ***arbitrary inline content (text and images).***

]]
&lt;https://drafts.csswg.org/css-content-3/#propdef-content&gt;

So, the answer to your question is: No, they cannot have anonymous renderer because they can only have inline content (by def of CSS content).


And just for me:


[[
4.1. Generated Content Pseudo-elements: ::before and ::after

When their computed content value is not none, these pseudo-elements generate boxes as if they were immediate children of their originating element, and can be styled exactly like any normal document-sourced element in the document tree.
]]
&lt;https://drafts.csswg.org/css-pseudo-4/#selectordef-before&gt;


^^^ means that anonymous blocks are generated in the originating element, if needed, when inserted ::before, ::after generated boxes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630368</commentid>
    <comment_count>12</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2020-03-16 10:34:51 -0700</bug_when>
    <thetext>Committed r258508: &lt;https://trac.webkit.org/changeset/258508&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1630369</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-03-16 10:35:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/60500448&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>393589</attachid>
            <date>2020-03-14 13:13:40 -0700</date>
            <delta_ts>2020-03-14 13:13:40 -0700</delta_ts>
            <desc>Test</desc>
            <filename>test.html</filename>
            <type>text/html</type>
            <size>574</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PHN0eWxlPgouaWNvbjo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6IHVybCgnZGF0YTppbWFnZS9zdmcr
eG1sLDxzdmcgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiBoZWlnaHQ9IjcyN3B4
Ij48L3N2Zz4nKTsKfQoKLmljb24gewogICAgcG9zaXRpb246IGFic29sdXRlOwp9Cjwvc3R5bGU+
Cjxib2R5PgogICAgPHA+VGhpcyB0ZXN0IEZBSUxFRCBpZiBpdCBjYXVzZXMgYW4gYXNzZXJ0aW9u
IGZhaWx1cmUgYSBkZWJ1ZyBidWlsZC48L3A+CiAgICA8ZGl2IGNsYXNzPSJpY29uIj48L2Rpdj4K
ICAgIDxzY3JpcHQ+CiAgICAgICAgLy8gTmVlZCB0byB1c2UgYSB6ZXJvLXRpbWVyIHRvIGVuc3Vy
ZSB3ZSBydW4gdGhpcyBjb2RlIEFGVEVSIC5pY29uIGhhcyBsb2FkZWQgaXRzIGNvbnRlbnQuCiAg
ICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBkb2N1bWVudC5lbGVt
ZW50c0Zyb21Qb2ludCgyMDAsIDIwMCk7CiAgICAgICAgfSwgMCk7CiAgICA8L3NjcmlwdD4KPC9i
b2R5Pg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393601</attachid>
            <date>2020-03-14 17:42:40 -0700</date>
            <delta_ts>2020-03-14 22:23:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209112-20200314174239.patch</filename>
            <type>text/plain</type>
            <size>29101</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwYjIzYmJiZjQ4ZjJi
MGNmYTEwYzczN2Y5MGFkOWExOTA4N2Q3MC4uN2Y3YjgyNGY0MDVjZDg2M2JkZjU4N2MzZDg5MjA2
NjQwM2M4Y2VmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc1IEBACisyMDIwLTAzLTE0ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBBU1NFUlRJT04gRkFJTFVS
RTogIXJlc3VsdC5pbm5lck5vZGUoKSB8fCAocmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkg
JiYgcmVzdWx0Lmxpc3RCYXNlZFRlc3RSZXN1bHQoKS5zaXplKCkpIGluIFJlbmRlckxheWVyOjpo
aXRUZXN0Q29udGVudHMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5MTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRml4IHJlY3QtYmFzZWQgaGl0IHRlc3RpbmcgKGUuZy4gdXNlZCBpbiB0aGUgaW1w
bCBvZiBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCgpKSBvZiA6OmJlZm9yZQorICAgICAgICBh
bmQgOjphZnRlciBwc2V1ZG8gZWxlbWVudHMuIFNhbWUgaXNzdWUgYXMgaW4gcjEzMzMzMCwgdXBk
YXRlSGl0VGVzdFJlc3VsdCgpIGFuZCBhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KCkKKyAg
ICAgICAgYXJlIHVzaW5nIGRpZmZlcmVudCAiaGl0IiBub2Rlcy4gSW4gcGFydGljdWxhciwgUmVu
ZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KCkga25vd3MgaG93IHRvCisgICAgICAgIHJl
YXNvbiBhYm91dCA6OmJlZm9yZSBhbmQgOjphZnRlciBwc2V1ZG8gZWxlbWVudHMsIGJ1dCBhZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KCkgY2Fubm90LgorICAgICAgICBTdGFuZGFyZGl6ZSB0
aGUgY29uY2VwdCBvZiB0aGUgbm9kZSB1c2VkIGZvciBoaXQgdGVzdGluZyBmcm9tIHNvbWV0aGlu
Zy1zcGVjaWZpY2FsbHkgYWRkZWQgdG8gUmVuZGVyQmxvY2sKKyAgICAgICAgaW4gcjEzMzMzMCB0
byBhbGwgcmVuZGVyZXJzLiBIYXZlIGJvdGggdXBkYXRlSGl0VGVzdFJlc3VsdCgpIGFuZCBhZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KCkKKyAgICAgICAgbWFrZSB1c2Ugb2YgdGhpcyBjb25j
ZXB0IHNvIHRoYXQgdGhleSBjb25zaWRlciB0aGUgc2FtZSBoaXQgbm9kZS4KKworICAgICAgICBU
ZXN0OiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L3BzZXVkby1lbXB0eS1zdmctaW1hZ2UtY3Jhc2gu
aHRtbAorCisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0Jv
eDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
VXBkYXRlIGNvZGUgdG8gY2FsbCBub2RlRm9ySGl0VGVzdCgpIHRvIGtlZXAgdGhlIGNvZGUgYmVo
YXZpb3Igd2UgaGF2ZSB0b2RheS4gTm90ZSB0aGF0IFJlbmRlckVsZW1lbnQ6OmVsZW1lbnQoKQor
ICAgICAgICBhbmQgUmVuZGVyVGV4dDo6dGV4dE5vZGUoKSBqdXN0IGNhc3QgdGhlIHJldHVybiB2
YWx1ZSBvZiBSZW5kZXJPYmplY3Q6Om5vZGUoKS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9jay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94Ojpub2RlQXRQb2ludCk6IFVzZSBub2RlRm9ySGl0VGVzdCgpLiBU
aGlzIGZpeGVzIHRoZSBidWcuIEN1cnJlbnRseSwgdXBkYXRlSGl0VGVzdFJlc3VsdCgpCisgICAg
ICAgIGtub3dzIHRoYXQgd2hlbiBSZW5kZXJPYmplY3Q6Om5vZGUoKSBpcyBudWxscHRyIGFuZCB0
aGUgcGFyZW50IHJlbmRlcmVyIGlzIGZvciBnZW5lcmF0ZWQgY29udGVudCB0aGF0IGl0IGNhbgor
ICAgICAgICB3YWxrIHVwIHRoZSBoaWVyYXJjaHkgdG8gZmluZCB0aGUgaGl0IFBzZXVkb0VsZW1l
bnQuIEJ1dCBpbiB0aGUgY2FsbCB0byBhZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCksIFJl
bmRlck9iamVjdDo6ZWxlbWVudCgpCisgICAgICAgIHdhcyBwYXNzZWQsIHdoaWNoIGlzIG51bGxw
dHIgZm9yIGFuIGFub255bW91c2Ugbm9kZSwgYW5kIGFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1
bHQoKSBkb2Vzbid0IGhhdmUgZW5vdWdoIGluZm8KKyAgICAgICAgdG8ga25vdyB0aGF0IHRoaXMg
bWVhbnMgZ2VuZXJhdGVkIGNvbnRlbnQgd2FzIGhpdCBhbmQgaGVuY2UgaXQgaXMgbm90IGFibGUg
dG8gZmluZCB0aGUgUHNldWRvRWxlbWVudC4gVGhpcworICAgICAgICBkaXNhZ3JlZW1lbnQgY2F1
c2VkIHRoZSBhc3NlcnRpb24gZmFpbHVyZSBiZWNhdXNlIHVwZGF0ZUhpdFRlc3RSZXN1bHQoKSB3
b3VsZCB1cGRhdGUgdGhlIGlubmVyIG5vZGUsIGJ1dAorICAgICAgICBhZGROb2RlVG9MaXN0QmFz
ZWRUZXN0UmVzdWx0KCkgd291bGQgbm90IGFkZCBhIG5vZGUgdG8gdGhlIHNldC4KKworICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
SW5saW5lOjpoaXRUZXN0Q3VsbGVkSW5saW5lKTogVXNlIG5vZGVGb3JIaXRUZXN0KCkuCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQpOiBVcGRhdGUg
Y29kZSBhcyBuZWVkZWQgdG8gdXNlIG5vZGVGb3JIaXRUZXN0KCkuIEFsc28gd2hpbGUgSQorICAg
ICAgICBhbSBoZXJlIGZpeCB1cCBjb2RlIHN0eWxlIG9mIGNvbW1lbnQgYW5kIHJlbmFtZSB0aGUg
bG9jYWwgZnJvbSBlbGVtZW50IHRvIG5vZGUgdG8gbWF0Y2ggdGhlIHJldHVybiB2YWx1ZQorICAg
ICAgICBvZiBub2RlRm9ySGl0VGVzdCgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6
bm9kZUZvckhpdFRlc3QgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11
bHRpQ29sdW1uU2V0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5TZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bm9kZUZvckhpdFRlc3QgY29u
c3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6dXBkYXRlSGl0VGVz
dFJlc3VsdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJs
ZTo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclZpZXc6Om5vZGVGb3JIaXRUZXN0IGNvbnN0KTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OmhpdFRlc3RGbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6Om5vZGVB
dEZsb2F0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6Om5vZGVBdEZsb2F0UG9pbnQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdTaGFwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdTaGFwZTo6
bm9kZUF0RmxvYXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50
KToKKyAgICAgICAgVXNlIG5vZGVGb3JIaXRUZXN0KCkuCisKKwogMjAyMC0wMy0xNCAgRGFuaWVs
IEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAgICAgICAgU2hhcmUgSGl0VGVzdFJlc3Vs
dDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgpIGltcGwgZm9yIExheW91dFJlY3QgYW5k
IEZsb2F0UmVjdCBvdmVybG9hZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlvbkxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKaW5k
ZXggZThkYjM3ODM1ODI4MzQyMzk1YWRiNDA1YTE2ZDVmZTY0N2I3MWQ5Ni4uODJlODlkMzM0ZmU4
YmMyZmNmNWM2ZmFhN2EwMjYxODRjOGJkNTFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxh
eW91dC5jcHAKQEAgLTM0OSw3ICszNDksNyBAQCBib29sIExpbmVMYXlvdXQ6OmhpdFRlc3QoY29u
c3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYwogICAg
ICAgICBhdXRvJiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4oKm1fYm94VHJl
ZS5yZW5kZXJlckZvckxheW91dEJveChydW4ubGF5b3V0Qm94KCkpKTsKIAogICAgICAgICByZW5k
ZXJlci51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2lu
dCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7Ci0gICAgICAgIGlmIChyZXN1
bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlci5ub2RlKCksIHJlcXVlc3Qs
IGxvY2F0aW9uSW5Db250YWluZXIsIHJ1blJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkK
KyAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVy
Lm5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJ1blJlY3Qp
ID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKaW5kZXggYjU4NDkx
OWQ0ZmQ3MDFmZTBjZTIwY2Y2ZDJhZDNkMTVmNGVlNDNlNi4uMmM5Yzc0ODJlZDcwY2ZmOGFiYTE2
NjY5Njk0ODFmZWM5ZTFiMzMyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwCkBAIC0xNjMsNyArMTYzLDcgQEAgYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICBM
YXlvdXRSZWN0IGJvdW5kc1JlY3QgeyBhZGp1c3RlZExvY2F0aW9uLCBMYXlvdXRTaXplKExheW91
dFVuaXQobG9naWNhbFdpZHRoKCkpLCBtX2hlaWdodCkgfTsKICAgICBpZiAodmlzaWJsZVRvSGl0
VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50ZXJzZWN0cyhIaXRUZXN0TG9jYXRpb246OnJlY3RG
b3JQb2ludChsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCksIDAsIDAsIDAsIDApKSkgewogICAg
ICAgICBibG9ja0Zsb3coKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNv
bnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKTsKLSAgICAg
ICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KGJsb2NrRmxvdygpLmVs
ZW1lbnQoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0
VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNl
ZFRlc3RSZXN1bHQoYmxvY2tGbG93KCkubm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYXRp
b25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
SW5saW5lRmxvd0JveC5jcHAKaW5kZXggM2FiMWE5NWI3YzUwMTJkMDBlYmFlM2RjZjViZDQyMmZm
NTFiMWY1MS4uYzcwNWRiMWIzNjAyYjJiYTdhZDdhYjcxNzg0MWIwZTU2MGM5MTI4ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtMTE0MSw3ICsxMTQx
LDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVz
dCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKIAogICAgIGlmIChsb2NhdGlvbkluQ29udGFp
bmVyLmludGVyc2VjdHMocmVjdCkpIHsKICAgICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRpbmdNb2RlKGxvY2F0aW9uSW5Db250YWluZXIucG9p
bnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpKTsgLy8gRG9uJ3QgYWRkIGlu
IG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBjb29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sn
cyBzcGFjZS4KLSAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0
KHJlbmRlcmVyKCkuZWxlbWVudCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCByZWN0
KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRv
TGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLm5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3Qs
IGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guY3BwCmluZGV4IGE4NzYyMWRmZjEwODIxNGQxNTdkODdiNzg1YjYxMzA1
ZjI5MmE2NzguLjE5Yjc5NDZjNDA2MWZhYjJhMmJhZDEwMTgyZjg5MDI2MjIzNDM0ZTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTM4NSw3ICszODUs
NyBAQCBib29sIElubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZQogCiAgICAgaWYgKGxvY2F0aW9uSW5Db250YWlu
ZXIuaW50ZXJzZWN0cyhyZWN0KSkgewogICAgICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RS
ZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUobG9jYXRpb25JbkNvbnRhaW5lci5wb2lu
dCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSkpOwotICAgICAgICBpZiAocmVz
dWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQocmVuZGVyZXIoKS50ZXh0Tm9kZSgpLCBy
ZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCByZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0
b3ApCisgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlcigpLm5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJl
Y3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCmluZGV4IGRmMDE5Zjc2NDVjOTkxMTVhZjFiMTFlYTBjNjFjZmIyYTNkN2RiZWMuLmIzOTQx
NzZiMDYwOWZkOGVlM2UwZmU3ZjA1NjE1MGIxNmYxYWYwNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCkBAIC0zOTcsNiArMzk3LDkgQEAgcHVibGljOgogICAgIHZvaWQg
YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11
bGF0ZWRPZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0
b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdCBvdmVycmlkZTsKIAorICAgIC8v
IFB1YmxpYyBmb3IgRWxsaXBzaXNCb3gKKyAgICBOb2RlKiBub2RlRm9ySGl0VGVzdCgpIGNvbnN0
IG92ZXJyaWRlOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFkZE92ZXJmbG93RnJv
bUNoaWxkcmVuKCk7CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBSZW1vdmUgdmlydHVhbGl6YXRp
b24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJlbmRlckJsb2NrRmxvdwpAQCAtNDM1
LDggKzQzOCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlzU2VsZkNvbGxhcHNpbmdCbG9jaygp
IGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBjaGlsZHJlblByZXZlbnRTZWxmQ29s
bGFwc2luZygpIGNvbnN0OwotICAgIAotICAgIE5vZGUqIG5vZGVGb3JIaXRUZXN0KCkgY29uc3Q7
CiAKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2aXJ0dWFsaXphaW9uIHdoZW4gYWxs
IGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zsb3cKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnRGbG9hdHMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBib29sKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNDljMWZmZjAzYmUyMWFmZWIw
MDNiZGJiNjRhMDQ0OGMyYjI4NjcwMi4uNDBiYTFhZTIxNzYwMjU4MjQ3OGYyNjUwNzhhYWRmMjM1
OTdhNzUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTEyNTEs
NyArMTI1MSw3IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVx
dWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0CiAgICAgYm91bmRzUmVjdC5tb3Zl
QnkoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiBh
Y3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNl
Y3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBs
b2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91dFNpemUoYWRqdXN0ZWRMb2NhdGlv
bikpOwotICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoZWxl
bWVudCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBIaXRU
ZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2Vk
VGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5j
cHAKaW5kZXggNzM3MjEwYmFmNmViNmEzMGNkMjg2OTU1ZWRkNzUwZjBlNTk0MTc2My4uNjc4NDJm
ZWU1OWRkMTQxZDNlMTliYzg0MmYxMGU0ZThiNGRjMWI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTU2MCw3ICs1NjAsNyBAQCBib29sIFJlbmRlcklu
bGluZTo6aGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlcwogICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgdG1wTG9jYXRp
b24ucG9pbnQoKSk7CiAgICAgICAgIC8vIFdlIGNhbm5vdCB1c2UgYWRkTm9kZVRvTGlzdEJhc2Vk
VGVzdFJlc3VsdCB0byBkZXRlcm1pbmUgaWYgd2UgZnVsbHkgZW5jbG9zZSB0aGUgaGl0LXRlc3Qg
YXJlYQogICAgICAgICAvLyBiZWNhdXNlIGl0IGNhbiBvbmx5IGhhbmRsZSByZWN0YW5ndWxhciB0
YXJnZXRzLgotICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChlbGVt
ZW50KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIpOworICAgICAgICByZXN1bHQuYWRk
Tm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2Nh
dGlvbkluQ29udGFpbmVyKTsKICAgICAgICAgcmV0dXJuIHJlZ2lvblJlc3VsdC5jb250YWlucyh0
bXBMb2NhdGlvbi5ib3VuZGluZ0JveCgpKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
MTA0MywyMCArMTA0MywxNyBAQCB2b2lkIFJlbmRlcklubGluZTo6dXBkYXRlSGl0VGVzdFJlc3Vs
dChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JgogICAgICAgICByZXR1
cm47CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50KHBvaW50KTsKLSAgICBpZiAoRWxlbWVu
dCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkgeworICAgIGlmIChhdXRvKiBub2RlID0gbm9k
ZUZvckhpdFRlc3QoKSkgewogICAgICAgICBpZiAoaXNDb250aW51YXRpb24oKSkgewotICAgICAg
ICAgICAgLy8gV2UncmUgaW4gdGhlIGNvbnRpbnVhdGlvbiBvZiBhIHNwbGl0IGlubGluZS4gIEFk
anVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2UKLSAgICAg
ICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVuZGVyZXIncyBjb250YWluaW5nIGJsb2NrLiAg
VGhpcyB3aWxsIGVuZCB1cCBiZWluZyB0aGUgaW5uZXJOb25TaGFyZWROb2RlLgotICAgICAgICAg
ICAgUmVuZGVyQmxvY2sqIGZpcnN0QmxvY2sgPSBlbGVtZW50LT5yZW5kZXJlcigpLT5jb250YWlu
aW5nQmxvY2soKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gR2V0IG91ciBjb250YWlu
aW5nIGJsb2NrLgotICAgICAgICAgICAgUmVuZGVyQm94KiBibG9jayA9IGNvbnRhaW5pbmdCbG9j
aygpOwotICAgICAgICAgICAgbG9jYWxQb2ludC5tb3ZlQnkoYmxvY2stPmxvY2F0aW9uKCkgLSBm
aXJzdEJsb2NrLT5sb2NhdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGluIHRo
ZSBjb250aW51YXRpb24gb2YgYSBzcGxpdCBpbmxpbmUuIEFkanVzdCBvdXIgbG9jYWwgcG9pbnQg
dG8gYmUgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2UKKyAgICAgICAgICAgIC8vIG9mIHRoZSBwcmlu
Y2lwYWwgcmVuZGVyZXIncyBjb250YWluaW5nIGJsb2NrLiBUaGlzIHdpbGwgZW5kIHVwIGJlaW5n
IHRoZSBpbm5lck5vblNoYXJlZE5vZGUuCisgICAgICAgICAgICBhdXRvKiBmaXJzdEJsb2NrID0g
bm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICBsb2NhbFBv
aW50Lm1vdmVCeShjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSAtIGZpcnN0QmxvY2stPmxv
Y2F0aW9uT2Zmc2V0KCkpOwogICAgICAgICB9CiAKLSAgICAgICAgcmVzdWx0LnNldElubmVyTm9k
ZShlbGVtZW50KTsKKyAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2RlKTsKICAgICAgICAg
aWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCi0gICAgICAgICAgICByZXN1bHQuc2V0
SW5uZXJOb25TaGFyZWROb2RlKGVsZW1lbnQpOworICAgICAgICAgICAgcmVzdWx0LnNldElubmVy
Tm9uU2hhcmVkTm9kZShub2RlKTsKICAgICAgICAgcmVzdWx0LnNldExvY2FsUG9pbnQobG9jYWxQ
b2ludCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck11bHRpQ29sdW1uU2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtblNldC5jcHAKaW5kZXggYzgzODRmZDBmNjNhMGE0MzEzZWU3NjIyN2RiNmNkYmM5
YzU4ZWM0MS4uMjUxOTBjODI2NTIwZTkzMWQyMTIwM2Y5ZmEwODNiZTU0ZGZlNDNhNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCkBA
IC05NjQsNiArOTY0LDExIEBAIExheW91dFBvaW50IFJlbmRlck11bHRpQ29sdW1uU2V0Ojp0cmFu
c2xhdGVGcmFnbWVudFBvaW50VG9GcmFnbWVudGVkRmxvdyhjb25zdCBMCiAgICAgcmV0dXJuIGxv
Z2ljYWxQb2ludDsKIH0KIAorTm9kZSogUmVuZGVyTXVsdGlDb2x1bW5TZXQ6Om5vZGVGb3JIaXRU
ZXN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsK
K30KKwogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRU
ZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAo
cmVzdWx0LmlubmVyTm9kZSgpIHx8ICFwYXJlbnQoKS0+aXNSZW5kZXJWaWV3KCkpCkBAIC05NzEs
OCArOTc2LDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6dXBkYXRlSGl0VGVzdFJlc3Vs
dChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW8KICAgICAKICAgICAvLyBOb3RlIHRo
aXMgZG9lcyBub3Qgd29yayB3aXRoIGNvbHVtbiBzcGFucywgYnV0IG9uY2Ugd2UgaW1wbGVtZW50
IFJlbmRlclBhZ2VTZXQsIHdlIGNhbiBtb3ZlIHRoaXMgY29kZQogICAgIC8vIG92ZXIgdGhlcmUg
aW5zdGVhZCAoYW5kIHNwYW5zIG9mIGNvdXJzZSB3b24ndCBiZSBhbGxvd2VkIG9uIHBhZ2VzKS4K
LSAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsKLSAgICBpZiAo
bm9kZSkgeworICAgIGlmIChhdXRvKiBub2RlID0gbm9kZUZvckhpdFRlc3QoKSkgewogICAgICAg
ICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwogICAgICAgICBpZiAoIXJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKSkKICAgICAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vblNoYXJlZE5vZGUo
bm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5TZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5oCmluZGV4IDhmYTZjYzAzOWJmNmMxZGVlYWY2ZmNhZjUxOWEyYjVlMzU2OTJhMGYuLmVmOWMw
NWUyOGVkOWYzZTUyYzkyOWVhYWI0ODY5NGRlMGUzMWFlZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCkBAIC0xMzYsNiArMTM2LDggQEAg
cHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBsYXlvdXQoKSBvdmVycmlkZTsKIAorICAgIE5v
ZGUqIG5vZGVGb3JIaXRUZXN0KCkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICBMb2dpY2FsRXh0ZW50
Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBw
YWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpIG92ZXJyaWRlIHsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA0MzBmNzMzNjVj
Yjc2M2E2OGVjZWVjZjQ3ZTQ1NDk1Y2NiYjg4MzM5Li5jMGQyZDBjOGE5YjRiNTRjZTVmMzg4OGJl
NGM1NzZiZWEzNjNmMjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcApAQCAtMTU2OCwyMSArMTU2OCwyNCBAQCBib29sIFJlbmRlck9iamVjdDo6aGl0VGVzdChj
b25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LAogICAg
IHJldHVybiBpbnNpZGU7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVz
dWx0KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50KQorTm9k
ZSogUmVuZGVyT2JqZWN0Ojpub2RlRm9ySGl0VGVzdCgpIGNvbnN0CiB7Ci0gICAgaWYgKHJlc3Vs
dC5pbm5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTm9kZSogbm9kZSA9IHRoaXMt
Pm5vZGUoKTsKLQorICAgIGF1dG8qIG5vZGUgPSB0aGlzLT5ub2RlKCk7CiAgICAgLy8gSWYgd2Ug
aGl0IHRoZSBhbm9ueW1vdXMgcmVuZGVyZXJzIGluc2lkZSBnZW5lcmF0ZWQgY29udGVudCB3ZSBz
aG91bGQKICAgICAvLyBhY3R1YWxseSBoaXQgdGhlIGdlbmVyYXRlZCBjb250ZW50IHNvIHdhbGsg
dXAgdG8gdGhlIFBzZXVkb0VsZW1lbnQuCiAgICAgaWYgKCFub2RlICYmIHBhcmVudCgpICYmIHBh
cmVudCgpLT5pc0JlZm9yZU9yQWZ0ZXJDb250ZW50KCkpIHsKICAgICAgICAgZm9yIChhdXRvKiBy
ZW5kZXJlciA9IHBhcmVudCgpOyByZW5kZXJlciAmJiAhbm9kZTsgcmVuZGVyZXIgPSByZW5kZXJl
ci0+cGFyZW50KCkpCiAgICAgICAgICAgICBub2RlID0gcmVuZGVyZXItPmVsZW1lbnQoKTsKICAg
ICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CiAKLSAgICBpZiAobm9kZSkgewordm9pZCBSZW5kZXJP
YmplY3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBjb25zdCBM
YXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIG5vZGUgPSBub2RlRm9ySGl0VGVzdCgpKSB7CiAg
ICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobm9kZSk7CiAgICAgICAgIGlmICghcmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVk
Tm9kZShub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAy
OGZhMmNhODBlZjVjNzQwNDI2ZjFiMTk4MmVhODAzNTk5NjNhNDkxLi5lZDVlOGYxNmNiYTY5NDY2
N2QwYmM3ZjRiMzQwODc2ZTdjNTFlNjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCkBAIC01NTcsNyArNTU3LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNDb21wb3Np
dGVkKCkgY29uc3Q7CiAKICAgICBib29sIGhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVy
LCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RGaWx0ZXIgPSBI
aXRUZXN0QWxsKTsKKyAgICB2aXJ0dWFsIE5vZGUqIG5vZGVGb3JIaXRUZXN0KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0
IExheW91dFBvaW50Jik7CisKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0
VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2Nh
dGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhp
dFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNv
bnN0IExheW91dFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNw
cAppbmRleCBmMzExM2FmZjgwNDA1ZTJlNDY1MGY5NjFkMGRhMTNkZTNhMjA4NWY5Li43OTkxYzll
N2UwYzgxZjU3Nzc4NTJhMWNmY2MyMmRhNzMwNjBlMzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTE1NDQsNyArMTU0NCw3IEBAIGJvb2wgUmVuZGVyVGFi
bGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVz
dWx0JiByZXN1CiAgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0KGFkanVzdGVkTG9jYXRpb24sIHNp
emUoKSk7CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3RpbmcoKSAmJiAoYWN0aW9uID09IEhpdFRl
c3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3Vu
ZCkgJiYgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAg
ICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGluZ01vZGUobG9jYXRp
b25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFkanVzdGVkTG9jYXRpb24pKSk7
Ci0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChlbGVtZW50
KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpID09IEhpdFRlc3RQ
cm9ncmVzczo6U3RvcCkKKyAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0
UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJv
dW5kc1JlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCmluZGV4
IGQyMWMyNTQ5NzRjNDU0YjdhN2I0OGQ5NzJhNzVmMTFkZGI2NjExMDMuLmMyNGM4ZGZiNjE4ZjNj
YWZjN2QzYWE2ZjdkMTFkNzMxYmQwZWM3MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHAKQEAgLTY2Miw2ICs2NjIsMTEgQEAgSW50U2l6ZSBSZW5kZXJWaWV3Ojp2aWV3
cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKCkgY29uc3QKICAgICByZXR1cm4gZnJhbWVWaWV3
KCkudmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cygpOwogfQogCitOb2RlKiBSZW5kZXJW
aWV3Ojpub2RlRm9ySGl0VGVzdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCkuZG9j
dW1lbnRFbGVtZW50KCk7Cit9CisKIHZvaWQgUmVuZGVyVmlldzo6dXBkYXRlSGl0VGVzdFJlc3Vs
dChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwb2ludCkKIHsKICAg
ICBpZiAocmVzdWx0LmlubmVyTm9kZSgpKQpAQCAtNjcwLDggKzY3NSw3IEBAIHZvaWQgUmVuZGVy
Vmlldzo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExh
eW91dFBvaW50JiBwCiAgICAgaWYgKG11bHRpQ29sdW1uRmxvdygpICYmIG11bHRpQ29sdW1uRmxv
dygpLT5maXJzdE11bHRpQ29sdW1uU2V0KCkpCiAgICAgICAgIHJldHVybiBtdWx0aUNvbHVtbkZs
b3coKS0+Zmlyc3RNdWx0aUNvbHVtblNldCgpLT51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwg
cG9pbnQpOwogCi0gICAgTm9kZSogbm9kZSA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7
Ci0gICAgaWYgKG5vZGUpIHsKKyAgICBpZiAoYXV0byogbm9kZSA9IG5vZGVGb3JIaXRUZXN0KCkp
IHsKICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2RlKTsKICAgICAgICAgaWYgKCFyZXN1
bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25T
aGFyZWROb2RlKG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXgg
MGVkNzJjZjEyOWViZTcyNjk5ZmI2NzcwNDE1NzVlNzBlNTFkNTI5My4uOTE0ZWJiYzdkZDNlODI1
YWQ1YWQxNDEwMGY1NjQxZGViYzZiODdiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCkBAIC0yMTEsNiArMjExLDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgaXNTY3JvbGxh
YmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgTm9kZSogbm9k
ZUZvckhpdFRlc3QoKSBjb25zdCBvdmVycmlkZTsKKwogcHJpdmF0ZToKICAgICBGcmFtZVZpZXcm
IG1fZnJhbWVWaWV3OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKaW5kZXggMzc3MWI2MzQwYTMwZDdhMGMzZTM0YWU3
Njk1YzNiYTgwNzdlZDVhMC4uNzc1MTI4ZGRiYTFiODZjYTJhMTI0NWZiZjE2Y2E1OTY5OWEwZTgw
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRG
dW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0RnVuY3Rpb25zLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBAIGJvb2wgaGl0VGVzdEZsb3coY29u
c3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCwgY29uc3QgSGl0
VGVzCiAgICAgICAgIGlmICghbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGxpbmVSZWN0
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICByZW5kZXJlci51cGRhdGVIaXRUZXN0
UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXpl
KGFjY3VtdWxhdGVkT2Zmc2V0KSk7Ci0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJh
c2VkVGVzdFJlc3VsdChyZW5kZXJlci5ub2RlKCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWlu
ZXIsIGxpbmVSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgIGlmIChyZXN1
bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlci5ub2RlRm9ySGl0VGVzdCgp
LCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBsaW5lUmVjdCkgPT0gSGl0VGVzdFByb2dy
ZXNzOjpTdG9wKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBm
YWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcAppbmRleCA5OGIzMTVkNjc0NDNlNTZiYTQwNGMyNTEyZWMxMjVhNDVhNjA4YmRj
Li5iMmJmNWRlODhhN2RkNDdlYmM3MTg4MTkyZmQ4ZjBhZmY2MzBmZTg5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCkBAIC0x
NzcsNyArMTc3LDcgQEAgYm9vbCBSZW5kZXJTVkdDb250YWluZXI6Om5vZGVBdEZsb2F0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3QKICAgICAvLyBBY2Nlc3NpYmls
aXR5IHdhbnRzIHRvIHJldHVybiBTVkcgY29udGFpbmVycywgaWYgYXBwcm9wcmlhdGUuCiAgICAg
aWYgKHJlcXVlc3QudHlwZSgpICYgSGl0VGVzdFJlcXVlc3Q6OkFjY2Vzc2liaWxpdHlIaXRUZXN0
ICYmIG1fb2JqZWN0Qm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKICAgICAgICAg
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIExheW91dFBvaW50KGxvY2FsUG9pbnQpKTsKLSAg
ICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCZlbGVtZW50KCks
IHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAg
aWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCks
IHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKaW5kZXggYzQ0ODQ4NTIwOTJkYmUwZjZkMzBiZjkx
Mzg3OTcxYjVjYzlmZGMwOS4uMjc4ZWI5YzRkMTk2YTc5Nzk3NmE2ZTE1MTJjNTIwNWIyMGZhYWZm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFn
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5j
cHAKQEAgLTIyOSw3ICsyMjksNyBAQCBib29sIFJlbmRlclNWR0ltYWdlOjpub2RlQXRGbG9hdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdQogICAgICAgICBp
ZiAoaGl0UnVsZXMuY2FuSGl0RmlsbCkgewogICAgICAgICAgICAgaWYgKG1fb2JqZWN0Qm91bmRp
bmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgTGF5b3V0UG9pbnQobG9jYWxQb2ludCkpOwotICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgmaW1hZ2VFbGVtZW50
KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAg
ICAgICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQobm9kZUZv
ckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYWxQb2ludCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9w
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdS
b290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHAK
aW5kZXggZGYwZWY2ZjZmM2VkOGUzZDQyMTI5OTRhOWUwMzM3NjQyNTEwY2I1OS4uYTA4YjMyMTUx
NThlNDI2NmMwMzc0ODMzMWU2MDVlZWVkNzQxZTViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC00MjYsNyArNDI2LDcgQEAgYm9vbCBS
ZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwg
SGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0KGFjY3VtdWxh
dGVkT2Zmc2V0ICsgbG9jYXRpb24oKSwgc2l6ZSgpKTsKICAgICAgICAgaWYgKGxvY2F0aW9uSW5D
b250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgewogICAgICAgICAgICAgdXBkYXRlSGl0
VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gpOwotICAgICAgICAgICAgaWYgKHJl
c3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCZzdmdTVkdFbGVtZW50KCksIHJlcXVl
c3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6
U3RvcCkKKyAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3Vs
dChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNS
ZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwCmluZGV4IDg0MzhlZGFhZTMwYjk1MDE2MGIzYjFlZWM1Y2QzZmEz
MTgyOWI4OTYuLmZhMTlkMTViYjQ1NjQ0ZmMxYmNhOWIxZGY1MjM4MTcwZjlkOWM5NGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCkBAIC0z
NzcsNyArMzc3LDcgQEAgYm9vbCBSZW5kZXJTVkdTaGFwZTo6bm9kZUF0RmxvYXRQb2ludChjb25z
dCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3UKICAgICAgICAgICAgIHx8ICho
aXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS5oYXNGaWxsKCkgfHwgIWhpdFJ1bGVzLnJl
cXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2ludCwgaGl0UnVsZXMucmVxdWlyZUZp
bGwsIGZpbGxSdWxlKSkKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRCb3VuZGluZ0Jv
eCAmJiBvYmplY3RCb3VuZGluZ0JveCgpLmNvbnRhaW5zKGxvY2FsUG9pbnQpKSkgewogICAgICAg
ICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIExheW91dFBvaW50KGxvY2FsUG9pbnQp
KTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgm
Z3JhcGhpY3NFbGVtZW50KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9ncmVz
czo6U3RvcCkKKyAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJl
c3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhbFBvaW50KSA9PSBIaXRUZXN0UHJv
Z3Jlc3M6OlN0b3ApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcAppbmRleCBmY2VkYjNiYTQ1ZDI3NWE0NTMyZTQ0MTE5Mjg4N2EwYjUyZmYwYzA1Li4zZDMy
NTVmOGY3YjRlNGI0MThmMGI0ZGYyNjk3Y2RkZWYzZTNkYzIzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTY2OCw3ICs2Njgs
NyBAQCBib29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50UXVhZC5jb250YWluc1BvaW50KGxvY2F0aW9uSW5D
b250YWluZXIucG9pbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcmVyKCku
dXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAt
IHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCZyZW5kZXJlcigpLnRl
eHROb2RlKCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpID09IEhpdFRlc3RQ
cm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9k
ZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLm5vZGVGb3JIaXRUZXN0KCksIHJlcXVl
c3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1NzE0MWNlZWJkMzEyMjE2NGVkZGU3
NjllOTNhYjdlNzY5YTNiNmQ1Li5mN2M4MDZlMTNlOGE2NjFlMWIzNjI1OGZhMjk2NTcxYThkYWZm
MTFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjAtMDMtMTQgIERhbmllbCBCYXRlcyAgPGRh
YmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIEFTU0VSVElPTiBGQUlMVVJFOiAhcmVzdWx0Lmlu
bmVyTm9kZSgpIHx8IChyZXF1ZXN0LnJlc3VsdElzRWxlbWVudExpc3QoKSAmJiByZXN1bHQubGlz
dEJhc2VkVGVzdFJlc3VsdCgpLnNpemUoKSkgaW4gUmVuZGVyTGF5ZXI6OmhpdFRlc3RDb250ZW50
cygpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkx
MTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZh
c3QvZG9tL25vZGVzRnJvbVJlY3QvcHNldWRvLWVtcHR5LXN2Zy1pbWFnZS1jcmFzaC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QvcHNldWRvLWVt
cHR5LXN2Zy1pbWFnZS1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAyMC0wMy0xMyAgSmFjb2IgVXBo
b2ZmICA8amFjb2JfdXBob2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBbIG1hY09TIF0gd2ViZ3B1
L3dobHNsL3VpbnQtYml0d2lzZS5odG1sIGlzIGZsYWt5IGNyYXNoaW5nCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L3BzZXVkby1lbXB0eS1zdmctaW1hZ2Ut
Y3Jhc2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC9w
c2V1ZG8tZW1wdHktc3ZnLWltYWdlLWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jOWFm
YTgxMzM2Y2U4Njc4ZTQzNzMxZjUxZGEzMmQ1ZTMwYWY3OWRmCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC9wc2V1ZG8tZW1wdHktc3ZnLWltYWdl
LWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK0FMRVJUOiBQQVNTOiBUaGlzIHRl
c3QgZGlkIG5vdCB0cmlnZ2VyIGFuIEFTU0VSVC4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vbm9kZXNGcm9tUmVjdC9wc2V1ZG8tZW1wdHktc3ZnLWltYWdlLWNyYXNoLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L3BzZXVkby1lbXB0eS1zdmctaW1h
Z2UtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmVjYjQ2YzQ3ZWUwM2IyZGJiMGY4MGI4ZTQwOGQ4
YzJiYjZjMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC9wc2V1ZG8tZW1wdHktc3ZnLWltYWdlLWNyYXNoLmh0bWwKQEAgLTAsMCArMSw2NCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlIGlkPSJ0ZXN0LXN0eWxl
cyI+CisuaWNvbiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworfQorLmljb246OmJlZm9yZSB7
CisgICAgY29udGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxuczp4bGluaz0i
aHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIw
MDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGhlaWdodD0iNzI3cHgiPjwvc3ZnPicpOworfQorPC9zdHls
ZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0iaWNvbiI+PC9kaXY+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cisg
ICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIG5vZGVzSW5SZWN0
KHgsIHksIHdpZHRoLCBoZWlnaHQpCit7CisgICAgaWYgKCF3aW5kb3cuaW50ZXJuYWxzKQorICAg
ICAgICByZXR1cm47CisKKyAgICBsZXQgbGVmdFBhZGRpbmcgPSBNYXRoLmZsb29yKHdpZHRoIC8g
Mik7CisgICAgbGV0IHRvcFBhZGRpbmcgPSBNYXRoLmZsb29yKGhlaWdodCAvIDIpOworICAgIGxl
dCBjZW50ZXJYID0gTWF0aC5mbG9vcih4ICsgbGVmdFBhZGRpbmcpOworICAgIGxldCBjZW50ZXJZ
ID0gTWF0aC5mbG9vcih5ICsgdG9wUGFkZGluZyk7CisgICAgLy8gRklYTUU6IFdoZW4gbm9kZXNG
cm9tUmVjdCBpcyBjaGFuZ2VkIHRvIG5vdCBhZGQgMSB0byB3aWR0aCBhbmQgaGVpZ2h0LCByZW1v
dmUgdGhlIGNvcnJlY3Rpb24gaGVyZS4KKyAgICBsZXQgYm90dG9tUGFkZGluZyA9IE1hdGguZmxv
b3IoKGhlaWdodCAtIDEpIC0gdG9wUGFkZGluZyk7CisgICAgbGV0IHJpZ2h0UGFkZGluZyA9IE1h
dGguZmxvb3IoKHdpZHRoIC0gMSkgLSBsZWZ0UGFkZGluZyk7CisKKyAgICBjb25zdCBpZ25vcmVD
bGlwcGluZyA9IGZhbHNlOworICAgIGNvbnN0IGFsbG93VXNlckFnZW50U2hhZG93Q29udGVudCA9
IGZhbHNlOworICAgIGNvbnN0IGFsbG93Q2hpbGRGcmFtZUNvbnRlbnQgPSBmYWxzZTsKKyAgICBy
ZXR1cm4gaW50ZXJuYWxzLm5vZGVzRnJvbVJlY3QoZG9jdW1lbnQsIGNlbnRlclgsIGNlbnRlclks
IHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBhZGRpbmcsIGln
bm9yZUNsaXBwaW5nLCBhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQsIGFsbG93Q2hpbGRGcmFt
ZUNvbnRlbnQpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy5p
bnRlcm5hbHMpIHsKKyAgICAgICAgYWxlcnQoIlRoaXMgdGVzdCByZXF1aXJlcyB3aW5kb3cuaW50
ZXJuYWxzIik7CisgICAgICAgIHJldHVybiA7CisgICAgfQorCisgICAgZnVuY3Rpb24gaGFuZGxl
U3R5bGVzaGVldExvYWRlZCgpIHsKKyAgICAgICAgZnVuY3Rpb24gYWN0dWFsUnVuVGVzdCgpIHsK
KyAgICAgICAgICAgIG5vZGVzSW5SZWN0KDAsIDAsIDEwNjEsIDU1Mik7CisKKyAgICAgICAgICAg
IGFsZXJ0KCJQQVNTOiBUaGlzIHRlc3QgZGlkIG5vdCB0cmlnZ2VyIGFuIEFTU0VSVC4iKTsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBOZWVkIHRvIHVzZSBhIHpl
cm8tdGltZXIgYXMgdGhlIDo6YmVmb3JlIGNvbnRlbnQgbWF5IG5vdCBoYXZlIGxvYWRlZCwgeWV0
LgorICAgICAgICB3aW5kb3cuc2V0VGltZW91dChhY3R1YWxSdW5UZXN0LCAwKTsKKyAgICB9Cisg
ICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3Qtc3R5bGVzIikuYWRkRXZlbnRMaXN0ZW5l
cigibG9hZCIsIGhhbmRsZVN0eWxlc2hlZXRMb2FkZWQsIGZhbHNlKTsKK30KKworcnVuVGVzdCgp
OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393605</attachid>
            <date>2020-03-14 22:23:06 -0700</date>
            <delta_ts>2020-03-15 17:22:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209112-20200314222306.patch</filename>
            <type>text/plain</type>
            <size>36804</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4NDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjYwYjIzYmJiZjQ4ZjJi
MGNmYTEwYzczN2Y5MGFkOWExOTA4N2Q3MC4uMjQ0NzdhZjFiM2U5MWVjNWUzNWRlYTNlMTVmNzYz
NWUzNWY1MDA3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDIwLTAzLTE0ICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KKworICAgICAgICBBU1NFUlRJT04gRkFJTFVS
RTogIXJlc3VsdC5pbm5lck5vZGUoKSB8fCAocmVxdWVzdC5yZXN1bHRJc0VsZW1lbnRMaXN0KCkg
JiYgcmVzdWx0Lmxpc3RCYXNlZFRlc3RSZXN1bHQoKS5zaXplKCkpIGluIFJlbmRlckxheWVyOjpo
aXRUZXN0Q29udGVudHMoKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5MTEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgRml4IHJlY3QtYmFzZWQgaGl0IHRlc3RpbmcgKGUuZy4gdXNlZCBpbiB0aGUgaW1w
bCBvZiBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCgpKSBvZiA6OmJlZm9yZQorICAgICAgICBh
bmQgOjphZnRlciBwc2V1ZG8gZWxlbWVudHMuIFNhbWUgaXNzdWUgYXMgaW4gcjEzMzMzMCwgdXBk
YXRlSGl0VGVzdFJlc3VsdCgpIGFuZCBhZGROb2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KCkKKyAg
ICAgICAgYXJlIHVzaW5nIGRpZmZlcmVudCAiaGl0IiBub2Rlcy4gSW4gcGFydGljdWxhciwgUmVu
ZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KCkga25vd3MgaG93IHRvCisgICAgICAgIHJl
YXNvbiBhYm91dCA6OmJlZm9yZSBhbmQgOjphZnRlciBwc2V1ZG8gZWxlbWVudHMsIGJ1dCBhZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KCkgY2Fubm90LgorICAgICAgICBTdGFuZGFyZGl6ZSB0
aGUgY29uY2VwdCBvZiB0aGUgbm9kZSB1c2VkIGZvciBoaXQgdGVzdGluZyBmcm9tIHNvbWV0aGlu
Zy1zcGVjaWZpY2FsbHkgYWRkZWQgdG8gUmVuZGVyQmxvY2sKKyAgICAgICAgaW4gcjEzMzMzMCB0
byBhbGwgcmVuZGVyZXJzLiBIYXZlIGJvdGggdXBkYXRlSGl0VGVzdFJlc3VsdCgpIGFuZCBhZGRO
b2RlVG9SZWN0QmFzZWRUZXN0UmVzdWx0KCkKKyAgICAgICAgbWFrZSB1c2Ugb2YgdGhpcyBjb25j
ZXB0IHNvIHRoYXQgdGhleSBjb25zaWRlciB0aGUgc2FtZSBoaXQgbm9kZS4KKworICAgICAgICBU
ZXN0OiBmYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L3BzZXVkby1lbXB0eS1zdmctaW1hZ2UtY3Jhc2gu
aHRtbAorCisgICAgICAgICogbGF5b3V0L2ludGVncmF0aW9uL0xheW91dEludGVncmF0aW9uTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRJbnRlZ3JhdGlvbjo6TGluZUxh
eW91dDo6aGl0VGVzdCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpub2RlQXRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0Jv
eDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6Om5vZGVBdFBvaW50KToKKyAgICAgICAg
VXBkYXRlIGNvZGUgdG8gY2FsbCBub2RlRm9ySGl0VGVzdCgpIHRvIGtlZXAgdGhlIGNvZGUgYmVo
YXZpb3Igd2UgaGF2ZSB0b2RheS4gTm90ZSB0aGF0IFJlbmRlckVsZW1lbnQ6OmVsZW1lbnQoKQor
ICAgICAgICBhbmQgUmVuZGVyVGV4dDo6dGV4dE5vZGUoKSBqdXN0IGNhc3QgdGhlIHJldHVybiB2
YWx1ZSBvZiBSZW5kZXJPYmplY3Q6Om5vZGUoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVGb3JIaXRUZXN0
IGNvbnN0KTogUmVtb3ZlIHNwZWNpYWwgY2FzZSBmb3IgUmVuZGVyVmlldyBub3cgdGhhdCBJIGFk
ZGVkIFJlbmRlclZpZXc6Om5vZGVGb3JIaXRUZXN0KCkuCisgICAgICAgIE1vcmVvdmVyLCB0aGlz
IHNwZWNpYWwgY2FzZSB3YXMgcmV0dXJuaW5nIHRoZSBkb2N1bWVudCBldmVuIHRob3VnaCBSZW5k
ZXJWaWV3Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KCkgaGl0CisgICAgICAgIHRlc3QgdGhlIGRvY3Vt
ZW50IGVsZW1lbnQuIFNlZSByZW1hcmtzIGZvciBSZW5kZXJWaWV3Ojpub2RlRm9ySGl0VGVzdCgp
IGZvciBtb3JlIGRldGFpbHMuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6Om5vZGVBdFBvaW50KTogVXNlIG5vZGVGb3JIaXRUZXN0KCkuIFRoaXMgZml4ZXMgdGhl
IGJ1Zy4gQ3VycmVudGx5LCB1cGRhdGVIaXRUZXN0UmVzdWx0KCkKKyAgICAgICAga25vd3MgdGhh
dCB3aGVuIFJlbmRlck9iamVjdDo6bm9kZSgpIGlzIG51bGxwdHIgYW5kIHRoZSBwYXJlbnQgcmVu
ZGVyZXIgaXMgZm9yIGdlbmVyYXRlZCBjb250ZW50IHRoYXQgaXQgY2FuCisgICAgICAgIHdhbGsg
dXAgdGhlIGhpZXJhcmNoeSB0byBmaW5kIHRoZSBoaXQgUHNldWRvRWxlbWVudC4gQnV0IGluIHRo
ZSBjYWxsIHRvIGFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoKSwgUmVuZGVyT2JqZWN0Ojpl
bGVtZW50KCkKKyAgICAgICAgd2FzIHBhc3NlZCwgd2hpY2ggaXMgbnVsbHB0ciBmb3IgYW4gYW5v
bnltb3VzZSBub2RlLCBhbmQgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCgpIGRvZXNuJ3Qg
aGF2ZSBlbm91Z2ggaW5mbworICAgICAgICB0byBrbm93IHRoYXQgdGhpcyBtZWFucyBnZW5lcmF0
ZWQgY29udGVudCB3YXMgaGl0IGFuZCBoZW5jZSBpdCBpcyBub3QgYWJsZSB0byBmaW5kIHRoZSBQ
c2V1ZG9FbGVtZW50LiBUaGlzCisgICAgICAgIGRpc2FncmVlbWVudCBjYXVzZWQgdGhlIGFzc2Vy
dGlvbiBmYWlsdXJlIGJlY2F1c2UgdXBkYXRlSGl0VGVzdFJlc3VsdCgpIHdvdWxkIHVwZGF0ZSB0
aGUgaW5uZXIgbm9kZSwgYnV0CisgICAgICAgIGFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQo
KSB3b3VsZCBub3QgYWRkIGEgbm9kZSB0byB0aGUgc2V0LgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpoaXRUZXN0
Q3VsbGVkSW5saW5lKTogVXNlIG5vZGVGb3JIaXRUZXN0KCkuCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbmxpbmU6OnVwZGF0ZUhpdFRlc3RSZXN1bHQpOiBVcGRhdGUgY29kZSBhcyBuZWVkZWQg
dG8gdXNlIG5vZGVGb3JIaXRUZXN0KCkuIEFsc28gd2hpbGUgSQorICAgICAgICBhbSBoZXJlIGZp
eCB1cCBjb2RlIHN0eWxlIG9mIGNvbW1lbnQgYW5kIHJlbmFtZSB0aGUgbG9jYWwgZnJvbSBlbGVt
ZW50IHRvIG5vZGUgdG8gbWF0Y2ggdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBvZiBub2RlRm9y
SGl0VGVzdCgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6bm9kZUZvckhpdFRlc3Qg
Y29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0Ojp1
cGRhdGVIaXRUZXN0UmVzdWx0KTogVXBkYXRlIGNvZGUgYXMgbmVlZGVkIHRvIHVzZSBub2RlRm9y
SGl0VGVzdCgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojpub2RlRm9ySGl0VGVzdCBjb25zdCk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KTogVXBkYXRlIGNvZGUgYXMg
bmVlZGVkIHRvIHVzZSBub2RlRm9ySGl0VGVzdCgpLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KTogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVmlldzo6
bm9kZUZvckhpdFRlc3QgY29uc3QpOiBBZGRlZC4gVGhpcyBvdmVycmlkZXMgUmVuZGVyQmxvY2s6
Om5vZGVGb3JIaXRUZXN0KCksIHdoaWNoCisgICAgICAgIGZvbGxvd2luZyByMTU1MzcwIHdhcyBy
ZXR1cm5pbmcgdGhlIGRvY3VtZW50IGFzIHRoZSBoaXQgdGVzdCBub2RlIGV2ZW4gdGhvdWdoIFJl
bmRlclZpZXc6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoKQorICAgICAgICBjb25zaWRlcmVkIHRoZSBk
b2N1bWVudCBlbGVtZW50IGFzIHRoZSBoaXQgbm9kZSBmb3IgYSBSZW5kZXJWaWV3LiBBcyBhIHJl
c3VsdCBvZiB0aGlzIGNoYW5nZSwgdGhlIHJlY3QtYmFzZWQKKyAgICAgICAgaGl0IHRlc3Rpbmcg
bm8gbG9uZ2VyIHJldHVybnMgdGhlIGRvY3VtZW50IChzZWVuIGluIHRlc3QgcmVzdWx0cyBhcyAj
ZG9jdW1lbnQpIGluIHRoZSBsaXN0IG9mIG5vZGVzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
Vmlldzo6dXBkYXRlSGl0VGVzdFJlc3VsdCk6IFVwZGF0ZSBjb2RlIGFzIG5lZWRlZCB0byB1c2Ug
bm9kZUZvckhpdFRlc3QoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmhpdFRlc3RGbG93KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpub2RlQXRGbG9hdFBvaW50KTogRGl0dG8uCisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdJbWFnZTo6bm9kZUF0RmxvYXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUm9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdS
b290Ojpub2RlQXRQb2ludCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHU2hhcGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHU2hhcGU6Om5vZGVBdEZs
b2F0UG9pbnQpOiBEaXR0by4KKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bm9kZUF0UG9pbnQp
OiBEaXR0by4KKwogMjAyMC0wMy0xNCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+
CiAKICAgICAgICAgU2hhcmUgSGl0VGVzdFJlc3VsdDo6YWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJl
c3VsdCgpIGltcGwgZm9yIExheW91dFJlY3QgYW5kIEZsb2F0UmVjdCBvdmVybG9hZHMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbnRlZ3JhdGlvbi9MYXlvdXRJbnRlZ3JhdGlv
bkxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91
dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKaW5kZXggZThkYjM3ODM1ODI4MzQyMzk1YWRiNDA1
YTE2ZDVmZTY0N2I3MWQ5Ni4uODJlODlkMzM0ZmU4YmMyZmNmNWM2ZmFhN2EwMjYxODRjOGJkNTFm
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVncmF0aW9uL0xheW91dElu
dGVncmF0aW9uTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2ludGVn
cmF0aW9uL0xheW91dEludGVncmF0aW9uTGluZUxheW91dC5jcHAKQEAgLTM0OSw3ICszNDksNyBA
QCBib29sIExpbmVMYXlvdXQ6OmhpdFRlc3QoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3Qs
IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgYwogICAgICAgICBhdXRvJiByZW5kZXJlciA9IGNvbnN0
X2Nhc3Q8UmVuZGVyT2JqZWN0Jj4oKm1fYm94VHJlZS5yZW5kZXJlckZvckxheW91dEJveChydW4u
bGF5b3V0Qm94KCkpKTsKIAogICAgICAgICByZW5kZXJlci51cGRhdGVIaXRUZXN0UmVzdWx0KHJl
c3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxh
dGVkT2Zmc2V0KSk7Ci0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJl
c3VsdChyZW5kZXJlci5ub2RlKCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJ1blJl
Y3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgaWYgKHJlc3VsdC5hZGROb2Rl
VG9MaXN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyLm5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3Qs
IGxvY2F0aW9uSW5Db250YWluZXIsIHJ1blJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5jcHAKaW5kZXggYjU4NDkxOWQ0ZmQ3MDFmZTBjZTIwY2Y2ZDJhZDNkMTVm
NGVlNDNlNi4uMmM5Yzc0ODJlZDcwY2ZmOGFiYTE2NjY5Njk0ODFmZWM5ZTFiMzMyNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC0xNjMsNyArMTYzLDcgQEAg
Ym9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVl
c3QsIEhpdFRlc3RSZXN1bHQmIHJlc3UKICAgICBMYXlvdXRSZWN0IGJvdW5kc1JlY3QgeyBhZGp1
c3RlZExvY2F0aW9uLCBMYXlvdXRTaXplKExheW91dFVuaXQobG9naWNhbFdpZHRoKCkpLCBtX2hl
aWdodCkgfTsKICAgICBpZiAodmlzaWJsZVRvSGl0VGVzdGluZygpICYmIGJvdW5kc1JlY3QuaW50
ZXJzZWN0cyhIaXRUZXN0TG9jYXRpb246OnJlY3RGb3JQb2ludChsb2NhdGlvbkluQ29udGFpbmVy
LnBvaW50KCksIDAsIDAsIDAsIDApKSkgewogICAgICAgICBibG9ja0Zsb3coKS51cGRhdGVIaXRU
ZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRT
aXplKGFkanVzdGVkTG9jYXRpb24pKTsKLSAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0
QmFzZWRUZXN0UmVzdWx0KGJsb2NrRmxvdygpLmVsZW1lbnQoKSwgcmVxdWVzdCwgbG9jYXRpb25J
bkNvbnRhaW5lciwgYm91bmRzUmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQorICAgICAg
ICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RSZXN1bHQoYmxvY2tGbG93KCkubm9k
ZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYXRpb25JbkNvbnRhaW5lciwgYm91bmRzUmVjdCkg
PT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKaW5kZXggM2Fi
MWE5NWI3YzUwMTJkMDBlYmFlM2RjZjViZDQyMmZmNTFiMWY1MS4uYzcwNWRiMWIzNjAyYjJiYTdh
ZDdhYjcxNzg0MWIwZTU2MGM5MTI4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcApAQCAtMTE0MSw3ICsxMTQxLDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYg
cmUKIAogICAgIGlmIChsb2NhdGlvbkluQ29udGFpbmVyLmludGVyc2VjdHMocmVjdCkpIHsKICAg
ICAgICAgcmVuZGVyZXIoKS51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgZmxpcEZvcldyaXRp
bmdNb2RlKGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVs
YXRlZE9mZnNldCkpKTsgLy8gRG9uJ3QgYWRkIGluIG1feCBvciBtX3kgaGVyZSwgd2Ugd2FudCBj
b29yZHMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBzcGFjZS4KLSAgICAgICAgaWYgKHJlc3Vs
dC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KHJlbmRlcmVyKCkuZWxlbWVudCgpLCByZXF1
ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCByZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3Ap
CisgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJl
cigpLm5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3Qp
ID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGE4
NzYyMWRmZjEwODIxNGQxNTdkODdiNzg1YjYxMzA1ZjI5MmE2NzguLjE5Yjc5NDZjNDA2MWZhYjJh
MmJhZDEwMTgyZjg5MDI2MjIzNDM0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAKQEAgLTM4NSw3ICszODUsNyBAQCBib29sIElubGluZVRleHRCb3g6Om5v
ZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiBy
ZQogCiAgICAgaWYgKGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhyZWN0KSkgewogICAg
ICAgICByZW5kZXJlcigpLnVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlwRm9yV3JpdGlu
Z01vZGUobG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxh
dGVkT2Zmc2V0KSkpOwotICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RCYXNlZFRlc3RS
ZXN1bHQocmVuZGVyZXIoKS50ZXh0Tm9kZSgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCByZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgIGlmIChyZXN1bHQuYWRk
Tm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLm5vZGVGb3JIaXRUZXN0KCksIHJl
cXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3Rv
cCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCBmMGZiODllNmNmNWFh
NmM3ZGE4Y2M4NGFlNmVhMTRmMzUwNjI5NzU4Li43NTcyNmFkMWYzZDA0ZTU2NmUwMWNlZWZmNjRk
N2Q4MGViNGZkMGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAK
QEAgLTE5OTAsOCArMTk5MCw2IEBAIE5vZGUqIFJlbmRlckJsb2NrOjpub2RlRm9ySGl0VGVzdCgp
IGNvbnN0CiAgICAgLy8gSWYgd2UgYXJlIGluIHRoZSBtYXJnaW5zIG9mIGJsb2NrIGVsZW1lbnRz
IHRoYXQgYXJlIHBhcnQgb2YgYQogICAgIC8vIGNvbnRpbnVhdGlvbiB3ZSdyZSBhY3R1YWxseSBz
dGlsbCBpbnNpZGUgdGhlIGVuY2xvc2luZyBlbGVtZW50CiAgICAgLy8gdGhhdCB3YXMgc3BsaXQu
IFVzZSB0aGUgYXBwcm9wcmlhdGUgaW5uZXIgbm9kZS4KLSAgICBpZiAoaXNSZW5kZXJWaWV3KCkp
Ci0gICAgICAgIHJldHVybiAmZG9jdW1lbnQoKTsKICAgICByZXR1cm4gY29udGludWF0aW9uKCkg
PyBjb250aW51YXRpb24oKS0+ZWxlbWVudCgpIDogZWxlbWVudCgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGRmMDE5Zjc2NDVjOTkxMTVhZjFiMTFlYTBj
NjFjZmIyYTNkN2RiZWMuLmIzOTQxNzZiMDYwOWZkOGVlM2UwZmU3ZjA1NjE1MGIxNmYxYWYwNDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0zOTcsNiArMzk3LDkg
QEAgcHVibGljOgogICAgIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZv
aWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIHdhc0ZpeGVkKSBjb25z
dCBvdmVycmlkZTsKIAorICAgIC8vIFB1YmxpYyBmb3IgRWxsaXBzaXNCb3gKKyAgICBOb2RlKiBu
b2RlRm9ySGl0VGVzdCgpIGNvbnN0IG92ZXJyaWRlOworCiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIGFkZE92ZXJmbG93RnJvbUNoaWxkcmVuKCk7CiAgICAgLy8gRklYTUUtQkxPQ0tGTE9X
OiBSZW1vdmUgdmlydHVhbGl6YXRpb24gd2hlbiBhbGwgY2FsbGVycyBoYXZlIG1vdmVkIHRvIFJl
bmRlckJsb2NrRmxvdwpAQCAtNDM1LDggKzQzOCw2IEBAIHByaXZhdGU6CiAKICAgICBib29sIGlz
U2VsZkNvbGxhcHNpbmdCbG9jaygpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBj
aGlsZHJlblByZXZlbnRTZWxmQ29sbGFwc2luZygpIGNvbnN0OwotICAgIAotICAgIE5vZGUqIG5v
ZGVGb3JIaXRUZXN0KCkgY29uc3Q7CiAKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFJlbW92ZSB2
aXJ0dWFsaXphaW9uIHdoZW4gYWxsIGNhbGxlcnMgaGF2ZSBtb3ZlZCB0byBSZW5kZXJCbG9ja0Zs
b3cKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRGbG9hdHMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmLCBib29sKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5k
ZXggNDljMWZmZjAzYmUyMWFmZWIwMDNiZGJiNjRhMDQ0OGMyYjI4NjcwMi4uNDBiYTFhZTIxNzYw
MjU4MjQ3OGYyNjUwNzhhYWRmMjM1OTdhNzUwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAKQEAgLTEyNTEsNyArMTI1MSw3IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
CiAgICAgYm91bmRzUmVjdC5tb3ZlQnkoYWRqdXN0ZWRMb2NhdGlvbik7CiAgICAgaWYgKHZpc2li
bGVUb0hpdFRlc3RpbmcoKSAmJiBhY3Rpb24gPT0gSGl0VGVzdEZvcmVncm91bmQgJiYgbG9jYXRp
b25JbkNvbnRhaW5lci5pbnRlcnNlY3RzKGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBsb2NhdGlvbkluQ29udGFpbmVyLnBvaW50KCkgLSB0b0xheW91
dFNpemUoYWRqdXN0ZWRMb2NhdGlvbikpOwotICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xp
c3RCYXNlZFRlc3RSZXN1bHQoZWxlbWVudCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVy
LCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCisgICAgICAgIGlmIChyZXN1
bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0
LCBsb2NhdGlvbkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0
b3ApCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcklubGluZS5jcHAKaW5kZXggNzM3MjEwYmFmNmViNmEzMGNkMjg2OTU1ZWRk
NzUwZjBlNTk0MTc2My4uNjc4NDJmZWU1OWRkMTQxZDNlMTliYzg0MmYxMGU0ZThiNGRjMWI1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKQEAgLTU2MCw3ICs1
NjAsNyBAQCBib29sIFJlbmRlcklubGluZTo6aGl0VGVzdEN1bGxlZElubGluZShjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlcwogICAgICAgICB1cGRhdGVIaXRUZXN0UmVz
dWx0KHJlc3VsdCwgdG1wTG9jYXRpb24ucG9pbnQoKSk7CiAgICAgICAgIC8vIFdlIGNhbm5vdCB1
c2UgYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdCB0byBkZXRlcm1pbmUgaWYgd2UgZnVsbHkg
ZW5jbG9zZSB0aGUgaGl0LXRlc3QgYXJlYQogICAgICAgICAvLyBiZWNhdXNlIGl0IGNhbiBvbmx5
IGhhbmRsZSByZWN0YW5ndWxhciB0YXJnZXRzLgotICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlz
dEJhc2VkVGVzdFJlc3VsdChlbGVtZW50KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIp
OworICAgICAgICByZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0
VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyKTsKICAgICAgICAgcmV0dXJuIHJl
Z2lvblJlc3VsdC5jb250YWlucyh0bXBMb2NhdGlvbi5ib3VuZGluZ0JveCgpKTsKICAgICB9CiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMTA0MywyMCArMTA0MywxNyBAQCB2b2lkIFJlbmRlcklubGlu
ZTo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFBvaW50JgogICAgICAgICByZXR1cm47CiAKICAgICBMYXlvdXRQb2ludCBsb2NhbFBvaW50KHBv
aW50KTsKLSAgICBpZiAoRWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkgeworICAg
IGlmIChhdXRvKiBub2RlID0gbm9kZUZvckhpdFRlc3QoKSkgewogICAgICAgICBpZiAoaXNDb250
aW51YXRpb24oKSkgewotICAgICAgICAgICAgLy8gV2UncmUgaW4gdGhlIGNvbnRpbnVhdGlvbiBv
ZiBhIHNwbGl0IGlubGluZS4gIEFkanVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4gdGhlIGNv
b3JkaW5hdGUgc3BhY2UKLSAgICAgICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVuZGVyZXIn
cyBjb250YWluaW5nIGJsb2NrLiAgVGhpcyB3aWxsIGVuZCB1cCBiZWluZyB0aGUgaW5uZXJOb25T
aGFyZWROb2RlLgotICAgICAgICAgICAgUmVuZGVyQmxvY2sqIGZpcnN0QmxvY2sgPSBlbGVtZW50
LT5yZW5kZXJlcigpLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgLy8gR2V0IG91ciBjb250YWluaW5nIGJsb2NrLgotICAgICAgICAgICAgUmVuZGVyQm94KiBi
bG9jayA9IGNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgbG9jYWxQb2ludC5tb3ZlQnko
YmxvY2stPmxvY2F0aW9uKCkgLSBmaXJzdEJsb2NrLT5sb2NhdGlvbk9mZnNldCgpKTsKKyAgICAg
ICAgICAgIC8vIFdlJ3JlIGluIHRoZSBjb250aW51YXRpb24gb2YgYSBzcGxpdCBpbmxpbmUuIEFk
anVzdCBvdXIgbG9jYWwgcG9pbnQgdG8gYmUgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2UKKyAgICAg
ICAgICAgIC8vIG9mIHRoZSBwcmluY2lwYWwgcmVuZGVyZXIncyBjb250YWluaW5nIGJsb2NrLiBU
aGlzIHdpbGwgZW5kIHVwIGJlaW5nIHRoZSBpbm5lck5vblNoYXJlZE5vZGUuCisgICAgICAgICAg
ICBhdXRvKiBmaXJzdEJsb2NrID0gbm9kZS0+cmVuZGVyZXIoKS0+Y29udGFpbmluZ0Jsb2NrKCk7
CisgICAgICAgICAgICBsb2NhbFBvaW50Lm1vdmVCeShjb250YWluaW5nQmxvY2soKS0+bG9jYXRp
b24oKSAtIGZpcnN0QmxvY2stPmxvY2F0aW9uT2Zmc2V0KCkpOwogICAgICAgICB9CiAKLSAgICAg
ICAgcmVzdWx0LnNldElubmVyTm9kZShlbGVtZW50KTsKKyAgICAgICAgcmVzdWx0LnNldElubmVy
Tm9kZShub2RlKTsKICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCi0g
ICAgICAgICAgICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKGVsZW1lbnQpOworICAgICAg
ICAgICAgcmVzdWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKTsKICAgICAgICAgcmVzdWx0
LnNldExvY2FsUG9pbnQobG9jYWxQb2ludCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKaW5kZXggYzgzODRmZDBmNjNh
MGE0MzEzZWU3NjIyN2RiNmNkYmM5YzU4ZWM0MS4uMjUxOTBjODI2NTIwZTkzMWQyMTIwM2Y5ZmEw
ODNiZTU0ZGZlNDNhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TXVsdGlDb2x1bW5TZXQuY3BwCkBAIC05NjQsNiArOTY0LDExIEBAIExheW91dFBvaW50IFJlbmRl
ck11bHRpQ29sdW1uU2V0Ojp0cmFuc2xhdGVGcmFnbWVudFBvaW50VG9GcmFnbWVudGVkRmxvdyhj
b25zdCBMCiAgICAgcmV0dXJuIGxvZ2ljYWxQb2ludDsKIH0KIAorTm9kZSogUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6Om5vZGVGb3JIaXRUZXN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZG9jdW1lbnQo
KS5kb2N1bWVudEVsZW1lbnQoKTsKK30KKwogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6dXBk
YXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludCkKIHsKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpIHx8ICFwYXJlbnQoKS0+aXNS
ZW5kZXJWaWV3KCkpCkBAIC05NzEsOCArOTc2LDcgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNl
dDo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW8K
ICAgICAKICAgICAvLyBOb3RlIHRoaXMgZG9lcyBub3Qgd29yayB3aXRoIGNvbHVtbiBzcGFucywg
YnV0IG9uY2Ugd2UgaW1wbGVtZW50IFJlbmRlclBhZ2VTZXQsIHdlIGNhbiBtb3ZlIHRoaXMgY29k
ZQogICAgIC8vIG92ZXIgdGhlcmUgaW5zdGVhZCAoYW5kIHNwYW5zIG9mIGNvdXJzZSB3b24ndCBi
ZSBhbGxvd2VkIG9uIHBhZ2VzKS4KLSAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQoKS5kb2N1bWVu
dEVsZW1lbnQoKTsKLSAgICBpZiAobm9kZSkgeworICAgIGlmIChhdXRvKiBub2RlID0gbm9kZUZv
ckhpdFRlc3QoKSkgewogICAgICAgICByZXN1bHQuc2V0SW5uZXJOb2RlKG5vZGUpOwogICAgICAg
ICBpZiAoIXJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSkKICAgICAgICAgICAgIHJlc3VsdC5z
ZXRJbm5lck5vblNoYXJlZE5vZGUobm9kZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJNdWx0aUNvbHVtblNldC5oCmluZGV4IDhmYTZjYzAzOWJmNmMxZGVlYWY2ZmNhZjUx
OWEyYjVlMzU2OTJhMGYuLmVmOWMwNWUyOGVkOWYzZTUyYzkyOWVhYWI0ODY5NGRlMGUzMWFlZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5o
CkBAIC0xMzYsNiArMTM2LDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzUmVuZGVyTXVsdGlDb2x1
bW5TZXQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdm9pZCBsYXlvdXQo
KSBvdmVycmlkZTsKIAorICAgIE5vZGUqIG5vZGVGb3JIaXRUZXN0KCkgY29uc3Qgb3ZlcnJpZGU7
CisKICAgICBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMgY29tcHV0ZUxvZ2ljYWxIZWlnaHQo
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApIGNvbnN0IG92
ZXJyaWRlOwogCiAgICAgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQ
b2ludCYpIG92ZXJyaWRlIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAppbmRleCA0MzBmNzMzNjVjYjc2M2E2OGVjZWVjZjQ3ZTQ1NDk1Y2NiYjg4MzM5Li5jMGQy
ZDBjOGE5YjRiNTRjZTVmMzg4OGJlNGM1NzZiZWEzNjNmMjJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMTU2OCwyMSArMTU2OCwyNCBAQCBib29sIFJl
bmRlck9iamVjdDo6aGl0VGVzdChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LAogICAgIHJldHVybiBpbnNpZGU7CiB9CiAKLXZvaWQgUmVuZGVyT2Jq
ZWN0Ojp1cGRhdGVIaXRUZXN0UmVzdWx0KEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgTGF5
b3V0UG9pbnQmIHBvaW50KQorTm9kZSogUmVuZGVyT2JqZWN0Ojpub2RlRm9ySGl0VGVzdCgpIGNv
bnN0CiB7Ci0gICAgaWYgKHJlc3VsdC5pbm5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgTm9kZSogbm9kZSA9IHRoaXMtPm5vZGUoKTsKLQorICAgIGF1dG8qIG5vZGUgPSB0aGlzLT5u
b2RlKCk7CiAgICAgLy8gSWYgd2UgaGl0IHRoZSBhbm9ueW1vdXMgcmVuZGVyZXJzIGluc2lkZSBn
ZW5lcmF0ZWQgY29udGVudCB3ZSBzaG91bGQKICAgICAvLyBhY3R1YWxseSBoaXQgdGhlIGdlbmVy
YXRlZCBjb250ZW50IHNvIHdhbGsgdXAgdG8gdGhlIFBzZXVkb0VsZW1lbnQuCiAgICAgaWYgKCFu
b2RlICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0JlZm9yZU9yQWZ0ZXJDb250ZW50KCkpIHsK
ICAgICAgICAgZm9yIChhdXRvKiByZW5kZXJlciA9IHBhcmVudCgpOyByZW5kZXJlciAmJiAhbm9k
ZTsgcmVuZGVyZXIgPSByZW5kZXJlci0+cGFyZW50KCkpCiAgICAgICAgICAgICBub2RlID0gcmVu
ZGVyZXItPmVsZW1lbnQoKTsKICAgICB9CisgICAgcmV0dXJuIG5vZGU7Cit9CiAKLSAgICBpZiAo
bm9kZSkgewordm9pZCBSZW5kZXJPYmplY3Q6OnVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJl
c3VsdCYgcmVzdWx0LCBjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQpCit7CisgICAgaWYgKHJlc3Vs
dC5pbm5lck5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGF1dG8qIG5vZGUgPSBu
b2RlRm9ySGl0VGVzdCgpKSB7CiAgICAgICAgIHJlc3VsdC5zZXRJbm5lck5vZGUobm9kZSk7CiAg
ICAgICAgIGlmICghcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpKQogICAgICAgICAgICAgcmVz
dWx0LnNldElubmVyTm9uU2hhcmVkTm9kZShub2RlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAppbmRleCAyOGZhMmNhODBlZjVjNzQwNDI2ZjFiMTk4MmVhODAzNTk5NjNh
NDkxLi5lZDVlOGYxNmNiYTY5NDY2N2QwYmM3ZjRiMzQwODc2ZTdjNTFlNjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC01NTcsNyArNTU3LDkgQEAgcHVibGlj
OgogICAgIGJvb2wgaXNDb21wb3NpdGVkKCkgY29uc3Q7CiAKICAgICBib29sIGhpdFRlc3QoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9u
JiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZz
ZXQsIEhpdFRlc3RGaWx0ZXIgPSBIaXRUZXN0QWxsKTsKKyAgICB2aXJ0dWFsIE5vZGUqIG5vZGVG
b3JIaXRUZXN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50Jik7CisKICAgICB2aXJ0dWFsIGJvb2wg
bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
SGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYg
YWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogCiAgICAgdmlydHVhbCBQb3NpdGlv
biBwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmNwcAppbmRleCBmMzExM2FmZjgwNDA1ZTJlNDY1MGY5NjFkMGRh
MTNkZTNhMjA4NWY5Li43OTkxYzllN2UwYzgxZjU3Nzc4NTJhMWNmY2MyMmRhNzMwNjBlMzc0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKQEAgLTE1NDQsNyArMTU0
NCw3IEBAIGJvb2wgUmVuZGVyVGFibGU6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0
JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1CiAgICAgTGF5b3V0UmVjdCBib3VuZHNSZWN0
KGFkanVzdGVkTG9jYXRpb24sIHNpemUoKSk7CiAgICAgaWYgKHZpc2libGVUb0hpdFRlc3Rpbmco
KSAmJiAoYWN0aW9uID09IEhpdFRlc3RCbG9ja0JhY2tncm91bmQgfHwgYWN0aW9uID09IEhpdFRl
c3RDaGlsZEJsb2NrQmFja2dyb3VuZCkgJiYgbG9jYXRpb25JbkNvbnRhaW5lci5pbnRlcnNlY3Rz
KGJvdW5kc1JlY3QpKSB7CiAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBmbGlw
Rm9yV3JpdGluZ01vZGUobG9jYXRpb25JbkNvbnRhaW5lci5wb2ludCgpIC0gdG9MYXlvdXRTaXpl
KGFkanVzdGVkTG9jYXRpb24pKSk7Ci0gICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJh
c2VkVGVzdFJlc3VsdChlbGVtZW50KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJv
dW5kc1JlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgaWYgKHJlc3VsdC5h
ZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxv
Y2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuY3BwCmluZGV4IGQyMWMyNTQ5NzRjNDU0YjdhN2I0OGQ5NzJhNzVmMTFkZGI2
NjExMDMuLmMyNGM4ZGZiNjE4ZjNjYWZjN2QzYWE2ZjdkMTFkNzMxYmQwZWM3MzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKQEAgLTY2Miw2ICs2NjIsMTEgQEAgSW50
U2l6ZSBSZW5kZXJWaWV3Ojp2aWV3cG9ydFNpemVGb3JDU1NWaWV3cG9ydFVuaXRzKCkgY29uc3QK
ICAgICByZXR1cm4gZnJhbWVWaWV3KCkudmlld3BvcnRTaXplRm9yQ1NTVmlld3BvcnRVbml0cygp
OwogfQogCitOb2RlKiBSZW5kZXJWaWV3Ojpub2RlRm9ySGl0VGVzdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7Cit9CisKIHZvaWQgUmVuZGVyVmll
dzo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IExheW91
dFBvaW50JiBwb2ludCkKIHsKICAgICBpZiAocmVzdWx0LmlubmVyTm9kZSgpKQpAQCAtNjcwLDgg
KzY3NSw3IEBAIHZvaWQgUmVuZGVyVmlldzo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaXRUZXN0UmVz
dWx0JiByZXN1bHQsIGNvbnN0IExheW91dFBvaW50JiBwCiAgICAgaWYgKG11bHRpQ29sdW1uRmxv
dygpICYmIG11bHRpQ29sdW1uRmxvdygpLT5maXJzdE11bHRpQ29sdW1uU2V0KCkpCiAgICAgICAg
IHJldHVybiBtdWx0aUNvbHVtbkZsb3coKS0+Zmlyc3RNdWx0aUNvbHVtblNldCgpLT51cGRhdGVI
aXRUZXN0UmVzdWx0KHJlc3VsdCwgcG9pbnQpOwogCi0gICAgTm9kZSogbm9kZSA9IGRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgaWYgKG5vZGUpIHsKKyAgICBpZiAoYXV0byogbm9k
ZSA9IG5vZGVGb3JIaXRUZXN0KCkpIHsKICAgICAgICAgcmVzdWx0LnNldElubmVyTm9kZShub2Rl
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkpCiAgICAgICAgICAg
ICByZXN1bHQuc2V0SW5uZXJOb25TaGFyZWROb2RlKG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJWaWV3LmgKaW5kZXggMGVkNzJjZjEyOWViZTcyNjk5ZmI2NzcwNDE1NzVlNzBlNTFk
NTI5My4uOTE0ZWJiYzdkZDNlODI1YWQ1YWQxNDEwMGY1NjQxZGViYzZiODdiMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yMTEsNiArMjExLDggQEAgcHJpdmF0ZToK
IAogICAgIGJvb2wgaXNTY3JvbGxhYmxlT3JSdWJiZXJiYW5kYWJsZUJveCgpIGNvbnN0IG92ZXJy
aWRlOwogCisgICAgTm9kZSogbm9kZUZvckhpdFRlc3QoKSBjb25zdCBvdmVycmlkZTsKKwogcHJp
dmF0ZToKICAgICBGcmFtZVZpZXcmIG1fZnJhbWVWaWV3OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAKaW5kZXggMzc3
MWI2MzQwYTMwZDdhMGMzZTM0YWU3Njk1YzNiYTgwNzdlZDVhMC4uNzc1MTI4ZGRiYTFiODZjYTJh
MTI0NWZiZjE2Y2E1OTY5OWEwZTgwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcApAQCAtMTcwLDcgKzE3MCw3IEBA
IGJvb2wgaGl0VGVzdEZsb3coY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlv
dXQmIGxheW91dCwgY29uc3QgSGl0VGVzCiAgICAgICAgIGlmICghbG9jYXRpb25JbkNvbnRhaW5l
ci5pbnRlcnNlY3RzKGxpbmVSZWN0KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBy
ZW5kZXJlci51cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5lci5w
b2ludCgpIC0gdG9MYXlvdXRTaXplKGFjY3VtdWxhdGVkT2Zmc2V0KSk7Ci0gICAgICAgIGlmIChy
ZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlci5ub2RlKCksIHJlcXVl
c3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGxpbmVSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0
b3ApCisgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5k
ZXJlci5ub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlvbkluQ29udGFpbmVyLCBsaW5l
UmVjdCkgPT0gSGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAppbmRleCA5OGIzMTVkNjc0NDNlNTZiYTQw
NGMyNTEyZWMxMjVhNDVhNjA4YmRjLi5iMmJmNWRlODhhN2RkNDdlYmM3MTg4MTkyZmQ4ZjBhZmY2
MzBmZTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R0NvbnRhaW5lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCkBAIC0xNzcsNyArMTc3LDcgQEAgYm9vbCBSZW5kZXJTVkdDb250YWlu
ZXI6Om5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRl
c3QKICAgICAvLyBBY2Nlc3NpYmlsaXR5IHdhbnRzIHRvIHJldHVybiBTVkcgY29udGFpbmVycywg
aWYgYXBwcm9wcmlhdGUuCiAgICAgaWYgKHJlcXVlc3QudHlwZSgpICYgSGl0VGVzdFJlcXVlc3Q6
OkFjY2Vzc2liaWxpdHlIaXRUZXN0ICYmIG1fb2JqZWN0Qm91bmRpbmdCb3guY29udGFpbnMobG9j
YWxQb2ludCkpIHsKICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIExheW91dFBv
aW50KGxvY2FsUG9pbnQpKTsKLSAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRU
ZXN0UmVzdWx0KCZlbGVtZW50KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9n
cmVzczo6U3RvcCkKKyAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVz
dWx0KG5vZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQcm9n
cmVzczo6U3RvcCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKaW5kZXggYzQ0
ODQ4NTIwOTJkYmUwZjZkMzBiZjkxMzg3OTcxYjVjYzlmZGMwOS4uMjc4ZWI5YzRkMTk2YTc5Nzk3
NmE2ZTE1MTJjNTIwNWIyMGZhYWZmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKQEAgLTIyOSw3ICsyMjksNyBAQCBib29sIFJlbmRlclNW
R0ltYWdlOjpub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBI
aXRUZXN0UmVzdQogICAgICAgICBpZiAoaGl0UnVsZXMuY2FuSGl0RmlsbCkgewogICAgICAgICAg
ICAgaWYgKG1fb2JqZWN0Qm91bmRpbmdCb3guY29udGFpbnMobG9jYWxQb2ludCkpIHsKICAgICAg
ICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgTGF5b3V0UG9pbnQobG9jYWxQ
b2ludCkpOwotICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVz
dFJlc3VsdCgmaW1hZ2VFbGVtZW50KCksIHJlcXVlc3QsIGxvY2FsUG9pbnQpID09IEhpdFRlc3RQ
cm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmFkZE5vZGVUb0xpc3RC
YXNlZFRlc3RSZXN1bHQobm9kZUZvckhpdFRlc3QoKSwgcmVxdWVzdCwgbG9jYWxQb2ludCkgPT0g
SGl0VGVzdFByb2dyZXNzOjpTdG9wKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUm9vdC5jcHAKaW5kZXggZGYwZWY2ZjZmM2VkOGUzZDQyMTI5OTRhOWUwMzM3
NjQyNTEwY2I1OS4uYTA4YjMyMTUxNThlNDI2NmMwMzc0ODMzMWU2MDVlZWVkNzQxZTViMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSb290LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jvb3QuY3BwCkBAIC00
MjYsNyArNDI2LDcgQEAgYm9vbCBSZW5kZXJTVkdSb290Ojpub2RlQXRQb2ludChjb25zdCBIaXRU
ZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmUKICAgICAgICAgTGF5b3V0UmVj
dCBib3VuZHNSZWN0KGFjY3VtdWxhdGVkT2Zmc2V0ICsgbG9jYXRpb24oKSwgc2l6ZSgpKTsKICAg
ICAgICAgaWYgKGxvY2F0aW9uSW5Db250YWluZXIuaW50ZXJzZWN0cyhib3VuZHNSZWN0KSkgewog
ICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIHBvaW50SW5Cb3JkZXJCb3gp
OwotICAgICAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0UmVzdWx0KCZz
dmdTVkdFbGVtZW50KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIGJvdW5kc1JlY3Qp
ID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9k
ZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2NhdGlv
bkluQ29udGFpbmVyLCBib3VuZHNSZWN0KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1NoYXBlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHU2hhcGUuY3BwCmluZGV4IDg0MzhlZGFhZTMw
Yjk1MDE2MGIzYjFlZWM1Y2QzZmEzMTgyOWI4OTYuLmZhMTlkMTViYjQ1NjQ0ZmMxYmNhOWIxZGY1
MjM4MTcwZjlkOWM5NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHU2hhcGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHU2hhcGUuY3BwCkBAIC0zNzcsNyArMzc3LDcgQEAgYm9vbCBSZW5kZXJTVkdTaGFwZTo6
bm9kZUF0RmxvYXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJl
c3UKICAgICAgICAgICAgIHx8IChoaXRSdWxlcy5jYW5IaXRGaWxsICYmIChzdmdTdHlsZS5oYXNG
aWxsKCkgfHwgIWhpdFJ1bGVzLnJlcXVpcmVGaWxsKSAmJiBmaWxsQ29udGFpbnMobG9jYWxQb2lu
dCwgaGl0UnVsZXMucmVxdWlyZUZpbGwsIGZpbGxSdWxlKSkKICAgICAgICAgICAgIHx8IChoaXRS
dWxlcy5jYW5IaXRCb3VuZGluZ0JveCAmJiBvYmplY3RCb3VuZGluZ0JveCgpLmNvbnRhaW5zKGxv
Y2FsUG9pbnQpKSkgewogICAgICAgICAgICAgdXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIExh
eW91dFBvaW50KGxvY2FsUG9pbnQpKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuYWRkTm9kZVRv
TGlzdEJhc2VkVGVzdFJlc3VsdCgmZ3JhcGhpY3NFbGVtZW50KCksIHJlcXVlc3QsIGxvY2FsUG9p
bnQpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgIGlmIChyZXN1bHQuYWRk
Tm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChub2RlRm9ySGl0VGVzdCgpLCByZXF1ZXN0LCBsb2Nh
bFBvaW50KSA9PSBIaXRUZXN0UHJvZ3Jlc3M6OlN0b3ApCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAppbmRleCBmY2VkYjNiYTQ1ZDI3NWE0NTMyZTQ0MTE5
Mjg4N2EwYjUyZmYwYzA1Li4zZDMyNTVmOGY3YjRlNGI0MThmMGI0ZGYyNjk3Y2RkZWYzZTNkYzIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5jcHAKQEAgLTY2OCw3ICs2NjgsNyBAQCBib29sIFNWR0lubGluZVRleHRCb3g6Om5vZGVBdFBv
aW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JgogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50UXVhZC5jb250
YWluc1BvaW50KGxvY2F0aW9uSW5Db250YWluZXIucG9pbnQoKSkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJlbmRlcmVyKCkudXBkYXRlSGl0VGVzdFJlc3VsdChyZXN1bHQsIGxvY2F0aW9u
SW5Db250YWluZXIucG9pbnQoKSAtIHRvTGF5b3V0U2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5hZGROb2RlVG9MaXN0QmFzZWRUZXN0
UmVzdWx0KCZyZW5kZXJlcigpLnRleHROb2RlKCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWlu
ZXIsIHJlY3QpID09IEhpdFRlc3RQcm9ncmVzczo6U3RvcCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChyZXN1bHQuYWRkTm9kZVRvTGlzdEJhc2VkVGVzdFJlc3VsdChyZW5kZXJlcigpLm5v
ZGVGb3JIaXRUZXN0KCksIHJlcXVlc3QsIGxvY2F0aW9uSW5Db250YWluZXIsIHJlY3QpID09IEhp
dFRlc3RQcm9ncmVzczo6U3RvcCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA1
NzE0MWNlZWJkMzEyMjE2NGVkZGU3NjllOTNhYjdlNzY5YTNiNmQ1Li4wM2RhNjE1MzdiOGNkZGQ3
OWIwMjcxNDY4N2QwMzVkMGYyZmQwNDkxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDMt
MTQgIERhbmllbCBCYXRlcyAgPGRhYmF0ZXNAYXBwbGUuY29tPgorCisgICAgICAgIEFTU0VSVElP
TiBGQUlMVVJFOiAhcmVzdWx0LmlubmVyTm9kZSgpIHx8IChyZXF1ZXN0LnJlc3VsdElzRWxlbWVu
dExpc3QoKSAmJiByZXN1bHQubGlzdEJhc2VkVGVzdFJlc3VsdCgpLnNpemUoKSkgaW4gUmVuZGVy
TGF5ZXI6OmhpdFRlc3RDb250ZW50cygpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMDkxMTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgdGVzdCBmb3IgYW4gcHNldWRvIGVsZW1lbnQuCisK
KyAgICAgICAgQWxzbyB1cGRhdGUgdGVzdHMgbm93IHRoYXQgSSBhZGRlZCB0aGUgUmVuZGVyVmll
dzo6bm9kZUZvckhpdFRlc3QoKSwgd2hpY2ggcmV0dXJucyB0aGUKKyAgICAgICAgc2FtZSBoaXQg
dGVzdCBub2RlICh0aGUgZG9jdW1lbnQgZWxlbWVudCkgYXMgdXNlZCBpbiBSZW5kZXJWaWV3Ojp1
cGRhdGVIaXRUZXN0UmVzdWx0KCkuCisgICAgICAgIEN1cnJlbnRseSBSZW5kZXJWaWV3Ojpub2Rl
Rm9ySGl0VGVzdCgpIHdvdWxkIGFjdHVhbGx5IGZhbGwgYmFjayB0byBSZW5kZXJCbG9jazo6bm9k
ZUZvckhpdFRlc3QoKSwKKyAgICAgICAgd2hpY2ggcmV0dXJuZWQgdGhlIGRvY3VtZW50IChzZWVu
IGluIHRoZSB0ZXN0IHJlc3V0bHMgYXMgI2RvY3VtZW50KS4KKworICAgICAgICAqIGZhc3QvZG9t
L25vZGVzRnJvbVJlY3Qvbm9kZXNGcm9tUmVjdC1jaGlsZC1mcmFtZS1jb250ZW50Lmh0bWw6IFVw
ZGF0ZSB0ZXN0IHRvIG1hdGNoIG5ldyByZXN1bHRzLgorICAgICAgICAqIGZhc3QvZG9tL25vZGVz
RnJvbVJlY3Qvbm9kZXNGcm9tUmVjdC1lbWJlZGRlZC1mcmFtZS1jb250ZW50Lmh0bWw6IERpdHRv
LgorICAgICAgICAqIGZhc3QvZG9tL25vZGVzRnJvbVJlY3QvcHNldWRvLWVtcHR5LXN2Zy1pbWFn
ZS1jcmFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvZG9tL25vZGVzRnJv
bVJlY3QvcHNldWRvLWVtcHR5LXN2Zy1pbWFnZS1jcmFzaC5odG1sOiBBZGRlZC4KKwogMjAyMC0w
My0xMyAgSmFjb2IgVXBob2ZmICA8amFjb2JfdXBob2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBb
IG1hY09TIF0gd2ViZ3B1L3dobHNsL3VpbnQtYml0d2lzZS5odG1sIGlzIGZsYWt5IGNyYXNoaW5n
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvdzNjL0NoYW5nZUxvZwppbmRleCA3MjczYWZjNjhhZjUwNDEyMjU4ODUw
NTRhM2IxM2IzY2EyZDQ1YjMzLi45YjE2ZDlhYmM0OGE5ZTAzM2FiMzhiMzljMDJhNDg0NDVlMjRl
OGU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC93M2MvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL2ltcG9ydGVkL3czYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAy
MC0wMy0xNCAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CisKKyAgICAgICAgQVNT
RVJUSU9OIEZBSUxVUkU6ICFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgKHJlcXVlc3QucmVzdWx0SXNF
bGVtZW50TGlzdCgpICYmIHJlc3VsdC5saXN0QmFzZWRUZXN0UmVzdWx0KCkuc2l6ZSgpKSBpbiBS
ZW5kZXJMYXllcjo6aGl0VGVzdENvbnRlbnRzKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTExMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSB0ZXN0IHJlc3VsdCBub3cgdGhhdCBtb3JlIHN1
Yi10ZXN0cyBhcmUgcGFzc2luZy4KKworICAgICAgICAqIHdlYi1wbGF0Zm9ybS10ZXN0cy9zaGFk
b3ctZG9tL0RvY3VtZW50T3JTaGFkb3dSb290LXByb3RvdHlwZS1lbGVtZW50RnJvbVBvaW50LWV4
cGVjdGVkLnR4dDoKKwogMjAyMC0wMy0xMiAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIFsgTWFjIF0gZmFzdC9oaXN0b3J5L3BhZ2UtY2FjaGUtd2ViZGF0YWJhc2Ut
cGVuZGluZy10cmFuc2FjdGlvbi5odG1sIGlzIHRpbWluZyBvdXQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3Qvbm9kZXNGcm9tUmVjdC1jaGlsZC1mcmFtZS1j
b250ZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L25vZGVzRnJv
bVJlY3QtY2hpbGQtZnJhbWUtY29udGVudC5odG1sCmluZGV4IDkwMzgxOGQwMzMzN2Y3NDVhMmZh
YTJhY2U0OWU3Y2Y0MzY0NTViZjIuLjA5ODU3NmMwMTNjYTAyNjg1MWJiOGVjZDRmYzRjNTc2NDcx
MTBhMGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3Qvbm9k
ZXNGcm9tUmVjdC1jaGlsZC1mcmFtZS1jb250ZW50Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vbm9kZXNGcm9tUmVjdC9ub2Rlc0Zyb21SZWN0LWNoaWxkLWZyYW1lLWNvbnRlbnQuaHRt
bApAQCAtNTYsMTUgKzU2LDE1IEBACiAgICAgICAgICAgICBjaGVja1JlY3QoMjIwLCAyMCwgNzAs
IDcwLCAiRElWI2xlZnQiKTsKICAgICAgICAgICAgIGNoZWNrUmVjdCgyNTAsIDIwLCAxMDAsIDcw
LCAiRElWI3JpZ2h0LCBESVYjbGVmdCwgSFRNTCIpOwogCi0gICAgICAgICAgICBjaGVja1JlY3Qo
MTUwLCA1MCwgMTAwLCAxMDAsICJESVYjbGVmdCwgSFRNTCwgI2RvY3VtZW50LCBJRlJBTUUjaWZy
YW1lMSwgRElWI2xheWVyLCBESVYjZGl2MiwgRElWI2RpdjEsIERJViNzYW5kYm94Iik7CisgICAg
ICAgICAgICBjaGVja1JlY3QoMTUwLCA1MCwgMTAwLCAxMDAsICJESVYjbGVmdCwgSFRNTCwgSUZS
QU1FI2lmcmFtZTEsIERJViNsYXllciwgRElWI2RpdjIsIERJViNkaXYxLCBESVYjc2FuZGJveCIp
OwogCiAgICAgICAgICAgICBlLmxheWVyLnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAncm90YXRlMTgw
Jyk7CiAgICAgICAgICAgICBjaGVja1JlY3QoMjIwLCAyMCwgNzAsIDcwLCAiRElWI3JpZ2h0Iik7
Ci0gICAgICAgICAgICBjaGVja1JlY3QoMTUwLCA1MCwgMTAwLCAxMDAsICJESVYjcmlnaHQsIEhU
TUwsICNkb2N1bWVudCwgSUZSQU1FI2lmcmFtZTEsIERJViNsYXllciwgRElWI2RpdjIsIERJViNk
aXYxLCBESVYjc2FuZGJveCIpOworICAgICAgICAgICAgY2hlY2tSZWN0KDE1MCwgNTAsIDEwMCwg
MTAwLCAiRElWI3JpZ2h0LCBIVE1MLCBJRlJBTUUjaWZyYW1lMSwgRElWI2xheWVyLCBESVYjZGl2
MiwgRElWI2RpdjEsIERJViNzYW5kYm94Iik7CiAKICAgICAgICAgICAgIGUubGF5ZXIuc2V0QXR0
cmlidXRlKCdjbGFzcycsICdyb3RhdGU5MCcpOwogICAgICAgICAgICAgY2hlY2tSZWN0KDI1MCwg
MjAsIDEwMCwgNzAsICJESVYjbGVmdCIpOwotICAgICAgICAgICAgY2hlY2tSZWN0KDE1MCwgMjAs
IDIwMCwgNjAsICJESVYjbGVmdCwgSFRNTCwgI2RvY3VtZW50LCBJRlJBTUUjaWZyYW1lMSwgRElW
I2xheWVyLCBESVYjZGl2MSwgRElWI3NhbmRib3giKTsKKyAgICAgICAgICAgIGNoZWNrUmVjdCgx
NTAsIDIwLCAyMDAsIDYwLCAiRElWI2xlZnQsIEhUTUwsIElGUkFNRSNpZnJhbWUxLCBESVYjbGF5
ZXIsIERJViNkaXYxLCBESVYjc2FuZGJveCIpOwogCiAgICAgICAgICAgICBlLnNhbmRib3guZGlz
cGxheSA9ICdub25lJzsKICAgICAgICAgICAgIGZpbmlzaEpTVGVzdCgpOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC9ub2Rlc0Zyb21SZWN0LWVtYmVkZGVk
LWZyYW1lLWNvbnRlbnQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL25vZGVzRnJvbVJlY3Qv
bm9kZXNGcm9tUmVjdC1lbWJlZGRlZC1mcmFtZS1jb250ZW50Lmh0bWwKaW5kZXggYjIyYTM4OTg2
NGM0YWNlYzViMTM0YWZkOWQxNzE4M2FjYzViN2I2NC4uMGI3ZmY2NGI5ZmQ4Yzc5MWU5MjFkN2Vl
Y2ZmZTNlNzA1Y2M4M2UyNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC9ub2Rlc0Zyb21SZWN0LWVtYmVkZGVkLWZyYW1lLWNvbnRlbnQuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L25vZGVzRnJvbVJlY3QtZW1iZWRkZWQt
ZnJhbWUtY29udGVudC5odG1sCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgICAgICBjaGVja1Jl
Y3QoMjUsIDI1LCAxMDAsIDEwMCwgIkRJViNyaWdodCwgRElWI2xlZnQsIEhUTUwiKTsKICAgICAg
ICAgICAgIGNoZWNrUmVjdCgyNTAsIDIwLCAxMDAsIDcwLCAiRElWI3JpZ2h0LCBESVYjbGVmdCwg
SFRNTCIpOwogCi0gICAgICAgICAgICBjaGVja1JlY3QoMTUwLCA1MCwgMTAwLCAxMDAsICJESVYj
cmlnaHQsIEhUTUwsICNkb2N1bWVudCwgT0JKRUNUI2NoaWxkZnJhbWUyLCBESVYjbGVmdCwgSFRN
TCwgI2RvY3VtZW50LCBFTUJFRCNjaGlsZGZyYW1lMSwgRElWI3NhbmRib3giKTsKKyAgICAgICAg
ICAgIGNoZWNrUmVjdCgxNTAsIDUwLCAxMDAsIDEwMCwgIkRJViNyaWdodCwgSFRNTCwgT0JKRUNU
I2NoaWxkZnJhbWUyLCBESVYjbGVmdCwgSFRNTCwgRU1CRUQjY2hpbGRmcmFtZTEsIERJViNzYW5k
Ym94Iik7CiAKIAogICAgICAgICAgICAgZS5zYW5kYm94LmRpc3BsYXkgPSAnbm9uZSc7CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L3BzZXVkby1lbXB0eS1z
dmctaW1hZ2UtY3Jhc2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNG
cm9tUmVjdC9wc2V1ZG8tZW1wdHktc3ZnLWltYWdlLWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jOWFmYTgxMzM2Y2U4Njc4ZTQzNzMxZjUxZGEzMmQ1ZTMwYWY3OWRmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC9wc2V1ZG8tZW1wdHkt
c3ZnLWltYWdlLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK0FMRVJUOiBQQVNT
OiBUaGlzIHRlc3QgZGlkIG5vdCB0cmlnZ2VyIGFuIEFTU0VSVC4KKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vbm9kZXNGcm9tUmVjdC9wc2V1ZG8tZW1wdHktc3ZnLWltYWdlLWNy
YXNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9ub2Rlc0Zyb21SZWN0L3BzZXVkby1lbXB0
eS1zdmctaW1hZ2UtY3Jhc2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zYmVjYjQ2YzQ3ZWUwM2IyZGJiMGY4
MGI4ZTQwOGQ4YzJiYjZjMDI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vbm9kZXNGcm9tUmVjdC9wc2V1ZG8tZW1wdHktc3ZnLWltYWdlLWNyYXNoLmh0bWwKQEAgLTAs
MCArMSw2NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHN0eWxlIGlkPSJ0
ZXN0LXN0eWxlcyI+CisuaWNvbiB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworfQorLmljb246
OmJlZm9yZSB7CisgICAgY29udGVudDogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsPHN2ZyB4bWxu
czp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeG1sbnM9Imh0dHA6Ly93d3cu
dzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGhlaWdodD0iNzI3cHgiPjwvc3ZnPicpOwor
fQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBjbGFzcz0iaWNvbiI+PC9kaXY+Cis8
c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNU
ZXh0KCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIG5v
ZGVzSW5SZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpCit7CisgICAgaWYgKCF3aW5kb3cuaW50ZXJu
YWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBsZXQgbGVmdFBhZGRpbmcgPSBNYXRoLmZsb29y
KHdpZHRoIC8gMik7CisgICAgbGV0IHRvcFBhZGRpbmcgPSBNYXRoLmZsb29yKGhlaWdodCAvIDIp
OworICAgIGxldCBjZW50ZXJYID0gTWF0aC5mbG9vcih4ICsgbGVmdFBhZGRpbmcpOworICAgIGxl
dCBjZW50ZXJZID0gTWF0aC5mbG9vcih5ICsgdG9wUGFkZGluZyk7CisgICAgLy8gRklYTUU6IFdo
ZW4gbm9kZXNGcm9tUmVjdCBpcyBjaGFuZ2VkIHRvIG5vdCBhZGQgMSB0byB3aWR0aCBhbmQgaGVp
Z2h0LCByZW1vdmUgdGhlIGNvcnJlY3Rpb24gaGVyZS4KKyAgICBsZXQgYm90dG9tUGFkZGluZyA9
IE1hdGguZmxvb3IoKGhlaWdodCAtIDEpIC0gdG9wUGFkZGluZyk7CisgICAgbGV0IHJpZ2h0UGFk
ZGluZyA9IE1hdGguZmxvb3IoKHdpZHRoIC0gMSkgLSBsZWZ0UGFkZGluZyk7CisKKyAgICBjb25z
dCBpZ25vcmVDbGlwcGluZyA9IGZhbHNlOworICAgIGNvbnN0IGFsbG93VXNlckFnZW50U2hhZG93
Q29udGVudCA9IGZhbHNlOworICAgIGNvbnN0IGFsbG93Q2hpbGRGcmFtZUNvbnRlbnQgPSBmYWxz
ZTsKKyAgICByZXR1cm4gaW50ZXJuYWxzLm5vZGVzRnJvbVJlY3QoZG9jdW1lbnQsIGNlbnRlclgs
IGNlbnRlclksIHRvcFBhZGRpbmcsIHJpZ2h0UGFkZGluZywgYm90dG9tUGFkZGluZywgbGVmdFBh
ZGRpbmcsIGlnbm9yZUNsaXBwaW5nLCBhbGxvd1VzZXJBZ2VudFNoYWRvd0NvbnRlbnQsIGFsbG93
Q2hpbGRGcmFtZUNvbnRlbnQpOworfQorCitmdW5jdGlvbiBydW5UZXN0KCkKK3sKKyAgICBpZiAo
IXdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgYWxlcnQoIlRoaXMgdGVzdCByZXF1aXJlcyB3
aW5kb3cuaW50ZXJuYWxzIik7CisgICAgICAgIHJldHVybiA7CisgICAgfQorCisgICAgZnVuY3Rp
b24gaGFuZGxlU3R5bGVzaGVldExvYWRlZCgpIHsKKyAgICAgICAgZnVuY3Rpb24gYWN0dWFsUnVu
VGVzdCgpIHsKKyAgICAgICAgICAgIG5vZGVzSW5SZWN0KDAsIDAsIDEwNjEsIDU1Mik7CisKKyAg
ICAgICAgICAgIGFsZXJ0KCJQQVNTOiBUaGlzIHRlc3QgZGlkIG5vdCB0cmlnZ2VyIGFuIEFTU0VS
VC4iKTsKKyAgICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAg
ICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBOZWVkIHRv
IHVzZSBhIHplcm8tdGltZXIgYXMgdGhlIDo6YmVmb3JlIGNvbnRlbnQgbWF5IG5vdCBoYXZlIGxv
YWRlZCwgeWV0LgorICAgICAgICB3aW5kb3cuc2V0VGltZW91dChhY3R1YWxSdW5UZXN0LCAwKTsK
KyAgICB9CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3Qtc3R5bGVzIikuYWRkRXZl
bnRMaXN0ZW5lcigibG9hZCIsIGhhbmRsZVN0eWxlc2hlZXRMb2FkZWQsIGZhbHNlKTsKK30KKwor
cnVuVGVzdCgpOworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3NoYWRvdy1kb20vRG9jdW1l
bnRPclNoYWRvd1Jvb3QtcHJvdG90eXBlLWVsZW1lbnRGcm9tUG9pbnQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9zaGFkb3ctZG9tL0Rv
Y3VtZW50T3JTaGFkb3dSb290LXByb3RvdHlwZS1lbGVtZW50RnJvbVBvaW50LWV4cGVjdGVkLnR4
dAppbmRleCA5NjUzMzgzMjI2Y2ZiYjY3M2NiZWIxZmY2MmUyZTc4NDQxNWQ4ZmQzLi5jNTExNTNj
YzEwNWM4NWExZjUyNGNkNDIwNjk5ZTlmMzhlNTdmZTE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3NoYWRvdy1kb20vRG9jdW1lbnRPclNo
YWRvd1Jvb3QtcHJvdG90eXBlLWVsZW1lbnRGcm9tUG9pbnQtZXhwZWN0ZWQudHh0CisrKyBiL0xh
eW91dFRlc3RzL2ltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvc2hhZG93LWRvbS9Eb2N1
bWVudE9yU2hhZG93Um9vdC1wcm90b3R5cGUtZWxlbWVudEZyb21Qb2ludC1leHBlY3RlZC50eHQK
QEAgLTM5LDYgKzM5LDYgQEAgUEFTUyBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCBtdXN0IHJl
dHVybiB0aGUgc2hhZG93IGhvc3QgYW5kIGl0cyBhbmNlc3RvcnMgb2YKIFBBU1MgZG9jdW1lbnQu
ZWxlbWVudHNGcm9tUG9pbnQgbXVzdCByZXR1cm4gdGhlIHNoYWRvdyBob3N0IGFuZCBpdHMgYW5j
ZXN0b3JzIGFuZCBzaGFkb3dSb290LmVsZW1lbnRzRnJvbVBvaW50IG11c3QgcmV0dXJuIHRoZSBz
bG90IHBhcmVudCBvZiB0aGUgZmFsbGJhY2sgdGV4dCBhbmQgaXRzIG5vbi1zaGFkb3cgYW5jZXN0
b3JzIHdoZW4gdGhlIGhpdC10ZXN0ZWQgdGV4dCBub2RlIGlzIGEgZmFsbGJhY2sgY29udGVudCBh
bmQgdGhlIGhvc3QgaGFzIGRpc3BsYXk6IGlubGluZSAKIFBBU1MgZG9jdW1lbnQuZWxlbWVudHNG
cm9tUG9pbnQgbXVzdCByZXR1cm4gdGhlIHNoYWRvdyBob3N0IGFuZCBpdHMgYW5jZXN0b3JzIGFu
ZCBzaGFkb3dSb290LmVsZW1lbnRzRnJvbVBvaW50IG11c3QgcmV0dXJuIHRoZSBzbG90IHBhcmVu
dCBvZiB0aGUgZmFsbGJhY2sgdGV4dCBhbmQgaXRzIG5vbi1zaGFkb3cgYW5jZXN0b3JzIHdoZW4g
dGhlIGhpdC10ZXN0ZWQgdGV4dCBub2RlIGlzIGEgZmFsbGJhY2sgY29udGVudCBhbmQgdGhlIGhv
c3QgaGFzIGRpc3BsYXk6IGJsb2NrIAogUEFTUyBkb2N1bWVudC5lbGVtZW50c0Zyb21Qb2ludCBt
dXN0IHJldHVybiB0aGUgc2hhZG93IGhvc3QgYW5kIGl0cyBhbmNlc3RvcnMgYW5kIHNoYWRvd1Jv
b3QuZWxlbWVudHNGcm9tUG9pbnQgbXVzdCByZXR1cm4gdGhlIHNsb3QgcGFyZW50IG9mIHRoZSBm
YWxsYmFjayB0ZXh0IGFuZCBpdHMgbm9uLXNoYWRvdyBhbmNlc3RvcnMgd2hlbiB0aGUgaGl0LXRl
c3RlZCB0ZXh0IG5vZGUgaXMgYSBmYWxsYmFjayBjb250ZW50IGFuZCB0aGUgaG9zdCBoYXMgZGlz
cGxheTogaW5saW5lLWJsb2NrIAotRkFJTCBzaGFkb3dSb290LmVsZW1lbnRzRnJvbVBvaW50IG11
c3QgYmVoYXZlIHRoZSBzYW1lIHdpdGggZG9jdW1lbnQuZWxlbWVudHNGcm9tUG9pbnQgcmVnYXJk
aW5nIEhUTUwgZWxlbWVudCBhc3NlcnRfYXJyYXlfZXF1YWxzOiBsZW5ndGhzIGRpZmZlciwgZXhw
ZWN0ZWQgNSBnb3QgNAotRkFJTCBlbGVtZW50c0Zyb21Qb2ludCBzaG91bGQgcmV0dXJuIGFsbCBl
bGVtZW50cyB1bmRlciBhIHBvaW50LCBldmVuIHdoZW4gY29udGV4dCBvYmplY3QgaXMgbm90IGNv
bm5lY3RlZCBhc3NlcnRfZXF1YWxzOiBleHBlY3RlZCA0IGJ1dCBnb3QgMworUEFTUyBzaGFkb3dS
b290LmVsZW1lbnRzRnJvbVBvaW50IG11c3QgYmVoYXZlIHRoZSBzYW1lIHdpdGggZG9jdW1lbnQu
ZWxlbWVudHNGcm9tUG9pbnQgcmVnYXJkaW5nIEhUTUwgZWxlbWVudCAKK1BBU1MgZWxlbWVudHNG
cm9tUG9pbnQgc2hvdWxkIHJldHVybiBhbGwgZWxlbWVudHMgdW5kZXIgYSBwb2ludCwgZXZlbiB3
aGVuIGNvbnRleHQgb2JqZWN0IGlzIG5vdCBjb25uZWN0ZWQgCiAK
</data>
<flag name="review"
          id="409001"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>