<?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>122403</bug_id>
          
          <creation_ts>2013-10-05 21:16:47 -0700</creation_ts>
          <short_desc>CTTE: Thread references through markup.h</short_desc>
          <delta_ts>2013-10-06 12:20:31 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>philn</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936707</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-05 21:16:47 -0700</bug_when>
    <thetext>CTTE: Thread references through markup.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936709</commentid>
    <comment_count>1</comment_count>
      <attachid>213491</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-05 21:19:21 -0700</bug_when>
    <thetext>Created attachment 213491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936712</commentid>
    <comment_count>2</comment_count>
      <attachid>213491</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-05 21:27:24 -0700</bug_when>
    <thetext>Comment on attachment 213491
Patch

Attachment 213491 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/3469037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936713</commentid>
    <comment_count>3</comment_count>
      <attachid>213492</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-05 21:36:00 -0700</bug_when>
    <thetext>Created attachment 213492
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936714</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-05 21:36:18 -0700</bug_when>
    <thetext>&gt; Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp:595
&gt;      RefPtr&lt;Range&gt; selectionRange = frame-&gt;selection().toNormalizedRange();
&gt; +    if (!selectionRange)
&gt; +        return nullptr;

Looks like we would previously continue on if this failed, creating doctype-only markup below.

&gt; Source/WebCore/page/PageSerializer.cpp:110
&gt; +    virtual void appendText(StringBuilder&amp;, const Text&amp;) OVERRIDE;
&gt; +    virtual void appendElement(StringBuilder&amp;, const Element&amp;, Namespaces*) OVERRIDE;
&gt; +    virtual void appendCustomAttributes(StringBuilder&amp;, const Element&amp;, Namespaces*) OVERRIDE;
&gt; +    virtual void appendEndTag(const Node&amp;) OVERRIDE;

Anders says we can do override without SHOUTING now!

&gt; Source/WebKit/mac/WebView/WebFrame.mm:754
&gt; +    size_t size = nodesVector.size();
&gt; +    for (size_t i = 0; i &lt; size; ++i) {

I&apos;d put the size in the for scope together with i.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936716</commentid>
    <comment_count>5</comment_count>
      <attachid>213492</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-05 21:44:18 -0700</bug_when>
    <thetext>Comment on attachment 213492
Patch

Attachment 213492 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/3486002</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936717</commentid>
    <comment_count>6</comment_count>
      <attachid>213492</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-10-05 21:46:53 -0700</bug_when>
    <thetext>Comment on attachment 213492
Patch

Attachment 213492 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/3483006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936718</commentid>
    <comment_count>7</comment_count>
      <attachid>213493</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-05 21:51:01 -0700</bug_when>
    <thetext>Created attachment 213493
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936719</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-05 21:52:19 -0700</bug_when>
    <thetext>Attachment 213493 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/objc/DOMHTML.mm&apos;, u&apos;Source/WebCore/dom/CDATASection.h&apos;, u&apos;Source/WebCore/dom/Comment.h&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/Document.h&apos;, u&apos;Source/WebCore/dom/DocumentType.h&apos;, u&apos;Source/WebCore/dom/ProcessingInstruction.h&apos;, u&apos;Source/WebCore/dom/Range.cpp&apos;, u&apos;Source/WebCore/dom/ShadowRoot.cpp&apos;, u&apos;Source/WebCore/dom/Text.h&apos;, u&apos;Source/WebCore/editing/CompositeEditCommand.cpp&apos;, u&apos;Source/WebCore/editing/EditorCommand.cpp&apos;, u&apos;Source/WebCore/editing/MarkupAccumulator.cpp&apos;, u&apos;Source/WebCore/editing/MarkupAccumulator.h&apos;, u&apos;Source/WebCore/editing/ios/EditorIOS.mm&apos;, u&apos;Source/WebCore/editing/mac/EditorMac.mm&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/editing/markup.h&apos;, u&apos;Source/WebCore/html/HTMLElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFrameOwnerElement.h&apos;, u&apos;Source/WebCore/html/HTMLTemplateElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTemplateElement.h&apos;, u&apos;Source/WebCore/inspector/DOMEditor.cpp&apos;, u&apos;Source/WebCore/inspector/DOMEditor.h&apos;, u&apos;Source/WebCore/inspector/DOMPatchSupport.cpp&apos;, u&apos;Source/WebCore/inspector/DOMPatchSupport.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp&apos;, u&apos;Source/WebCore/page/ContextMenuController.cpp&apos;, u&apos;Source/WebCore/page/PageSerializer.cpp&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLSerializer.cpp&apos;, u&apos;Source/WebCore/xml/XSLTProcessor.cpp&apos;, u&apos;Source/WebCore/xml/XSLTProcessor.h&apos;, u&apos;Source/WebCore/xml/XSLTProcessorLibxslt.cpp&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/DOM/WebDOMOperations.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebFrame.mm&apos;]&quot; exit_code: 1
Source/WebCore/editing/markup.cpp:132:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/editing/markup.cpp:147:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 41 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936720</commentid>
    <comment_count>9</comment_count>
      <attachid>213493</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-05 21:52:49 -0700</bug_when>
    <thetext>Comment on attachment 213493
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936725</commentid>
    <comment_count>10</comment_count>
      <attachid>213495</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-05 22:33:57 -0700</bug_when>
    <thetext>Created attachment 213495
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936727</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-05 22:36:32 -0700</bug_when>
    <thetext>Attachment 213495 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/objc/DOMHTML.mm&apos;, u&apos;Source/WebCore/dom/CDATASection.h&apos;, u&apos;Source/WebCore/dom/Comment.h&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/Document.h&apos;, u&apos;Source/WebCore/dom/DocumentType.h&apos;, u&apos;Source/WebCore/dom/ProcessingInstruction.h&apos;, u&apos;Source/WebCore/dom/Range.cpp&apos;, u&apos;Source/WebCore/dom/ShadowRoot.cpp&apos;, u&apos;Source/WebCore/dom/Text.h&apos;, u&apos;Source/WebCore/editing/CompositeEditCommand.cpp&apos;, u&apos;Source/WebCore/editing/EditorCommand.cpp&apos;, u&apos;Source/WebCore/editing/MarkupAccumulator.cpp&apos;, u&apos;Source/WebCore/editing/MarkupAccumulator.h&apos;, u&apos;Source/WebCore/editing/ios/EditorIOS.mm&apos;, u&apos;Source/WebCore/editing/mac/EditorMac.mm&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/editing/markup.h&apos;, u&apos;Source/WebCore/html/HTMLElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFrameOwnerElement.h&apos;, u&apos;Source/WebCore/html/HTMLTemplateElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTemplateElement.h&apos;, u&apos;Source/WebCore/inspector/DOMEditor.cpp&apos;, u&apos;Source/WebCore/inspector/DOMEditor.h&apos;, u&apos;Source/WebCore/inspector/DOMPatchSupport.cpp&apos;, u&apos;Source/WebCore/inspector/DOMPatchSupport.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp&apos;, u&apos;Source/WebCore/page/ContextMenuController.cpp&apos;, u&apos;Source/WebCore/page/PageSerializer.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLSerializer.cpp&apos;, u&apos;Source/WebCore/xml/XSLTProcessor.cpp&apos;, u&apos;Source/WebCore/xml/XSLTProcessor.h&apos;, u&apos;Source/WebCore/xml/XSLTProcessorLibxslt.cpp&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/DOM/WebDOMOperations.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebFrame.mm&apos;]&quot; exit_code: 1
Source/WebCore/editing/markup.cpp:132:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/editing/markup.cpp:147:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 42 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936737</commentid>
    <comment_count>12</comment_count>
      <attachid>213502</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-06 00:35:48 -0700</bug_when>
    <thetext>Created attachment 213502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936738</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-10-06 00:37:16 -0700</bug_when>
    <thetext>Attachment 213502 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/WebCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/WebCore/bindings/objc/DOMHTML.mm&apos;, u&apos;Source/WebCore/dom/CDATASection.h&apos;, u&apos;Source/WebCore/dom/Comment.h&apos;, u&apos;Source/WebCore/dom/Document.cpp&apos;, u&apos;Source/WebCore/dom/Document.h&apos;, u&apos;Source/WebCore/dom/DocumentType.h&apos;, u&apos;Source/WebCore/dom/ProcessingInstruction.h&apos;, u&apos;Source/WebCore/dom/Range.cpp&apos;, u&apos;Source/WebCore/dom/ShadowRoot.cpp&apos;, u&apos;Source/WebCore/dom/Text.h&apos;, u&apos;Source/WebCore/editing/CompositeEditCommand.cpp&apos;, u&apos;Source/WebCore/editing/EditorCommand.cpp&apos;, u&apos;Source/WebCore/editing/MarkupAccumulator.cpp&apos;, u&apos;Source/WebCore/editing/MarkupAccumulator.h&apos;, u&apos;Source/WebCore/editing/ios/EditorIOS.mm&apos;, u&apos;Source/WebCore/editing/mac/EditorMac.mm&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/editing/markup.h&apos;, u&apos;Source/WebCore/html/HTMLElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLFrameOwnerElement.h&apos;, u&apos;Source/WebCore/html/HTMLTemplateElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLTemplateElement.h&apos;, u&apos;Source/WebCore/inspector/DOMEditor.cpp&apos;, u&apos;Source/WebCore/inspector/DOMEditor.h&apos;, u&apos;Source/WebCore/inspector/DOMPatchSupport.cpp&apos;, u&apos;Source/WebCore/inspector/DOMPatchSupport.h&apos;, u&apos;Source/WebCore/inspector/InspectorDOMAgent.cpp&apos;, u&apos;Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp&apos;, u&apos;Source/WebCore/page/ContextMenuController.cpp&apos;, u&apos;Source/WebCore/page/PageSerializer.cpp&apos;, u&apos;Source/WebCore/platform/gtk/DataObjectGtk.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/ios/PasteboardIOS.mm&apos;, u&apos;Source/WebCore/xml/XMLHttpRequest.cpp&apos;, u&apos;Source/WebCore/xml/XMLSerializer.cpp&apos;, u&apos;Source/WebCore/xml/XSLTProcessor.cpp&apos;, u&apos;Source/WebCore/xml/XSLTProcessor.h&apos;, u&apos;Source/WebCore/xml/XSLTProcessorLibxslt.cpp&apos;, u&apos;Source/WebKit/mac/ChangeLog&apos;, u&apos;Source/WebKit/mac/DOM/WebDOMOperations.mm&apos;, u&apos;Source/WebKit/mac/WebView/WebFrame.mm&apos;]&quot; exit_code: 1
Source/WebCore/editing/markup.cpp:132:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/editing/markup.cpp:147:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 2 in 43 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936744</commentid>
    <comment_count>14</comment_count>
      <attachid>213502</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-10-06 01:30:18 -0700</bug_when>
    <thetext>Comment on attachment 213502
Patch

Attachment 213502 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/3515021</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936776</commentid>
    <comment_count>15</comment_count>
      <attachid>213502</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-10-06 09:43:01 -0700</bug_when>
    <thetext>Comment on attachment 213502
Patch

../../Source/WebCore/platform/gtk/DragDataGtk.cpp:100:88: error: invalid initialization of non-const reference of type &apos;WebCore::Document&amp;&apos; from an rvalue of type &apos;WebCore::Document*&apos;
../../Source/WebCore/platform/gtk/PasteboardGtk.cpp:324:104: error: cannot convert &apos;WebCore::Range&apos; to &apos;WebCore::Range*&apos; for argument &apos;1&apos; to &apos;WTF::PassRefPtr&lt;WebCore::DocumentFragment&gt; WebCore::createFragmentFromText(WebCore::Range*, const WTF::String&amp;)&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936777</commentid>
    <comment_count>16</comment_count>
      <attachid>213502</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-10-06 09:57:22 -0700</bug_when>
    <thetext>Comment on attachment 213502
Patch

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

Gotta love this patch.

Obviously, must get GTK building before landing (maybe Windows too).

&gt; Source/WebCore/dom/CDATASection.h:69
&gt; +inline CDATASection&amp; toCDATASection(Node&amp; node)
&gt; +{
&gt; +    ASSERT_WITH_SECURITY_IMPLICATION(node.nodeType() == Node::CDATA_SECTION_NODE);
&gt; +    return static_cast&lt;CDATASection&amp;&gt;(node);
&gt; +}
&gt; +
&gt; +inline const CDATASection&amp; toCDATASection(const Node&amp; node)
&gt; +{
&gt; +    ASSERT_WITH_SECURITY_IMPLICATION(node.nodeType() == Node::CDATA_SECTION_NODE);
&gt; +    return static_cast&lt;const CDATASection&amp;&gt;(node);
&gt; +}
&gt; +
&gt; +inline CDATASection* toCDATASection(Node* node)
&gt; +{
&gt; +    ASSERT_WITH_SECURITY_IMPLICATION(!node || node-&gt;nodeType() == Node::CDATA_SECTION_NODE);
&gt; +    return static_cast&lt;CDATASection*&gt;(node);
&gt; +}
&gt; +
&gt; +inline const CDATASection* toCDATASection(const Node* node)
&gt; +{
&gt; +    ASSERT_WITH_SECURITY_IMPLICATION(!node || node-&gt;nodeType() == Node::CDATA_SECTION_NODE);
&gt; +    return static_cast&lt;const CDATASection*&gt;(node);
&gt; +}
&gt; +
&gt; +void toCDATASection(const CDATASection&amp;);
&gt; +void toCDATASection(const CDATASection*);

Sure would be nice to do these with macros.

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:137
&gt;      if (tagNamesToSkip) {
&gt;          for (size_t i = 0; i &lt; tagNamesToSkip-&gt;size(); ++i) {
&gt; -            if (targetNode-&gt;hasTagName(tagNamesToSkip-&gt;at(i)))
&gt; +            if (targetNode.hasTagName(tagNamesToSkip-&gt;at(i)))
&gt;                  return;
&gt;          }
&gt;      }

A waste to do this loop if the node isn’t an element.

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:192
&gt; -void MarkupAccumulator::appendStartTag(Node* node, Namespaces* namespaces)
&gt; +void MarkupAccumulator::appendStartTag(const Node&amp; node, Namespaces* namespaces)
&gt;  {
&gt;      appendStartMarkup(m_markup, node, namespaces);
&gt;      if (m_nodes)
&gt; -        m_nodes-&gt;append(node);
&gt; +        m_nodes-&gt;append(const_cast&lt;Node*&gt;(&amp;node));
&gt;  }

Seems like const is not so great if you just have to const_cast it away. Is the const really valuable?

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:340
&gt; +        parentName = &amp;(text.parentElement())-&gt;tagQName();

The parentheses here make the expression confusing. It’s like the &amp; only applies to the first part of the expression or something?

&gt; Source/WebCore/editing/MarkupAccumulator.h:73
&gt; +    String serializeNodes(Node&amp; targetNode, Node* nodeToSkip, EChildrenOnly);
&gt; +    String serializeNodes(Node&amp; targetNode, Node* nodeToSkip, EChildrenOnly, Vector&lt;QualifiedName&gt;* tagNamesToSkip);

I think we should either use a default value of nullptr instead of overloading, or we should use a &amp; instead of a * for the tag names to skip.

&gt; Source/WebCore/editing/markup.cpp:134
&gt; +    virtual void appendString(const String&amp; string) override
&gt; +    {
&gt; +        MarkupAccumulator::appendString(string);
&gt; +    }

This override doesn’t look right to me. I think this should instead be:

    using MarkupAccumulator::appendString;

&gt; Source/WebCore/editing/markup.cpp:285
&gt; +    String str = node.nodeValue();

I say we splurge on a few extra letters and call this either &quot;value&quot; or &quot;string&quot;.

&gt; Source/WebCore/editing/markup.cpp:315
&gt; +            newInlineStyle-&gt;removePropertiesInElementDefaultStyle(const_cast&lt;Element*&gt;(&amp;element));
&gt; +            newInlineStyle-&gt;removeStyleConflictingWithStyleOfNode(const_cast&lt;Element*&gt;(&amp;element));

Hmmpf, const.

&gt; Source/WebCore/editing/markup.cpp:320
&gt; +        if (element.isStyledElement() &amp;&amp; static_cast&lt;const StyledElement&amp;&gt;(element).inlineStyle())
&gt; +            newInlineStyle-&gt;overrideWithStyle(static_cast&lt;const StyledElement&amp;&gt;(element).inlineStyle());

toStyledElement?

&gt; Source/WebCore/editing/markup.cpp:829
&gt; +    if (!documentType)
&gt; +        return emptyString();

I know the old behavior was to return the empty string, but I would be tempted to return null string instead if I was supra callers would be OK with it.

&gt; Source/WebCore/editing/mac/EditorMac.mm:517
&gt; -    fragment = createFragmentFromMarkup(frame.document(), stringOmittingMicrosoftPrefix, emptyString(), DisallowScriptingAndPluginContent);
&gt; +    fragment = createFragmentFromMarkup(*frame.document(), stringOmittingMicrosoftPrefix, emptyString(), DisallowScriptingAndPluginContent);

The other functions above seem to check frame.document() for null, but tis one does not. Should it?

&gt; Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp:594
&gt; +    StringBuilder builder;

I don’t think StringBuilder is superior for concatenating two strings. If we could get the markup code to build the string in the builder, that would be another story.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936825</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-06 12:17:39 -0700</bug_when>
    <thetext>Landed in r157002.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936826</commentid>
    <comment_count>18</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-10-06 12:20:31 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 213502 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=213502&amp;action=review
&gt; 
&gt; Gotta love this patch.
&gt; 
&gt; Obviously, must get GTK building before landing (maybe Windows too).
&gt; 
&gt; &gt; Source/WebCore/dom/CDATASection.h:69
&gt; &gt; +inline CDATASection&amp; toCDATASection(Node&amp; node)
&gt; &gt; +{
&gt; &gt; +    ASSERT_WITH_SECURITY_IMPLICATION(node.nodeType() == Node::CDATA_SECTION_NODE);
&gt; &gt; +    return static_cast&lt;CDATASection&amp;&gt;(node);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +inline const CDATASection&amp; toCDATASection(const Node&amp; node)
&gt; &gt; +{
&gt; &gt; +    ASSERT_WITH_SECURITY_IMPLICATION(node.nodeType() == Node::CDATA_SECTION_NODE);
&gt; &gt; +    return static_cast&lt;const CDATASection&amp;&gt;(node);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +inline CDATASection* toCDATASection(Node* node)
&gt; &gt; +{
&gt; &gt; +    ASSERT_WITH_SECURITY_IMPLICATION(!node || node-&gt;nodeType() == Node::CDATA_SECTION_NODE);
&gt; &gt; +    return static_cast&lt;CDATASection*&gt;(node);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +inline const CDATASection* toCDATASection(const Node* node)
&gt; &gt; +{
&gt; &gt; +    ASSERT_WITH_SECURITY_IMPLICATION(!node || node-&gt;nodeType() == Node::CDATA_SECTION_NODE);
&gt; &gt; +    return static_cast&lt;const CDATASection*&gt;(node);
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void toCDATASection(const CDATASection&amp;);
&gt; &gt; +void toCDATASection(const CDATASection*);
&gt; 
&gt; Sure would be nice to do these with macros.

Done.

&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:137
&gt; &gt;      if (tagNamesToSkip) {
&gt; &gt;          for (size_t i = 0; i &lt; tagNamesToSkip-&gt;size(); ++i) {
&gt; &gt; -            if (targetNode-&gt;hasTagName(tagNamesToSkip-&gt;at(i)))
&gt; &gt; +            if (targetNode.hasTagName(tagNamesToSkip-&gt;at(i)))
&gt; &gt;                  return;
&gt; &gt;          }
&gt; &gt;      }
&gt; 
&gt; A waste to do this loop if the node isn’t an element.

Done.

&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:192
&gt; &gt; -void MarkupAccumulator::appendStartTag(Node* node, Namespaces* namespaces)
&gt; &gt; +void MarkupAccumulator::appendStartTag(const Node&amp; node, Namespaces* namespaces)
&gt; &gt;  {
&gt; &gt;      appendStartMarkup(m_markup, node, namespaces);
&gt; &gt;      if (m_nodes)
&gt; &gt; -        m_nodes-&gt;append(node);
&gt; &gt; +        m_nodes-&gt;append(const_cast&lt;Node*&gt;(&amp;node));
&gt; &gt;  }
&gt; 
&gt; Seems like const is not so great if you just have to const_cast it away. Is the const really valuable?

The consts all suck.  I think I am going to rip them all out on a second pass.

&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:340
&gt; &gt; +        parentName = &amp;(text.parentElement())-&gt;tagQName();
&gt; 
&gt; The parentheses here make the expression confusing. It’s like the &amp; only applies to the first part of the expression or something?

Done.

&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.h:73
&gt; &gt; +    String serializeNodes(Node&amp; targetNode, Node* nodeToSkip, EChildrenOnly);
&gt; &gt; +    String serializeNodes(Node&amp; targetNode, Node* nodeToSkip, EChildrenOnly, Vector&lt;QualifiedName&gt;* tagNamesToSkip);
&gt; 
&gt; I think we should either use a default value of nullptr instead of overloading, or we should use a &amp; instead of a * for the tag names to skip.

Converted to one function with a default value.

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:134
&gt; &gt; +    virtual void appendString(const String&amp; string) override
&gt; &gt; +    {
&gt; &gt; +        MarkupAccumulator::appendString(string);
&gt; &gt; +    }
&gt; 
&gt; This override doesn’t look right to me. I think this should instead be:
&gt; 
&gt;     using MarkupAccumulator::appendString;

Yup. Done.

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:285
&gt; &gt; +    String str = node.nodeValue();
&gt; 
&gt; I say we splurge on a few extra letters and call this either &quot;value&quot; or &quot;string&quot;.

Done.

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:315
&gt; &gt; +            newInlineStyle-&gt;removePropertiesInElementDefaultStyle(const_cast&lt;Element*&gt;(&amp;element));
&gt; &gt; +            newInlineStyle-&gt;removeStyleConflictingWithStyleOfNode(const_cast&lt;Element*&gt;(&amp;element));
&gt; 
&gt; Hmmpf, const.

:(

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:320
&gt; &gt; +        if (element.isStyledElement() &amp;&amp; static_cast&lt;const StyledElement&amp;&gt;(element).inlineStyle())
&gt; &gt; +            newInlineStyle-&gt;overrideWithStyle(static_cast&lt;const StyledElement&amp;&gt;(element).inlineStyle());
&gt; 
&gt; toStyledElement?

Done.

&gt; 
&gt; &gt; Source/WebCore/editing/markup.cpp:829
&gt; &gt; +    if (!documentType)
&gt; &gt; +        return emptyString();
&gt; 
&gt; I know the old behavior was to return the empty string, but I would be tempted to return null string instead if I was supra callers would be OK with it.

Didn&apos;t do.  Too scared.

&gt; 
&gt; &gt; Source/WebCore/editing/mac/EditorMac.mm:517
&gt; &gt; -    fragment = createFragmentFromMarkup(frame.document(), stringOmittingMicrosoftPrefix, emptyString(), DisallowScriptingAndPluginContent);
&gt; &gt; +    fragment = createFragmentFromMarkup(*frame.document(), stringOmittingMicrosoftPrefix, emptyString(), DisallowScriptingAndPluginContent);
&gt; 
&gt; The other functions above seem to check frame.document() for null, but tis one does not. Should it?

Yes. Done.

&gt; 
&gt; &gt; Source/WebCore/loader/archive/cf/LegacyWebArchive.cpp:594
&gt; &gt; +    StringBuilder builder;
&gt; 
&gt; I don’t think StringBuilder is superior for concatenating two strings. If we could get the markup code to build the string in the builder, that would be another story.

I&apos;m trying to avoid operator+ for strings.  This should probably use createFullMarkup if it was extended to support the other arguments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213491</attachid>
            <date>2013-10-05 21:19:21 -0700</date>
            <delta_ts>2013-10-05 21:35:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122403-20131005211921.patch</filename>
            <type>text/plain</type>
            <size>100749</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTA1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVGhyZWFkIHJlZmVyZW5jZXMg
dGhyb3VnaCBtYXJrdXAuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNDAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSGlnaGxpZ2h0czoKKyAgICAgICAgLSBSZW1vdmVkIGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cFdpdGhDb250ZXh0KCksIGl0IHdhcyB1bnVzZWQuCisgICAgICAgIC0gTW92ZWQgY3Jl
YXRlRnJhZ21lbnRGcm9tTm9kZXMoKSBpbnRvIGl0cyBvbmUgY2FsbGVyIChpbiBXZWJLaXQvbWFj
KQorICAgICAgICAtIEFkZCBhIGJ1bmNoIG1vcmUgdG9Gb28oKSBvdmVybG9hZHMuCisKIDIwMTMt
MTAtMDUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEZyYW1l
U2VsZWN0aW9uOiBSZW1vdmUgdHdvIHVudXNlZCBtZW1iZXIgZnVuY3Rpb25zLgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDYgQEAgX19aTjdXZWJDb3Jl
MTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5nZQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JE
MUV2CiBfX1pON1dlYkNvcmUxMlVURjhFbmNvZGluZ0V2CiBfX1pON1dlYkNvcmUxMmNhY2hlU3Rv
cmFnZUV2Ci1fX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQTjNXVEY2VmVj
dG9ySVBOU180Tm9kZUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFTlNfMjNFQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZUViTlNfMTNFQWJzb2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJkZWxldGVD
b29raWVFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxMmdjQ29udHJvbGxlckV2CiBfX1pON1dlYkNvcmUxMmljb25EYXRh
YmFzZUV2CkBAIC01ODEsOCArNTgwLDggQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9u
MjJleHBhbmRVcwogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUEtOU181UmFuZ2VF
TlNfOUVBZmZpbml0eUViCiBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1
VmlzaWJsZVBvc2l0aW9uRVMzX2IKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FYgotX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBL
TlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCitf
X1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUktOU180Tm9kZUUKK19fWk43V2ViQ29yZTE2
Y3JlYXRlRnVsbE1hcmt1cEVSS05TXzVSYW5nZUUKIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29v
a2llc0VSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRQogX19aTjdXZWJDb3JlMTZlbmNsb3Np
bmdJbnRSZWN0RVJLNkNHUmVjdAogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNf
OUZsb2F0UmVjdEUKQEAgLTc2NSw3ICs3NjQsNiBAQCBfX1pON1dlYkNvcmUyM0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQzFFCiBfX1pON1dlYkNvcmUyM011dGFibGVTdHlsZVByb3BlcnR5U2V0MjVl
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uRXYKIF9fWk43V2ViQ29yZTIzTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXREMUV2CiBfX1pON1dlYkNvcmUyM1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50MjRwbGF0
Zm9ybUJhZFJlc3BvbnNlRXJyb3JFdgotX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21O
b2Rlc0VQTlNfOERvY3VtZW50RVJLTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFTlMyXzE1Q3Jh
c2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBlRVA1
TlNVUkxsCiBfX1pON1dlYkNvcmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4
X05TUmFuZ2UKIF9fWk43V2ViQ29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmlu
ZzhfTlNSYW5nZQpAQCAtNzgxLDcgKzc3OSw3IEBAIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyMTQKIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyMTR3
aWxsRGV0YWNoUGFnZUV2CiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckMy
RVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYK
LV9fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktO
M1dURjZTdHJpbmdFUzVfTlNfMTlQYXJzZXJDb250ZW50UG9saWN5RQorX19aTjdXZWJDb3JlMjRj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUk5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9O
U18xOVBhcnNlckNvbnRlbnRQb2xpY3lFCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0cmluZ0UKQEAgLTgx
MSw2ICs4MDksNyBAQCBfX1pON1dlYkNvcmUyOERvY3VtZW50U3R5bGVTaGVldENvbGxlY3RpCiBf
X1pON1dlYkNvcmUyOGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmUyOHJlbW92ZUxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXJFUHYKIF9fWk43V2Vi
Q29yZTI5Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWVFUktOU18yMU5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkVSS05TXzNVUkxFUzVfCitfX1pON1dlYkNvcmUyOWNyZWF0ZURlZmF1bHRQYXJhZ3Jh
cGhFbGVtZW50RVJOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUyOWlzQ2hhcmFjdGVyU21hcnRS
ZXBsYWNlRXhlbXB0RWliCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNEZWNvZGluZ1dpdGhS
YW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNFbmNv
ZGluZ1dpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTY5Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc5Niw3ICs3OTYsNyBAQAogCQkxQzExQ0NDODBBQTYwOTM3MDBEQURC
MjAgLyogRE9NSFRNTEVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1REYyRUVCMEFBMzg3Q0IwMEFENjRDNSAvKiBE
T01IVE1MRWxlbWVudC5oICovOyB9OwogCQkxQzI2NDk3QTBEN0UyNDhBMDBCRDEwRjIgLyogRG9j
dW1lbnRMb2FkZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNw
cCAqLzsgfTsKIAkJMUMyNjQ5N0MwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyNjQ5N0IwRDdFMjRF
QzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwICovOyB9OwotCQkxQzRDOEYwMjBBRDg1RDg3MDA5NDc1
Q0UgLyogRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGMDAwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJMUM0QzhGMDIwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNEM4RjAwMEFEODVEODcwMDk0NzVDRSAvKiBEZWxldGVCdXR0b25Db250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUM0QzhGNjYwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGNjQwQUQ4NjU1RDAwOTQ3
NUNFIC8qIERlbGV0ZUJ1dHRvbi5oICovOyB9OwogCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzgg
LyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUZBRUNGMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwICovOyB9OwogCQkxQzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzVGQUVEMDBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmggKi87IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1t
CShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhU
TUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKIAogLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmlu
ZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKIHsKLSAgICByZXR1cm4g
a2l0KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFti
YXNlVVJMIGFic29sdXRlU3RyaW5nXSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKCpjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFtiYXNlVVJMIGFic29s
dXRlU3RyaW5nXSkuZ2V0KCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRl
RG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ0RBVEFTZWN0aW9uLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DREFUQVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMzMgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gdmlydHVhbENyZWF0ZShjb25zdCBTdHJp
bmcmKTsKIH07CiAKK2lubGluZSBDREFUQVNlY3Rpb24mIHRvQ0RBVEFTZWN0aW9uKE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENEQVRBU2VjdGlvbiY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9uJiB0
b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05P
REUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24mPihub2RlKTsK
K30KKworaW5saW5lIENEQVRBU2VjdGlvbiogdG9DREFUQVNlY3Rpb24oTm9kZSogbm9kZSkKK3sK
KyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENEQVRBU2VjdGlvbio+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9u
KiB0b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RB
VEFfU0VDVElPTl9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0RBVEFTZWN0
aW9uKj4obm9kZSk7Cit9CisKK3ZvaWQgdG9DREFUQVNlY3Rpb24oY29uc3QgQ0RBVEFTZWN0aW9u
Jik7Cit2b2lkIHRvQ0RBVEFTZWN0aW9uKGNvbnN0IENEQVRBU2VjdGlvbiopOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDREFUQVNlY3Rpb25faApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0NvbW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q29tbWVudC5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwzMyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdDsKIH07CiAKK2lubGluZSBD
b21tZW50JiB0b0NvbW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
Q29tbWVudCYgdG9Db21tZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9E
RSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQmPihub2RlKTsKK30KKwor
aW5saW5lIENvbW1lbnQqIHRvQ29tbWVudChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
Q09NTUVOVF9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpOwor
fQorCitpbmxpbmUgY29uc3QgQ29tbWVudCogdG9Db21tZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBDb21tZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQm
KTsKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gQ29tbWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDE1Njk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNjcsNyArNDI2Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNM
VHJhbnNmb3JtKFByb2Nlc3MKICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5n
IG5ld1NvdXJjZTsKICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7Ci0gICAgaWYgKCFwcm9jZXNz
b3ItPnRyYW5zZm9ybVRvU3RyaW5nKHRoaXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJl
c3VsdEVuY29kaW5nKSkKKyAgICBpZiAoIXByb2Nlc3Nvci0+dHJhbnNmb3JtVG9TdHJpbmcoKnRo
aXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB0aGUgdHJhbnNmb3JtIGZhaWxlZCB3ZSBzaG91bGQg
cHJvYmFibHkgcmVwb3J0IGFuIGVycm9yIChsaWtlIE1vemlsbGEgZG9lcykuCiAgICAgRnJhbWUq
IG93bmVyRnJhbWUgPSBmcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjE5LDggKzE2MTksMjEgQEAgaW5saW5lIGNvbnN0IERvY3VtZW50KiB0b0RvY3VtZW50
KGNvbnN0IAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KG5vZGUpOwog
fQogCitpbmxpbmUgRG9jdW1lbnQmIHRvRG9jdW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
RG9jdW1lbnQmIHRvRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCY+KG5vZGUpOworfQorCiAvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvRG9jdW1lbnQo
Y29uc3QgRG9jdW1lbnQqKTsKK3ZvaWQgdG9Eb2N1bWVudChjb25zdCBEb2N1bWVudCYpOwogCiAv
LyBQdXQgdGhlc2UgbWV0aG9kcyBoZXJlLCBiZWNhdXNlIHRoZXkgcmVxdWlyZSB0aGUgRG9jdW1l
bnQgZGVmaW5pdGlvbiwgYnV0IHdlIHJlYWxseSB3YW50IHRvIGlubGluZSB0aGVtLgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDMz
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3Vic2V0OwogfTsKIAoraW5saW5lIERvY3VtZW50
VHlwZSYgdG9Eb2N1bWVudFR5cGUoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9O
T0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlJj4obm9kZSk7Cit9CisK
K2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUmIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IERvY3VtZW50VHlwZSY+KG5vZGUpOworfQorCitpbmxpbmUgRG9jdW1lbnRUeXBlKiB0
b0RvY3VtZW50VHlwZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQ
RV9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSk7Cit9
CisKK2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUqIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudFR5cGUqPihub2RlKTsKK30KKwordm9pZCB0b0Rv
Y3VtZW50VHlwZShjb25zdCBEb2N1bWVudFR5cGUmKTsKK3ZvaWQgdG9Eb2N1bWVudFR5cGUoY29u
c3QgRG9jdW1lbnRUeXBlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCShyZXZpc2lv
biAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5MSwzMyBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
CitpbmxpbmUgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihO
b2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUu
bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mPihub2RlKTsKK30KKworaW5s
aW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uJj4obm9k
ZSk7Cit9CisKIGlubGluZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRvUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREUpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24q
Pihub2RlKTsKIH0KIAoraW5saW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogdG9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBS
T0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpOworfQorCit2b2lkIHRvUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYpOwordm9pZCB0b1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbihjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qKTsKKwogfSAvL25hbWVz
cGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTU2OTc3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Myw3
ICsxMDgzLDcgQEAgU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25Db2RlJiBlYwogCiBT
dHJpbmcgUmFuZ2U6OnRvSFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCh0
aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogU3RyaW5nIFJhbmdl
Ojp0ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IFNoYWRvd1Jvb3Q6OmNsb25l
Tm9kZShiCiAKIFN0cmluZyBTaGFkb3dSb290Ojppbm5lckhUTUwoKSBjb25zdAogewotICAgIHJl
dHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAgICByZXR1cm4gY3JlYXRl
TWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiB2b2lkIFNoYWRvd1Jvb3Q6OnNldElu
bmVySFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UZXh0LmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDEyIEBAIGlubGluZSBUZXh0JiB0b1RleHQoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dCY+KG5vZGUpOwogfQogCitpbmxp
bmUgY29uc3QgVGV4dCYgdG9UZXh0KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc1RleHROb2RlKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Jj4obm9kZSk7Cit9CisKIGlubGluZSBUZXh0KiB0b1RleHQo
Tm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9k
ZSB8fCBub2RlLT5pc1RleHROb2RlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTk4LDcgKzExOTgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFy
YWdyYXBoCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRo
aXMgdXNlZCB0byB1c2UgYSB0ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29u
ZnVzZWQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoJmRvY3VtZW50KCksIGNyZWF0ZU1hcmt1cChy
YW5nZS5nZXQoKSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCB0cnVlKSwgIiIpOwor
ICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCgpLCBj
cmVhdGVNYXJrdXAoKnJhbmdlLCAwLCBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIHRydWUp
LCAiIik7CiAKICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3
aGVuIHdlIGNvcHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5n
IGlmIHdlJ3JlIGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFw
aCBjYW4gaGF2ZSBzdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDEsNyArNTAxLDcgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEhvcml6b250YWxSdWxlKAogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5z
ZXJ0SFRNTChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY3V0ZUluc2VydEZyYWdtZW50KGZyYW1l
LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgdmFsdWUsICIiKSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChmcmFtZSwgY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCB2YWx1ZSwgIiIpKTsKIH0KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEltYWdlKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsMjUgKzExMywyNSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkK
IHsKIH0KIAotU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2RlcyhOb2RlKiB0
YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSkK
K1N0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpCiB7CiAgICAg
cmV0dXJuIHNlcmlhbGl6ZU5vZGVzKHRhcmdldE5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVuT25s
eSwgMCk7CiB9CiAKLVN0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9u
bHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCitTdHJpbmcgTWFya3Vw
QWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5vZGVU
b1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4q
IHRhZ05hbWVzVG9Ta2lwKQogewogICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXModGFy
Z2V0Tm9kZSwgbm9kZVRvU2tpcCwgY2hpbGRyZW5Pbmx5LCAwLCB0YWdOYW1lc1RvU2tpcCk7CiAg
ICAgcmV0dXJuIG1fbWFya3VwLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogdGFyZ2V0Tm9kZSwgTm9kZSog
bm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMsIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUmIHRh
cmdldE5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBj
b25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05h
bWVzVG9Ta2lwKQogewotICAgIGlmICh0YXJnZXROb2RlID09IG5vZGVUb1NraXApCisgICAgaWYg
KCZ0YXJnZXROb2RlID09IG5vZGVUb1NraXApCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAodGFnTmFtZXNUb1NraXApIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWdO
YW1lc1RvU2tpcC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXROb2RlLT5o
YXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCisgICAgICAgICAgICBpZiAodGFyZ2V0
Tm9kZS5oYXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ4LDI5ICsxNDgsMjkgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaQogICAgIGlmICghY2hpbGRyZW5Pbmx5KQog
ICAgICAgICBhcHBlbmRTdGFydFRhZyh0YXJnZXROb2RlLCAmbmFtZXNwYWNlSGFzaCk7CiAKLSAg
ICBpZiAoISh0YXJnZXROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVu
dENhbm5vdEhhdmVFbmRUYWcodGFyZ2V0Tm9kZSkpKSB7CisgICAgaWYgKCEodGFyZ2V0Tm9kZS5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcodGFy
Z2V0Tm9kZSkpKSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIE5vZGUq
IGN1cnJlbnQgPSB0YXJnZXROb2RlLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSA/IHRvSFRNTFRl
bXBsYXRlRWxlbWVudCh0YXJnZXROb2RlKS0+Y29udGVudCgpLT5maXJzdENoaWxkKCkgOiB0YXJn
ZXROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIGN1cnJlbnQgPSB0YXJnZXROb2Rl
Lmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpID8gdG9IVE1MVGVtcGxhdGVFbGVtZW50KHRhcmdldE5v
ZGUpLmNvbnRlbnQoKS0+Zmlyc3RDaGlsZCgpIDogdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAj
ZWxzZQotICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS0+Zmlyc3RDaGlsZCgpOwor
ICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAjZW5kaWYK
ICAgICAgICAgZm9yICggOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoY3VycmVudCwgbm9k
ZVRvU2tpcCwgSW5jbHVkZU5vZGUsICZuYW1lc3BhY2VIYXNoLCB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgICAgICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKCpjdXJyZW50LCBub2RlVG9T
a2lwLCBJbmNsdWRlTm9kZSwgJm5hbWVzcGFjZUhhc2gsIHRhZ05hbWVzVG9Ta2lwKTsKICAgICB9
CiAKICAgICBpZiAoIWNoaWxkcmVuT25seSkKICAgICAgICAgYXBwZW5kRW5kVGFnKHRhcmdldE5v
ZGUpOwogfQogCi1TdHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnJlc29sdmVVUkxJZk5lZWRlZChj
b25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK1N0
cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6cmVzb2x2ZVVSTElmTmVlZGVkKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAogewogICAgIHN3aXRjaCAo
bV9yZXNvbHZlVVJMc01ldGhvZCkgewogICAgIGNhc2UgUmVzb2x2ZUFsbFVSTHM6Ci0gICAgICAg
IHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybFN0cmluZykuc3RyaW5n
KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsU3Ry
aW5nKS5zdHJpbmcoKTsKIAogICAgIGNhc2UgUmVzb2x2ZU5vbkxvY2FsVVJMczoKLSAgICAgICAg
aWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLnN0cmlu
ZygpOworICAgICAgICBpZiAoIWVsZW1lbnQuZG9jdW1lbnQoKS51cmwoKS5pc0xvY2FsRmlsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxT
dHJpbmcpLnN0cmluZygpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRG9Ob3RSZXNvbHZl
VVJMczoKQEAgLTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0cmluZyhjb24KICAgICBtX21hcmt1cC5hcHBlbmQoc3RyaW5nKTsKIH0KIAotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoTm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKGNvbnN0IE5v
ZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kU3RhcnRNYXJr
dXAobV9tYXJrdXAsIG5vZGUsIG5hbWVzcGFjZXMpOwogICAgIGlmIChtX25vZGVzKQotICAgICAg
ICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZXMtPmFwcGVuZChjb25zdF9j
YXN0PE5vZGUqPigmbm9kZSkpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bmRUYWcoTm9kZSogbm9kZSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhj
b25zdCBOb2RlJiBub2RlKQogewogICAgIGFwcGVuZEVuZE1hcmt1cChtX21hcmt1cCwgbm9kZSk7
CiB9CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRB
dHRyaWJ1dGVWCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJp
YnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopCiB7
CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZh
bHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
QXR0cmlidXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90
ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIEFTU0VSVChlbGVt
ZW50LT5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VS
TEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAgICBjb25zdCBTdHJpbmcgcmVzb2x2ZWRVUkxTdHJp
bmcgPSByZXNvbHZlVVJMSWZOZWVkZWQoZWxlbWVudCwgYXR0cmlidXRlLnZhbHVlKCkpOwogICAg
IFVDaGFyIHF1b3RlQ2hhciA9ICciJzsKICAgICBTdHJpbmcgc3RyaXBwZWRVUkxTdHJpbmcgPSBy
ZXNvbHZlZFVSTFN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTI0NSwxNiArMjQ1LDE2IEBA
IHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICByZXN1bHQuYXBw
ZW5kKHF1b3RlQ2hhcik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdl
KiByYW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTm9kZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kZSwg
Y29uc3QgUmFuZ2UqIHJhbmdlLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7Ci0gICAgY29uc3Qg
U3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOworICAgIGNvbnN0IFN0cmluZyBzdHIgPSBu
b2RlLm5vZGVWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBzdGFydCA9IDA7CiAKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKG5v
ZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQorICAgICAgICBpZiAoJm5vZGUgPT0gcmFuZ2Ut
PmVuZENvbnRhaW5lcigpKQogICAgICAgICAgICAgbGVuZ3RoID0gcmFuZ2UtPmVuZE9mZnNldCgp
OwotICAgICAgICBpZiAobm9kZSA9PSByYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAgICAg
ICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpIHsKICAgICAgICAgICAgIHN0
YXJ0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7
CiAgICAgICAgIH0KQEAgLTI2MywxNSArMjYzLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZE5vZGVWYWx1ZSgKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMo
cmVzdWx0LCBzdHIsIHN0YXJ0LCBsZW5ndGgsIGVudGl0eU1hc2spOwogfQogCi1ib29sIE1hcmt1
cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBh
dHRyaWJ1dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXggPSBlbGVtZW50LT5wcmVmaXgoKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCA9IGVsZW1lbnQucHJlZml4KCk7CiAgICAgaWYgKHByZWZpeC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAhZWxlbWVudC0+aGFzQXR0cmlidXRlKHhtbG5zQXRv
bSk7CisgICAgICAgIHJldHVybiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoeG1sbnNBdG9tKTsKIAog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB4bWxuc1dpdGhDb2xvbiwgKEFTQ0lJTGl0
ZXJhbCgieG1sbnM6IikpKTsKLSAgICByZXR1cm4gIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh4bWxu
c1dpdGhDb2xvbiArIHByZWZpeCk7CisgICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSh4
bWxuc1dpdGhDb2xvbiArIHByZWZpeCk7CiB9CiAKIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFt
ZXNwYWNlcyYgbmFtZXNwYWNlcykKQEAgLTMzMywyNCArMzMzLDI0IEBAIHZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSgKICAgICB9CiB9CiAKLUVudGl0eU1hc2sgTWFya3Vw
QWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQpIGNvbnN0CitFbnRpdHlN
YXNrIE1hcmt1cEFjY3VtdWxhdG9yOjplbnRpdHlNYXNrRm9yVGV4dChjb25zdCBUZXh0JiB0ZXh0
KSBjb25zdAogewogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIHBhcmVudE5hbWUgPSAwOwotICAg
IGlmICh0ZXh0LT5wYXJlbnRFbGVtZW50KCkpCi0gICAgICAgIHBhcmVudE5hbWUgPSAmKHRleHQt
PnBhcmVudEVsZW1lbnQoKSktPnRhZ1FOYW1lKCk7CisgICAgaWYgKHRleHQucGFyZW50RWxlbWVu
dCgpKQorICAgICAgICBwYXJlbnROYW1lID0gJih0ZXh0LnBhcmVudEVsZW1lbnQoKSktPnRhZ1FO
YW1lKCk7CiAKICAgICBpZiAocGFyZW50TmFtZSAmJiAoKnBhcmVudE5hbWUgPT0gc2NyaXB0VGFn
IHx8ICpwYXJlbnROYW1lID09IHN0eWxlVGFnIHx8ICpwYXJlbnROYW1lID09IHhtcFRhZykpCiAg
ICAgICAgIHJldHVybiBFbnRpdHlNYXNrSW5DREFUQTsKIAotICAgIHJldHVybiB0ZXh0LT5kb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBFbnRpdHlNYXNrSW5IVE1MUENEQVRBIDogRW50aXR5
TWFza0luUENEQVRBOworICAgIHJldHVybiB0ZXh0LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSA/IEVudGl0eU1hc2tJbkhUTUxQQ0RBVEEgOiBFbnRpdHlNYXNrSW5QQ0RBVEE7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBU
ZXh0KiB0ZXh0KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbnN0IFRleHQmIHRleHQpCiB7CiAgICAgYXBwZW5kTm9kZVZhbHVlKHJl
c3VsdCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50KQorc3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdC
dWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKIHsKICAgICAvLyBGSVhNRTog
Q29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBv
c3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5j
bHVkZXMgIi0tPiIuCiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhLS0iKTsKQEAgLTM1OCwy
MSArMzU4LDIxIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQoU3QKICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLS0+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kWE1MRGVjbGFy
YXRpb24oU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKCFkb2N1bWVudC0+aGFzWE1MRGVjbGFyYXRpb24oKSkKKyAgICBpZiAoIWRvY3Vt
ZW50Lmhhc1hNTERlY2xhcmF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCI8P3htbCB2ZXJzaW9uPVwiIik7Ci0gICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudC0+eG1sVmVyc2lvbigpKTsKLSAgICBjb25zdCBTdHJpbmcmIGVuY29kaW5nID0gZG9jdW1l
bnQtPnhtbEVuY29kaW5nKCk7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudC54bWxWZXJzaW9u
KCkpOworICAgIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcgPSBkb2N1bWVudC54bWxFbmNvZGluZygp
OwogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJcIiBlbmNvZGluZz1cIiIpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kaW5n
KTsKICAgICB9Ci0gICAgaWYgKGRvY3VtZW50LT54bWxTdGFuZGFsb25lU3RhdHVzKCkgIT0gRG9j
dW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgeworICAgIGlmIChkb2N1bWVudC54bWxTdGFu
ZGFsb25lU3RhdHVzKCkgIT0gRG9jdW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXCIgc3RhbmRhbG9uZT1cIiIpOwotICAgICAgICBp
ZiAoZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSkKKyAgICAgICAgaWYgKGRvY3VtZW50LnhtbFN0
YW5kYWxvbmUoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJ5ZXMiKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5vIik7CkBAIC0z
ODEsMzIgKzM4MSwzMiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxEZWNsYXJh
CiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwiPz4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
RG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRU
eXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlJiBkb2N1bWVudFR5
cGUpCiB7Ci0gICAgaWYgKG4tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgaWYgKGRvY3VtZW50VHlw
ZS5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiPCFET0NUWVBFICIpOwotICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsKLSAg
ICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudFR5cGUubmFtZSgpKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZS5wdWJsaWNJZCgpLmlzRW1w
dHkoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFBVQkxJQyBcIiIpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGRvY3VtZW50VHlwZS5wdWJsaWNJZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwot
ICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghZG9j
dW1lbnRUeXBlLnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgJyk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChk
b2N1bWVudFR5cGUuc3lzdGVtSWQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewor
ICAgIH0gZWxzZSBpZiAoIWRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFNZU1RFTSBcIiIpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50VHlw
ZS5zeXN0ZW1JZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwogICAgIH0KLSAgICBp
ZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFkb2N1bWVudFR5
cGUuaW50ZXJuYWxTdWJzZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICcpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCdbJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
bi0+aW50ZXJuYWxTdWJzZXQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBl
LmludGVybmFsU3Vic2V0KCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCddJyk7CiAgICAgfQog
ICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKQEAgLTQyNCwxNCArNDI0LDE0IEBAIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmcKICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9
CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBw
ZW5kT3BlblRhZyhyZXN1bHQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCi0gICAgaWYgKGVsZW1l
bnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50
LT5hdHRyaWJ1dGVDb3VudCgpOworICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50LmF0dHJpYnV0ZUNvdW50KCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVtZW50LCBlbGVtZW50LT5hdHRyaWJ1dGVBdChp
KSwgbmFtZXNwYWNlcyk7CisgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVt
ZW50LCBlbGVtZW50LmF0dHJpYnV0ZUF0KGkpLCBuYW1lc3BhY2VzKTsKICAgICB9CiAKICAgICAv
LyBHaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMgdG8gYWRkIHRoZWlyIG93biBhdHRy
aWJ1dGVzLgpAQCAtNDQwLDI3ICs0NDAsMjcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudChTdAogICAgIGFwcGVuZENsb3NlVGFnKHJlc3VsdCwgZWxlbWVudCk7CiB9CiAK
LXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgcmVzdWx0
LmFwcGVuZCgnPCcpOwotICAgIGlmIChpblhNTEZyYWdtZW50U2VyaWFsaXphdGlvbigpICYmIG5h
bWVzcGFjZXMgJiYgZWxlbWVudC0+cHJlZml4KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKGluWE1M
RnJhZ21lbnRTZXJpYWxpemF0aW9uKCkgJiYgbmFtZXNwYWNlcyAmJiBlbGVtZW50LnByZWZpeCgp
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcv
VFIvRE9NLUxldmVsLTMtQ29yZS9uYW1lc3BhY2VzLWFsZ29yaXRobXMuaHRtbCNub3JtYWxpemVE
b2N1bWVudEFsZ28gd2Ugbm93IHNob3VsZCBjcmVhdGUKICAgICAgICAgLy8gYSBkZWZhdWx0IG5h
bWVzcGFjZSBkZWNsYXJhdGlvbiB0byBtYWtlIHRoaXMgbmFtZXNwYWNlIHdlbGwtZm9ybWVkLiBI
b3dldmVyLCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtbmFtZXMxMS8jeG1sUmVzZXJ2ZWQgc3Rh
dGVzCiAgICAgICAgIC8vICJUaGUgcHJlZml4IHhtbCBNVVNUIE5PVCBiZSBkZWNsYXJlZCBhcyB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuIiwgc28gdXNlIHRoZSB4bWwgcHJlZml4IGV4cGxpY2l0bHku
Ci0gICAgICAgIGlmIChlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSA9PSBYTUxOYW1lczo6eG1sTmFt
ZXNwYWNlVVJJKSB7CisgICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSgpID09IFhNTE5h
bWVzOjp4bWxOYW1lc3BhY2VVUkkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sQXRv
bSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgcmVzdWx0LmFwcGVuZChlbGVtZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwotICAg
IGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSB8fCAhZWxlbWVudC0+ZG9jdW1lbnQo
KS5pc0hUTUxEb2N1bWVudCgpKSAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVs
ZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIGFwcGVuZE5hbWVzcGFjZShyZXN1bHQsIGVsZW1lbnQt
PnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMsIGluWE1MRnJh
Z21lbnRTZXJpYWxpemF0aW9uKCkpOworICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudC5ub2RlTmFt
ZVByZXNlcnZpbmdDYXNlKCkpOworICAgIGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24o
KSB8fCAhZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpICYmIG5hbWVzcGFjZXMg
JiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgYXBwZW5kTmFt
ZXNwYWNlKHJlc3VsdCwgZWxlbWVudC5wcmVmaXgoKSwgZWxlbWVudC5uYW1lc3BhY2VVUkkoKSwg
Km5hbWVzcGFjZXMsIGluWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKCkpOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYg
KHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewotICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKQorICAgICAgICBpZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7IC8vIFhIVE1MIDEuMCA8LT4gSFRNTCBjb21wYXRpYmls
aXR5LgogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgfQpAQCAtNDkyLDkgKzQ5Miw5
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmdlbmVyYXRlVW5pcXVlUHIKICAgICB9IHdoaWxl
ICh0cnVlKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFN0
cmluZ0J1aWxkZXImIHJlc3VsdCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKIHsKLSAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOworICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LmRvY3VtZW50
KCkuaXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIApAQCAtNTIw
LDcgKzUyMCw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKIAog
ICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKIAotICAgIGlmIChlbGVtZW50LT5pc1VSTEF0dHJpYnV0
ZShhdHRyaWJ1dGUpKQorICAgIGlmIChlbGVtZW50LmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkp
CiAgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgZWxlbWVudCwg
YXR0cmlidXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwpAQCAt
NTQwLDE3ICs1NDAsMTcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0
aQogICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJdXT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBO
b2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlJiBu
b2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1lc3BhY2VzKQogICAg
ICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBzd2l0Y2ggKG5vZGUt
Pm5vZGVUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUoKSkgewogICAgIGNhc2Ug
Tm9kZTo6VEVYVF9OT0RFOgotICAgICAgICBhcHBlbmRUZXh0KHJlc3VsdCwgdG9UZXh0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKSk7CisgICAgICAgIGFwcGVuZFRleHQocmVzdWx0LCB0b1RleHQo
bm9kZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAg
ICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihu
b2RlKS0+ZGF0YSgpKTsKKyAgICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHRvQ29tbWVudChu
b2RlKS5kYXRhKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05P
REU6CiAgICAgICAgIGFwcGVuZFhNTERlY2xhcmF0aW9uKHJlc3VsdCwgdG9Eb2N1bWVudChub2Rl
KSk7CkBAIC01NTgsMTYgKzU1OCwxNiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dGFydE1hcmt1CiAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICAgICAgYXBw
ZW5kRG9jdW1lbnRUeXBlKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnRUeXBlKj4o
bm9kZSkpOworICAgICAgICBhcHBlbmREb2N1bWVudFR5cGUocmVzdWx0LCB0b0RvY3VtZW50VHlw
ZShub2RlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNU
UlVDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0
LCBzdGF0aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKS0+dGFyZ2V0
KCksIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpLT5kYXRh
KCkpOworICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0LCB0b1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbihub2RlKS50YXJnZXQoKSwgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
bm9kZSkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05P
REU6Ci0gICAgICAgIGFwcGVuZEVsZW1lbnQocmVzdWx0LCB0b0VsZW1lbnQoY29uc3RfY2FzdDxO
b2RlKj4obm9kZSkpLCBuYW1lc3BhY2VzKTsKKyAgICAgICAgYXBwZW5kRWxlbWVudChyZXN1bHQs
IHRvRWxlbWVudChub2RlKSwgbmFtZXNwYWNlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Tm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRDREFUQVNlY3Rpb24ocmVz
dWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKS0+ZGF0YSgpKTsKKyAg
ICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgdG9DREFUQVNlY3Rpb24obm9kZSkuZGF0
YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAg
ICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgpAQCAtNTg0LDM3ICs1ODQsMzcgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdQogLy8gMi4gRWxlbWVudHMgdy8gY2hpbGRy
ZW4gbmV2ZXIgc2VsZi1jbG9zZSBiZWNhdXNlIHRoZXkgdXNlIGEgc2VwYXJhdGUgZW5kIHRhZy4K
IC8vIDMuIEhUTUwgZWxlbWVudHMgd2hpY2ggZG8gbm90IGhhdmUgYSAiZm9yYmlkZGVuIiBlbmQg
dGFnIHdpbGwgY2xvc2Ugd2l0aCBhIHNlcGFyYXRlIGVuZCB0YWcuCiAvLyA0LiBPdGhlciBlbGVt
ZW50cyBzZWxmLWNsb3NlLgotYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkU2VsZkNsb3Nl
KGNvbnN0IE5vZGUqIG5vZGUpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRTZWxmQ2xv
c2UoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIWluWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQorICAgIGlmICghaW5Y
TUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiBub2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVz
KCkpCisgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudENhbm5vdEhhdmVFbmRU
YWcobm9kZSkpCisgICAgaWYgKG5vZGUuaXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIE1hcmt1cEFjY3VtdWxhdG9yOjplbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhj
b25zdCBOb2RlKiBub2RlKQorYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6ZWxlbWVudENhbm5vdEhh
dmVFbmRUYWcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkKKyAgICBpZiAoIW5vZGUuaXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBGSVhNRTogaWVGb3JiaWRzSW5zZXJ0SFRNTCBtYXkgbm90IGJlIHRoZSBy
aWdodCBmdW5jdGlvbiB0byBjYWxsIGhlcmUKICAgICAvLyBpZUZvcmJpZHNJbnNlcnRIVE1MIGlz
IHVzZWQgdG8gZGlzYWxsb3cgc2V0dGluZyBpbm5lckhUTUwvb3V0ZXJIVE1MCiAgICAgLy8gb3Ig
Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LiAgSXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgYWxpZ24g
d2l0aAogICAgIC8vIHdoaWNoIGVsZW1lbnRzIHNob3VsZCBiZSBzZXJpYWxpemVkIHcvbyBlbmQg
dGFncy4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+
aWVGb3JiaWRzSW5zZXJ0SFRNTCgpOworICAgIHJldHVybiB0b0hUTUxFbGVtZW50KG5vZGUpLmll
Rm9yYmlkc0luc2VydEhUTUwoKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwg
c2hvdWxkU2VsZkNsb3NlKG5vZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGVsZW1l
bnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKKyAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgp
IHx8IHNob3VsZFNlbGZDbG9zZShub2RlKSB8fCAoIW5vZGUuaGFzQ2hpbGROb2RlcygpICYmIGVs
ZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVz
dWx0LmFwcGVuZCgnPCcpOwogICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICByZXN1bHQuYXBw
ZW5kKHRvRWxlbWVudChub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICByZXN1
bHQuYXBwZW5kKHRvRWxlbWVudChub2RlKS5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwogICAg
IHJlc3VsdC5hcHBlbmQoJz4nKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
YXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw0OCArNjks
NTMgQEAgcHVibGljOgogICAgIE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qLCBFQWJz
b2x1dGVVUkxzLCBjb25zdCBSYW5nZSogPSAwLCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uID0gSFRN
TEZyYWdtZW50U2VyaWFsaXphdGlvbik7CiAgICAgdmlydHVhbCB+TWFya3VwQWNjdW11bGF0b3Io
KTsKIAotICAgIFN0cmluZyBzZXJpYWxpemVOb2RlcyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBu
b2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5KTsKLSAgICBTdHJpbmcgc2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSwgVmVjdG9yPFF1
YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRD
b21tZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgc2VyaWFs
aXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25s
eSk7CisgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5v
ZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNU
b1NraXApOwogCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0
aWVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEVu
dGl0eU1hc2spOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2Vz
KiA9IDApOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRp
YyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAubGVuZ3RoKCk7IH0KKwogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IE5vZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhT
dHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwgY29uc3QgVGV4dCYpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFt
ZXNwYWNlcyopOworCisgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhjb25zdCBOb2RlJiwgTmFtZXNw
YWNlcyogPSAwKTsKKworICAgIHZvaWQgYXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgY29u
c3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CisKKyAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3Vw
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBw
ZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJik7CisKICAgICB2b2lkIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCBib29sKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwg
RWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7Ci0gICAgYm9v
bCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKLSAgICBib29sIHNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7
CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IE5vZGUmLCBj
b25zdCBSYW5nZSosIEVudGl0eU1hc2spOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmLCBib29sIGFsbG93RW1wdHlEZWZhdWx0TlMgPSBm
YWxzZSk7Ci0gICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYsIFRleHQqKTsKLSAgICB2
b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1bWVudCop
OwotICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1
bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXIm
LCBjb25zdCBEb2N1bWVudCYpOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1
aWxkZXImLCBjb25zdCBEb2N1bWVudFR5cGUmKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRl
ciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRPcGVuVGFnKFN0cmlu
Z0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ2xvc2VU
YWcoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShT
dHJpbmdCdWlsZGVyJiwgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYs
IGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2Vj
dGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBhcHBlbmRTdGFy
dE1hcmt1cChTdHJpbmdCdWlsZGVyJiwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKLSAgICBi
b29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7Ci0gICAgYm9vbCBlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhjb25zdCBOb2RlKik7Ci0gICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoU3RyaW5n
QnVpbGRlciYsIGNvbnN0IE5vZGUqKTsKKworICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CisgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1
dGUoY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyYpOworICAgIGJvb2wgc2hvdWxkU2VsZkNs
b3NlKGNvbnN0IE5vZGUmKTsKKyAgICBib29sIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0
IE5vZGUmKTsKKyAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KGNvbnN0IFRleHQmKSBj
b25zdDsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3QgUmFu
Z2UqIGNvbnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIHJlc29sdmVVUkxJZk5l
ZWRlZChjb25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdm9pZCBhcHBl
bmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCos
IGNvbnN0IEF0dHJpYnV0ZSYpOwotICAgIHZvaWQgc2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNl
cyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25z
dCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgU3RyaW5nIHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50JiwgY29uc3QgU3RyaW5n
JikgY29uc3Q7CisgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIGNvbnN0IEF0dHJpYnV0ZSYpOworICAgIHZvaWQgc2Vy
aWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9T
a2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5h
bWU+KiB0YWdOYW1lc1RvU2tpcCk7CiAgICAgYm9vbCBpblhNTEZyYWdtZW50U2VyaWFsaXphdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTZXJpYWxpemF0aW9uID09IFhNTEZyYWdtZW50
U2VyaWFsaXphdGlvbjsgfQogICAgIHZvaWQgZ2VuZXJhdGVVbmlxdWVQcmVmaXgoUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IE5hbWVzcGFjZXMmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMzQgKzExNyw0OCBAQCBzdGF0aWMgdm9pZCBjb21w
bGV0ZVVSTHMoRG9jdW1lbnRGcmFnbWVuCiAgICAgICAgIGNoYW5nZXNbaV0uYXBwbHkoKTsKIH0K
ICAgICAKLWNsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIE1hcmt1cEFjY3Vt
dWxhdG9yIHsKK2NsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIEZJTkFMIDogcHVibGljIE1h
cmt1cEFjY3VtdWxhdG9yIHsKIHB1YmxpYzoKICAgICBlbnVtIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSB7IERvZXNGdWxseVNlbGVjdE5vZGUsIERvZXNOb3RGdWxseVNlbGVjdE5vZGUgfTsKIAogICAg
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVV
UkxzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgY29uc3QgUmFuZ2UqLCBOb2RlKiBoaWdoZXN0
Tm9kZVRvQmVTZXJpYWxpemVkID0gMCk7CisKICAgICBOb2RlKiBzZXJpYWxpemVOb2RlcyhOb2Rl
KiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3Ry
aW5nKHMpOyB9Ci0gICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSosIGJvb2wgY29udmVydEJsb2Nr
c1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxl
Y3ROb2RlKTsKLSAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqLCBE
b2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lkIHdyYXBXaXRoTm9kZShO
b2RlJiwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIFJhbmdlRnVsbHlTZWxl
Y3RzTm9kZSA9IERvZXNGdWxseVNlbGVjdE5vZGUpOworICAgIHZvaWQgd3JhcFdpdGhTdHlsZU5v
ZGUoU3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50JiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwog
ICAgIFN0cmluZyB0YWtlUmVzdWx0cygpOwogCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisKIHByaXZhdGU6Ci0gICAg
dm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5
U2V0KiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1l
bnQmLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHlsZU5vZGVD
bG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRl
eHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7Ci0gICAgU3RyaW5nIHJlbmRlcmVkVGV4dChj
b25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWVGb3JSYW5n
ZShjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1
bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBl
bGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KKworICAgIFN0cmluZyByZW5k
ZXJlZFRleHQoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlRm9yUmFuZ2UoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisKKyAgICB2b2lkIGFwcGVu
ZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiwgYm9vbCBhZGREaXNw
bGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0JikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKikgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGFwcGVu
ZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7CisgICAg
fQogCiAgICAgZW51bSBOb2RlVHJhdmVyc2FsTW9kZSB7IEVtaXRTdHJpbmcsIERvTm90RW1pdFN0
cmluZyB9OwogICAgIE5vZGUqIHRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0
YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZCwgTm9kZVRyYXZlcnNhbE1vZGUpOwogCi0gICAgYm9vbCBz
aG91bGRBbm5vdGF0ZSgpIHsgcmV0dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZTsgfQotICAgIGJvb2wgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKE5vZGUqIG5v
ZGUpIGNvbnN0CisgICAgYm9vbCBzaG91bGRBbm5vdGF0ZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9oaWdoZXN0Tm9kZVRvQmVTZXJpYWxpemVkICYmIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFs
aXplZC0+cGFyZW50Tm9kZSgpID09IG5vZGUtPnBhcmVudE5vZGUoKQotICAgICAgICAgICAgJiYg
bV93cmFwcGluZ1N0eWxlICYmIG1fd3JhcHBpbmdTdHlsZS0+c3R5bGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTsKKyAgICB9CisK
KyAgICBib29sIHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZShjb25zdCBOb2RlJiBub2RlKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFsaXplZCAmJiBt
X2hpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQtPnBhcmVudE5vZGUoKSA9PSBub2RlLnBhcmVudE5v
ZGUoKSAmJiBtX3dyYXBwaW5nU3R5bGUgJiYgbV93cmFwcGluZ1N0eWxlLT5zdHlsZSgpOwogICAg
IH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXA7CkBAIC0x
NjEsMjAgKzE3NSwyMCBAQCBpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1h
CiB7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZShOb2Rl
KiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3
cmFwV2l0aE5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewogICAgIFN0cmluZ0J1
aWxkZXIgbWFya3VwOwotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIGFw
cGVuZEVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQobm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSksIHJhbmdlRnVsbHlTZWxlY3Rz
Tm9kZSk7CisgICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBhcHBlbmRFbGVt
ZW50KG1hcmt1cCwgdG9FbGVtZW50KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlz
QmxvY2soJm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKICAgICAgICAg
YXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKICAgICBtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwLmFwcGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5v
ZGUpOwogICAgIGlmIChtX25vZGVzKQotICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7Cisg
ICAgICAgIG1fbm9kZXMtPmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1bWVudCYg
ZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAg
ICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1lbnQsIGlzQmxv
Y2spOwpAQCAtMTgyLDcgKzE5Niw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6Ondy
YXBXaXRoU3QKICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNCbG9jaykpOwog
fQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFn
KFN0cmluZ0J1aWxkZXImIG91dCwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBpc0Jsb2NrKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIFN0eWxlUHJvcGVydHlTZXQq
IHN0eWxlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICAvLyB3cmFw
cGluZ1N0eWxlRm9yU2VyaWFsaXphdGlvbiBzaG91bGQgaGF2ZSByZW1vdmVkIC13ZWJraXQtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICBBU1NFUlQocHJvcGVydHlNaXNzaW5nT3JFcXVh
bFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkp
OwpAQCAtMTkwLDcgKzIwNCw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0eWwKICAgICAgICAgb3V0LmFwcGVuZExpdGVyYWwoIjxkaXYgc3R5bGU9XCIiKTsKICAgICBl
bHNlCiAgICAgICAgIG91dC5hcHBlbmRMaXRlcmFsKCI8c3BhbiBzdHlsZT1cIiIpOwotICAgIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmFzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1M
RG9jdW1lbnQoKSk7CisgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+YXNUZXh0
KCksIGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpOwogICAgIG91dC5hcHBlbmRMaXRlcmFsKCJc
Ij4iKTsKIH0KIApAQCAtMjE1LDkgKzIyOSw5IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dGFrZVJlc3UKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZVdpdGhM
aXRlcmFsKCdcMCcsICIiKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCit2b2lkIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYg
dGV4dCkKIHsgICAgCi0gICAgY29uc3QgYm9vbCBwYXJlbnRJc1RleHRhcmVhID0gdGV4dC0+cGFy
ZW50RWxlbWVudCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LT5wYXJlbnRFbGVtZW50
KCkpOworICAgIGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IHRleHQucGFyZW50RWxlbWVu
dCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LnBhcmVudEVsZW1lbnQoKSk7CiAgICAg
Y29uc3QgYm9vbCB3cmFwcGluZ1NwYW4gPSBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUodGV4dCkg
JiYgIXBhcmVudElzVGV4dGFyZWE7CiAgICAgaWYgKHdyYXBwaW5nU3BhbikgewogICAgICAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB3cmFwcGluZ1N0eWxlID0gbV93cmFwcGluZ1N0eWxlLT5jb3B5
KCk7CkBAIC0yMjcsNjUgKzI0MSw2NSBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBpbmNsdWRlZCBpbiBm
b3JjZUlubGluZT8KICAgICAgICAgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlGbG9hdCwgQ1NTVmFsdWVOb25lKTsKIAotICAgICAgICBhcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKSwgJnRleHQtPmRvY3VtZW50KCkp
OworICAgICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5
bGUoKSwgdGV4dC5kb2N1bWVudCgpKTsKICAgICB9CiAKICAgICBpZiAoIXNob3VsZEFubm90YXRl
KCkgfHwgcGFyZW50SXNUZXh0YXJlYSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFRleHQob3V0LCB0ZXh0KTsKICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5k
ZXJlZFRleHQgPSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0
KSwgc2VsZWN0VGFnKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSAhZW5j
bG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb25zdF9jYXN0PFRleHQqPigm
dGV4dCkpLCBzZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVk
VGV4dCA/IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2Uo
dGV4dCwgbV9yYW5nZSk7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgICAgICBh
cHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVyLCBjb250ZW50LCAwLCBjb250
ZW50Lmxlbmd0aCgpLCBFbnRpdHlNYXNrSW5QQ0RBVEEpOwotICAgICAgICBvdXQuYXBwZW5kKGNv
bnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoYnVmZmVyLnRvU3RyaW5nKCksIHRleHQp
KTsKKyAgICAgICAgb3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0
KGJ1ZmZlci50b1N0cmluZygpLCAmdGV4dCkpOwogICAgIH0KIAogICAgIGlmICh3cmFwcGluZ1Nw
YW4pCiAgICAgICAgIG91dC5hcHBlbmQoc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CiB9CiAgICAgCi1T
dHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBu
b2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCitTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlJiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0g
ICAgaWYgKCFub2RlLT5pc1RleHROb2RlKCkpCisgICAgaWYgKCFub2RlLmlzVGV4dE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgY29uc3QgVGV4dCogdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obm9kZSk7CisgICAgY29uc3QgVGV4dCYgdGV4dE5vZGUg
PSB0b1RleHQobm9kZSk7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHVuc2ln
bmVkIGVuZE9mZnNldCA9IHRleHROb2RlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSB0ZXh0Tm9kZS5sZW5ndGgoKTsKIAotICAgIGlmIChyYW5nZSAmJiBub2RlID09IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpKQorICAgIGlmIChyYW5nZSAmJiAmbm9kZSA9PSByYW5nZS0+c3Rh
cnRDb250YWluZXIoKSkKICAgICAgICAgc3RhcnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQo
KTsKLSAgICBpZiAocmFuZ2UgJiYgbm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKCkpCisgICAg
aWYgKHJhbmdlICYmICZub2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAgICAgZW5k
T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwogCi0gICAgUG9zaXRpb24gc3RhcnQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zm
c2V0KTsKLSAgICBQb3NpdGlvbiBlbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29u
c3RfY2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7Ci0gICAgcmV0dXJuIHBsYWluVGV4dChS
YW5nZTo6Y3JlYXRlKCZub2RlLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKS5nZXQoKSk7CisgICAg
UG9zaXRpb24gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxO
b2RlKj4oJm5vZGUpLCBzdGFydE9mZnNldCk7CisgICAgUG9zaXRpb24gZW5kID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSwgZW5kT2Zmc2V0KTsK
KyAgICByZXR1cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUoJm5vZGUuZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCkuZ2V0KCkpOwogfQogCi1TdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnN0
cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQor
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0
IE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBub2RlLm5vZGVW
YWx1ZSgpOwogCi0gICAgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOwotICAgIGlmIChu
b2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKKyAgICBTdHJpbmcgc3RyID0gbm9kZS5ub2Rl
VmFsdWUoKTsKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQogICAgICAg
ICBzdHIudHJ1bmNhdGUocmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBpZiAobm9kZSA9PSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKSkKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkpCiAgICAgICAgIHN0ci5yZW1vdmUoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAg
IHJldHVybiBzdHI7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFkZERpc3Bs
YXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2
b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewotICAgIGNvbnN0IGJv
b2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCk7
CisgICAgY29uc3QgYm9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKIAotICAg
IGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSA/IGVsZW1l
bnQtPmF0dHJpYnV0ZUNvdW50KCkgOiAwOwotICAgIGNvbnN0IGJvb2wgc2hvdWxkQW5ub3RhdGVP
ckZvcmNlSW5saW5lID0gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0
ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOworICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVs
ZW1lbnQuaGFzQXR0cmlidXRlcygpID8gZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpIDogMDsKKyAg
ICBjb25zdCBib29sIHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSA9IGVsZW1lbnQuaXNIVE1M
RWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOwogICAg
IGNvbnN0IGJvb2wgc2hvdWxkT3ZlcnJpZGVTdHlsZUF0dHIgPSBzaG91bGRBbm5vdGF0ZU9yRm9y
Y2VJbmxpbmUgfHwgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQuYXR0cmlidXRlQXQoaSk7CiAgICAgICAgIC8v
IFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmlidXRlIHNlcGFyYXRlbHksIGJlbG93LgogICAg
ICAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzdHlsZUF0dHIgJiYgc2hvdWxkT3ZlcnJpZGVT
dHlsZUF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5NywxNyArMzExLDE3IEBAIHZv
aWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KIAogICAgICAgICBpZiAoc2hv
dWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZSA9IG1fd3JhcHBpbmdTdHlsZS0+Y29weSgpOwotICAgICAgICAgICAgbmV3SW5saW5lU3R5
bGUtPnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoZWxlbWVudCk7Ci0gICAg
ICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9m
Tm9kZShlbGVtZW50KTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0
aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSk7
CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhT
dHlsZU9mTm9kZShjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsK
IAotICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpKQotICAgICAgICAgICAgbmV3
SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxlKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihlbGVtZW50KS0+aW5saW5lU3R5bGUoKSk7CisgICAgICAgIGlmIChlbGVtZW50LmlzU3R5bGVk
RWxlbWVudCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5p
bmxpbmVTdHlsZSgpKQorICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0
eWxlKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5pbmxpbmVTdHls
ZSgpKTsKIAogICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5lKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkKLSAgICAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24odG9IVE1MRWxlbWVudChl
bGVtZW50KSk7CisgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm1lcmdlU3R5bGVGcm9t
UnVsZXNGb3JTZXJpYWxpemF0aW9uKHRvSFRNTEVsZW1lbnQoY29uc3RfY2FzdDxFbGVtZW50Kj4o
JmVsZW1lbnQpKSk7CiAKICAgICAgICAgICAgIGlmIChhZGREaXNwbGF5SW5saW5lKQogICAgICAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5mb3JjZUlubGluZSgpOwpAQCAtMzcxLDEyICszODUs
MTIgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gQWRkIHRoZSBub2RlIHRvIHRoZSBtYXJrdXAgaWYgd2Un
cmUgbm90IHNraXBwaW5nIHRoZSBkZXNjZW5kYW50cwogICAgICAgICAgICAgaWYgKHNob3VsZEVt
aXQpCi0gICAgICAgICAgICAgICAgYXBwZW5kU3RhcnRUYWcobik7CisgICAgICAgICAgICAgICAg
YXBwZW5kU3RhcnRUYWcoKm4pOwogCiAgICAgICAgICAgICAvLyBJZiBub2RlIGhhcyBubyBjaGls
ZHJlbiwgY2xvc2UgdGhlIHRhZyBub3cuCiAgICAgICAgICAgICBpZiAoIW4tPmNoaWxkTm9kZUNv
dW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRW1pdCkKLSAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kRW5kVGFnKG4pOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmRUYWco
Km4pOwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBuOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBvcGVuZWRUYWcgPSB0cnVlOwpAQCAtMzk0LDcgKzQwOCw3IEBA
IE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgLy8gTm90IGF0IHRoZSBlbmQgb2YgdGhlIHJh
bmdlLCBjbG9zZSBhbmNlc3RvcnMgdXAgdG8gc2libGluZyBvZiBuZXh0IG5vZGUuCiAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRh
ZyhhbmNlc3Rvcik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRhZygqYW5jZXN0b3Ip
OwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBhbmNlc3RvcjsKICAgICAgICAgICAgICAg
ICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgIH0KQEAgLTQxMCw3
ICs0MjQsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAg
ICAgICAgICAgICAgICAgIC8vIG9yIGIpIGFuY2VzdG9ycyB0aGF0IHdlIG5ldmVyIGVuY291bnRl
cmVkIGR1cmluZyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgc3RhcnRpbmcgYXQgc3RhcnROb2RlOgog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJl
bnQpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwV2l0aE5vZGUocGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBXaXRoTm9kZSgqcGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9
IHBhcmVudDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDQsMzUgKzU1
OCwzMyBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwCiAKIC8vIEZJ
WE1FOiBTaG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RB
bm5vdGF0ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBh
bmQgc3R5bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1h
cmt1cFN0cmluZygpCi1zdGF0aWMgU3RyaW5nIGNyZWF0ZU1hcmt1cEludGVybmFsKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgUmFuZ2UqIHJhbmdlLCBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdl
LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywKK3N0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJu
YWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFJhbmdlJiB1
cGRhdGVkUmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLAogICAgIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlIHNob3VsZEFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIEVBYnNv
bHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAg
ICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVCh1cGRhdGVkUmFuZ2UpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcsIChBU0NJ
SUxpdGVyYWwoIjxiciBjbGFzcz1cIiIgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUgIlwiPiIpKSk7
CiAKLSAgICBib29sIGNvbGxhcHNlZCA9IHVwZGF0ZWRSYW5nZS0+Y29sbGFwc2VkKEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgIGJvb2wgY29sbGFwc2VkID0gdXBkYXRlZFJhbmdlLmNvbGxhcHNl
ZChBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoY29sbGFwc2VkKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHVwZGF0ZWRSYW5n
ZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgTm9k
ZSogY29tbW9uQW5jZXN0b3IgPSB1cGRhdGVkUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
QVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBOb2RlKiBib2R5ID0gZW5jbG9zaW5nTm9kZVdpdGhU
YWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIGJvZHlUYWcpOwogICAgIE5v
ZGUqIGZ1bGx5U2VsZWN0ZWRSb290ID0gMDsKICAgICAvLyBGSVhNRTogRG8gdGhpcyBmb3IgYWxs
IGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90IGp1c3QgdGhlIGJvZHkuCi0gICAgaWYgKGJvZHkg
JiYgYXJlUmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRz
T2ZOb2RlKGJvZHkpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJhbmdlKSkKKyAgICBpZiAo
Ym9keSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgJnJhbmdlKSkKICAg
ICAgICAgZnVsbHlTZWxlY3RlZFJvb3QgPSBib2R5OwotICAgIE5vZGUqIHNwZWNpYWxDb21tb25B
bmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCh1cGRhdGVkUmFuZ2UsIHNob3Vs
ZEFubm90YXRlKTsKLSAgICBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcihub2Rl
cywgc2hvdWxkUmVzb2x2ZVVSTHMsIHNob3VsZEFubm90YXRlLCB1cGRhdGVkUmFuZ2UsIHNwZWNp
YWxDb21tb25BbmNlc3Rvcik7Ci0gICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS0+cGFz
dExhc3ROb2RlKCk7Ci0KLSAgICBOb2RlKiBzdGFydE5vZGUgPSB1cGRhdGVkUmFuZ2UtPmZpcnN0
Tm9kZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQodXBkYXRlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7CisgICAgTm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9y
VG9XcmFwTWFya3VwKCZ1cGRhdGVkUmFuZ2UsIHNob3VsZEFubm90YXRlKTsKKworICAgIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCBzaG91bGRSZXNvbHZlVVJMcywg
c2hvdWxkQW5ub3RhdGUsICZ1cGRhdGVkUmFuZ2UsIHNwZWNpYWxDb21tb25BbmNlc3Rvcik7Cisg
ICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS5wYXN0TGFzdE5vZGUoKTsKKworICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IHVwZGF0ZWRSYW5nZS5maXJzdE5vZGUoKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVN0YXJ0KHVwZGF0ZWRSYW5nZS5zdGFydFBvc2l0aW9uKCksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5n
ZS5lbmRQb3NpdGlvbigpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAoc2hvdWxkQW5u
b3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSAmJiBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5l
QWZ0ZXIodmlzaWJsZVN0YXJ0KSkgewogICAgICAgICBpZiAodmlzaWJsZVN0YXJ0ID09IHZpc2li
bGVFbmQucHJldmlvdXMoKSkKICAgICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVT
dHJpbmc7CkBAIC02MTEsNyArNjIzLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRl
cm5hbChEb2N1bQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTaW5j
ZSB0aGlzIG5vZGUgYW5kIGFsbCB0aGUgb3RoZXIgYW5jZXN0b3JzIGFyZSBub3QgaW4gdGhlIHNl
bGVjdGlvbiB3ZSB3YW50IHRvIHNldCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgdG8gRG9lc05vdEZ1
bGx5U2VsZWN0Tm9kZQogICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgc3R5bGVzIHRoYXQgYWZm
ZWN0IHRoZSBleHRlcmlvciBvZiB0aGUgbm9kZSBhcmUgbm90IGluY2x1ZGVkLgotICAgICAgICAg
ICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZShhbmNlc3RvciwgY29udmVydEJsb2Nrc1Rv
SW5saW5lcywgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OkRvZXNOb3RGdWxseVNlbGVjdE5vZGUp
OworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZSgqYW5jZXN0b3IsIGNv
bnZlcnRCbG9ja3NUb0lubGluZXMsIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpEb2VzTm90RnVs
bHlTZWxlY3ROb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlcykKICAg
ICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGFuY2VzdG9yKTsKQEAgLTYzMCwxMyArNjQyLDEw
IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJuYWwoRG9jdW0KICAgICByZXR1cm4g
YWNjdW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25z
dCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSBzaG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1
dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5n
ZSYgcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBz
aG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKTsKLSAgICBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdlID0gcmFuZ2U7CisgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpOworICAgIGNvbnN0IFJhbmdl
KiB1cGRhdGVkUmFuZ2UgPSAmcmFuZ2U7CiAKICNpZiBFTkFCTEUoREVMRVRJT05fVUkpCiAgICAg
Ly8gRGlzYWJsZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2Vy
aWFsaXplZCBpbnRvIHRoZSBtYXJrdXAsCkBAIC02NDYsMTI2ICs2NTUsNDMgQEAgU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogCiAgICAgUmVmUHRyPFJhbmdlPiB1cGRh
dGVkUmFuZ2VSZWY7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHVwZGF0ZWRSYW5nZVJlZiA9
IGZyYW1lLT5lZGl0b3IoKS5hdm9pZEludGVyc2VjdGlvbldpdGhEZWxldGVCdXR0b25Db250cm9s
bGVyKHJhbmdlKTsKKyAgICAgICAgdXBkYXRlZFJhbmdlUmVmID0gZnJhbWUtPmVkaXRvcigpLmF2
b2lkSW50ZXJzZWN0aW9uV2l0aERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoJnJhbmdlKTsKICAgICAg
ICAgdXBkYXRlZFJhbmdlID0gdXBkYXRlZFJhbmdlUmVmLmdldCgpOwogICAgICAgICBpZiAoIXVw
ZGF0ZWRSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KICNl
bmRpZgogCi0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFsKCZkb2N1bWVudCwgcmFuZ2Us
IHVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFs
KGRvY3VtZW50LCByYW5nZSwgKnVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBj
b252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CiB9CiAKLVBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFy
c2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQorUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBQYXJzZXJDb250ZW50
UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3kpCiB7CiAgICAgLy8gV2UgdXNlIGEgZmFrZSBib2R5
IGVsZW1lbnQgaGVyZSB0byB0cmljayB0aGUgSFRNTCBwYXJzZXIgdG8gdXNpbmcgdGhlIEluQm9k
eSBpbnNlcnRpb24gbW9kZS4KLSAgICBSZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBmYWtlQm9keSA9
IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7
CisgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKIAogICAgIGZyYWdtZW50LT5w
YXJzZUhUTUwobWFya3VwLCBmYWtlQm9keS5nZXQoKSwgcGFyc2VyQ29udGVudFBvbGljeSk7CiAK
LSAgICBpZiAoIWJhc2VVUkwuaXNFbXB0eSgpICYmIGJhc2VVUkwgIT0gYmxhbmtVUkwoKSAmJiBi
YXNlVVJMICE9IGRvY3VtZW50LT5iYXNlVVJMKCkpCisgICAgaWYgKCFiYXNlVVJMLmlzRW1wdHko
KSAmJiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC5iYXNlVVJM
KCkpCiAgICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7CiAKICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBmcmFn
bWVudE1hcmtlclRhZ1tdID0gIndlYmtpdC1mcmFnbWVudC1tYXJrZXIiOwotCi1zdGF0aWMgYm9v
bCBmaW5kTm9kZXNTdXJyb3VuZGluZ0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBSZWZQdHI8
Tm9kZT4mIG5vZGVCZWZvcmVDb250ZXh0LCBSZWZQdHI8Tm9kZT4mIG5vZGVBZnRlckNvbnRleHQp
Ci17Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFICYmIHN0YXRpY19jYXN0PENoYXJhY3RlckRh
dGEqPihub2RlKS0+ZGF0YSgpID09IGZyYWdtZW50TWFya2VyVGFnKSB7Ci0gICAgICAgICAgICBp
ZiAoIW5vZGVCZWZvcmVDb250ZXh0KQotICAgICAgICAgICAgICAgIG5vZGVCZWZvcmVDb250ZXh0
ID0gbm9kZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5vZGVBZnRlckNv
bnRleHQgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQg
dHJpbUZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBOb2RlKiBub2RlQmVmb3Jl
Q29udGV4dCwgTm9kZSogbm9kZUFmdGVyQ29udGV4dCkKLXsKLSAgICBSZWZQdHI8Tm9kZT4gbmV4
dDsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0LT5pc0Rl
c2NlbmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5n
ZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMobm9kZUFmdGVyQ29udGV4dCkp
OwotICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIEFT
U0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBpZiAobm9kZUJlZm9yZUNvbnRleHQgPT0gbm9k
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChub2RlQWZ0ZXJDb250
ZXh0LT5wYXJlbnROb2RlKCkpOwotICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBub2RlQWZ0
ZXJDb250ZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7Ci0gICAgICAgIG5vZGUtPnBh
cmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBt
YXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLAotICAg
IGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50
UG9saWN5KQotewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGUgbWFya3VwIGFscmVhZHkgY29udGFpbnMgdGhlc2UgbWFya2Vycy4KLQotICAgIFN0cmluZ0J1
aWxkZXIgdGFnZ2VkTWFya3VwOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLmxlZnQo
ZnJhZ21lbnRTdGFydCkpOwotICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KHRh
Z2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQo
bWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdtZW50U3Rh
cnQpKTsKLSAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAs
IGZyYWdtZW50TWFya2VyVGFnKTsKLSAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJz
dHJpbmcoZnJhZ21lbnRFbmQpKTsKLQotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0YWdn
ZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdGFnZ2VkTWFy
a3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwotICAgIFJlZlB0
cjxEb2N1bWVudD4gdGFnZ2VkRG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIFVSTCgpKTsK
LSAgICB0YWdnZWREb2N1bWVudC0+dGFrZUFsbENoaWxkcmVuRnJvbSh0YWdnZWRGcmFnbWVudC5n
ZXQoKSk7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbm9kZUJlZm9yZUNvbnRleHQ7Ci0gICAgUmVmUHRy
PE5vZGU+IG5vZGVBZnRlckNvbnRleHQ7Ci0gICAgaWYgKCFmaW5kTm9kZXNTdXJyb3VuZGluZ0Nv
bnRleHQodGFnZ2VkRG9jdW1lbnQuZ2V0KCksIG5vZGVCZWZvcmVDb250ZXh0LCBub2RlQWZ0ZXJD
b250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQoKSwKLSAgICAgICAgcG9zaXRpb25BZnRl
ck5vZGUobm9kZUJlZm9yZUNvbnRleHQuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
LAotICAgICAgICBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyQ29udGV4dC5nZXQoKSkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBy
YW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAg
Tm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFu
ZEFwcGVhcmFuY2VXaXRoTm9SZW5kZXJlcihjb21tb25BbmNlc3Rvcik7Ci0KLSAgICAvLyBXaGVu
IHRoZXJlJ3MgYSBzcGVjaWFsIGNvbW1vbiBhbmNlc3RvciBvdXRzaWRlIG9mIHRoZSBmcmFnbWVu
dCwgd2UgbXVzdCBpbmNsdWRlIGl0IGFzIHdlbGwgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0aGUgc3Ry
dWN0dXJlIGFuZCBhcHBlYXJhbmNlIG9mIHRoZSBmcmFnbWVudC4gRm9yIGV4YW1wbGUsIGlmIHRo
ZSBmcmFnbWVudCBjb250YWlucwotICAgIC8vIFRELCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGVu
Y2xvc2luZyBUQUJMRSB0YWcgYXMgd2VsbC4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKLSAgICBpZiAo
c3BlY2lhbENvbW1vbkFuY2VzdG9yKQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoc3Bl
Y2lhbENvbW1vbkFuY2VzdG9yLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBlbHNlCi0gICAg
ICAgIGZyYWdtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRvQ29udGFpbmVyTm9kZShjb21tb25B
bmNlc3RvcikpOwotCi0gICAgdHJpbUZyYWdtZW50KGZyYWdtZW50LmdldCgpLCBub2RlQmVmb3Jl
Q29udGV4dC5nZXQoKSwgbm9kZUFmdGVyQ29udGV4dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gZnJh
Z21lbnQ7Ci19Ci0KLVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxk
cmVuT25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lw
LCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKK1N0cmluZyBj
cmVhdGVNYXJrdXAoY29uc3QgTm9kZSYgbm9kZSwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHks
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwLCBFRnJhZ21lbnRTZXJpYWxpemF0
aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKIHsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgSFRNTEVsZW1lbnQqIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSAwOwogI2lmIEVOQUJMRShERUxFVElPTl9VSSkKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLmNv
bnRhaW5lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFudE9mKGRlbGV0
ZUJ1dHRvbkNvbnRhaW5lckVsZW1lbnQpKQorICAgICAgICBpZiAobm9kZS5pc0Rlc2NlbmRhbnRP
ZihkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogICAgIH0KICNlbmRpZgorCiAgICAgTWFya3VwQWNjdW11bGF0b3IgYWNjdW11
bGF0b3Iobm9kZXMsIHNob3VsZFJlc29sdmVVUkxzLCAwLCBmcmFnbWVudFNlcmlhbGl6YXRpb24p
OwotICAgIHJldHVybiBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhjb25zdF9jYXN0PE5vZGUq
Pihub2RlKSwgZGVsZXRlQnV0dG9uQ29udGFpbmVyRWxlbWVudCwgY2hpbGRyZW5Pbmx5LCB0YWdO
YW1lc1RvU2tpcCk7CisgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGNvbnN0
X2Nhc3Q8Tm9kZSY+KG5vZGUpLCBkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50LCBjaGlsZHJl
bk9ubHksIHRhZ05hbWVzVG9Ta2lwKTsKIH0KIAogc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZy
b21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBoLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
QEAgLTg5Niw1NCArODIyLDI5IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ20KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgVmVjdG9yPE5vZGUqPiYgbm9kZXMpCi17Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSNpZiBFTkFCTEUoREVMRVRJT05fVUkpCi0gICAgLy8gZGlzYWJs
ZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2VyaWFsaXplZCBp
bnRvIHRoZSBtYXJrdXAKLSAgICBEZWxldGVCdXR0b25Db250cm9sbGVyRGlzYWJsZVNjb3BlKGRv
Y3VtZW50LT5mcmFtZSgpKTsKLSNlbmRpZgotCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIHNp
emVfdCBzaXplID0gbm9kZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlRGVmYXVs
dFBhcmFncmFwaEVsZW1lbnQoKmRvY3VtZW50KTsKLSAgICAgICAgZWxlbWVudC0+YXBwZW5kQ2hp
bGQobm9kZXNbaV0sIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoZWxlbWVudC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIH0K
LQotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KIFN0cmluZyBkb2N1bWVudFR5
cGVTdHJpbmcoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHJldHVybiBjcmVhdGVN
YXJrdXAoZG9jdW1lbnQuZG9jdHlwZSgpKTsKKyAgICBEb2N1bWVudFR5cGUqIGRvY3VtZW50VHlw
ZSA9IGRvY3VtZW50LmRvY3R5cGUoKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZSkKKyAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqZG9jdW1lbnRU
eXBlKTsKIH0KIAotU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSogbm9kZSkKK1N0
cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZXZl
ciAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8KICAgICBTdHJpbmcgbWFya3VwU3Ry
aW5nID0gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1ZGVOb2RlLCAwKTsKIAotICAgIE5vZGU6Ok5v
ZGVUeXBlIG5vZGVUeXBlID0gbm9kZS0+bm9kZVR5cGUoKTsKKyAgICBOb2RlOjpOb2RlVHlwZSBu
b2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKICAgICBpZiAobm9kZVR5cGUgIT0gTm9kZTo6RE9D
VU1FTlRfTk9ERSAmJiBub2RlVHlwZSAhPSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpCi0gICAg
ICAgIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhub2RlLT5kb2N1bWVudCgpKSAr
IG1hcmt1cFN0cmluZzsKKyAgICAgICAgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5n
KG5vZGUuZG9jdW1lbnQoKSkgKyBtYXJrdXBTdHJpbmc7CiAKICAgICByZXR1cm4gbWFya3VwU3Ry
aW5nOwogfQogCi1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UpCitT
dHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTm9kZSogbm9kZSA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUqIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDcgQEAgZW51bSBF
QWJzb2x1dGVVUkxzIHsgRG9Ob3RSZXNvbHZlVVJMcywgUgogZW51bSBFRnJhZ21lbnRTZXJpYWxp
emF0aW9uIHsgSFRNTEZyYWdtZW50U2VyaWFsaXphdGlvbiwgWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uIH07CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGlj
eSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5k
LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kpOwotUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNv
bnN0IFZlY3RvcjxOb2RlKj4mKTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29u
dGVudCk7CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5u
ZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ks
IEV4Y2VwdGlvbkNvZGUmKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpOwogUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgSFRNTEVs
ZW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5LCBFeGNlcHRpb25Db2RlJik7CkBAIC02NCwxMSAr
NjIsMTEgQEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKik7CiB2b2lkIHJlcGxhY2VDaGls
ZHJlbldpdGhGcmFnbWVudChDb250YWluZXJOb2RlJiwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiwgRXhjZXB0aW9uQ29kZSYpOwogdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChDb250
YWluZXJOb2RlJiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi1TdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmdlKiwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSA9IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgYm9vbCBjb252ZXJ0Qmxv
Y2tzVG9JbmxpbmVzID0gZmFsc2UsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzKTsK
LVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRl
Tm9kZSwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQWJzb2x1dGVVUkxzID0gRG9Ob3RSZXNvbHZlVVJM
cywgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCA9IDAsIEVGcmFnbWVudFNl
cmlhbGl6YXRpb24gPSBIVE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKTsKK1N0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZ2UmLCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlID0gRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBib29sIGNvbnZlcnRCbG9ja3NU
b0lubGluZXMgPSBmYWxzZSwgRUFic29sdXRlVVJMcyA9IERvTm90UmVzb2x2ZVVSTHMpOworU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlJiwgRUNoaWxkcmVuT25seSA9IEluY2x1ZGVOb2Rl
LCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwID0gMCwgRUZyYWdtZW50U2VyaWFs
aXphdGlvbiA9IEhUTUxGcmFnbWVudFNlcmlhbGl6YXRpb24pOwogCi1TdHJpbmcgY3JlYXRlRnVs
bE1hcmt1cChjb25zdCBOb2RlKik7Ci1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5n
ZSopOworU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSYpOworU3RyaW5nIGNyZWF0
ZUZ1bGxNYXJrdXAoY29uc3QgUmFuZ2UmKTsKIAogU3RyaW5nIHVybFRvTWFya3VwKGNvbnN0IFVS
TCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCBi
b29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyCiAgICAgICAgICAgICBsb2Fk
ZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoYXJjaGl2ZS5nZXQoKSk7CiAKICAgICAgICAgU3Ry
aW5nIG1hcmt1cFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobWFpblJlc291cmNlLT5kYXRhKCkt
PmRhdGEoKSwgbWFpblJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7Ci0gICAgICAgIGFkZEZyYWdt
ZW50KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJp
bmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVu
dCkpOworICAgICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1l
LmRvY3VtZW50KCksIG1hcmt1cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dT
Y3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24g
MTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjIsNyArNDYyLDcgQEAgYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFk
ZXI6OnJlYWRXZWJBcgogICAgICAgICAgICAgbG9hZGVyLT5hZGRBbGxBcmNoaXZlUmVzb3VyY2Vz
KGFyY2hpdmUuZ2V0KCkpOwogCiAgICAgICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpOwotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERp
c2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CisgICAgICAgIGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1h
aW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTE0LDcgKzUxNCw3IEBAIGJvb2wgRWRp
dG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRNTCgKICAgICBpZiAoc3RyaW5nT21pdHRpbmdN
aWNyb3NvZnRQcmVmaXguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBzdHJp
bmdPbWl0dGluZ01pY3Jvc29mdFByZWZpeCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRp
bmdBbmRQbHVnaW5Db250ZW50KTsKKyAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgc3RyaW5nT21pdHRpbmdNaWNyb3NvZnRQcmVmaXgsIGVt
cHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAgICAgcmV0
dXJuIGZyYWdtZW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0NSwxMiArMzQ1LDEyIEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFEKIAogU3RyaW5nIEhUTUxFbGVtZW50Ojppbm5lckhUTUwoKSBj
b25zdAogewotICAgIHJldHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAg
ICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiBTdHJpbmcg
SFRNTEVsZW1lbnQ6Om91dGVySFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1
cCh0aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1M
RWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJ
KHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEyICs3NywyNyBAQCBpbmxpbmUgSFRNTEZy
YW1lT3duZXJFbGVtZW50JiB0b0ZyYW1lT3duCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
cmFtZU93bmVyRWxlbWVudCY+KG5vZGUpOwogfQogCitpbmxpbmUgY29uc3QgSFRNTEZyYW1lT3du
ZXJFbGVtZW50JiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0ZyYW1lT3duZXJFbGVtZW50
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQm
Pihub2RlKTsKK30KKwogaW5saW5lIEhUTUxGcmFtZU93bmVyRWxlbWVudCogdG9GcmFtZU93bmVy
RWxlbWVudChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFub2RlIHx8IG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOwogfQogCitpbmxpbmUgY29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50KiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQmKTsKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKKwogY2xhc3MgU3ViZnJhbWVM
b2FkaW5nRGlzYWJsZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN1YmZyYW1lTG9hZGluZ0Rp
c2FibGVyKENvbnRhaW5lck5vZGUmIHJvb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvRE9NRWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NRWRpdG9yLmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0RPTUVkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMCArMjA2LDEwIEBAIHBy
aXZhdGU6CiBjbGFzcyBET01FZGl0b3I6OlNldE91dGVySFRNTEFjdGlvbiA6IHB1YmxpYyBJbnNw
ZWN0b3JIaXN0b3J5OjpBY3Rpb24gewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNldE91dGVy
SFRNTEFjdGlvbik7CiBwdWJsaWM6Ci0gICAgU2V0T3V0ZXJIVE1MQWN0aW9uKE5vZGUqIG5vZGUs
IGNvbnN0IFN0cmluZyYgaHRtbCkKKyAgICBTZXRPdXRlckhUTUxBY3Rpb24oTm9kZSYgbm9kZSwg
Y29uc3QgU3RyaW5nJiBodG1sKQogICAgICAgICA6IEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbigi
U2V0T3V0ZXJIVE1MIikKICAgICAgICAgLCBtX25vZGUobm9kZSkKLSAgICAgICAgLCBtX25leHRT
aWJsaW5nKG5vZGUtPm5leHRTaWJsaW5nKCkpCisgICAgICAgICwgbV9uZXh0U2libGluZyhub2Rl
Lm5leHRTaWJsaW5nKCkpCiAgICAgICAgICwgbV9odG1sKGh0bWwpCiAgICAgICAgICwgbV9uZXdO
b2RlKDApCiAgICAgICAgICwgbV9oaXN0b3J5KGFkb3B0UHRyKG5ldyBJbnNwZWN0b3JIaXN0b3J5
KCkpKQpAQCAtMjQxLDcgKzI0MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
UmVmUHRyPE5vZGU+IG1fbm9kZTsKKyAgICBSZWY8Tm9kZT4gbV9ub2RlOwogICAgIFJlZlB0cjxO
b2RlPiBtX25leHRTaWJsaW5nOwogICAgIFN0cmluZyBtX2h0bWw7CiAgICAgU3RyaW5nIG1fb2xk
SFRNTDsKQEAgLTM3NCw3ICszNzQsNyBAQCBib29sIERPTUVkaXRvcjo6cmVtb3ZlQXR0cmlidXRl
KEVsZW1lbnQqCiAgICAgcmV0dXJuIG1faGlzdG9yeS0+cGVyZm9ybShhZG9wdFB0cihuZXcgUmVt
b3ZlQXR0cmlidXRlQWN0aW9uKGVsZW1lbnQsIG5hbWUpKSwgZWMpOwogfQogCi1ib29sIERPTUVk
aXRvcjo6c2V0T3V0ZXJIVE1MKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoq
IG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorYm9vbCBET01FZGl0b3I6OnNldE91dGVySFRN
TChOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5vZGUqKiBuZXdOb2RlLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBPd25QdHI8U2V0T3V0ZXJIVE1MQWN0aW9uPiBhY3Rpb24gPSBh
ZG9wdFB0cihuZXcgU2V0T3V0ZXJIVE1MQWN0aW9uKG5vZGUsIGh0bWwpKTsKICAgICBTZXRPdXRl
ckhUTUxBY3Rpb24qIHJhd0FjdGlvbiA9IGFjdGlvbi5nZXQoKTsKQEAgLTQzOSw3ICs0MzksNyBA
QCBib29sIERPTUVkaXRvcjo6cmVtb3ZlQXR0cmlidXRlKEVsZW1lbnQqCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotYm9vbCBET01FZGl0b3I6OnNldE91dGVySFRNTChOb2RlKiBub2RlLCBjb25z
dCBTdHJpbmcmIGh0bWwsIE5vZGUqKiBuZXdOb2RlLCBFcnJvclN0cmluZyogZXJyb3JTdHJpbmcp
Citib29sIERPTUVkaXRvcjo6c2V0T3V0ZXJIVE1MKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYg
aHRtbCwgTm9kZSoqIG5ld05vZGUsIEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKIHsKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBib29sIHJlc3VsdCA9IHNldE91dGVySFRNTChub2Rl
LCBodG1sLCBuZXdOb2RlLCBlYyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9N
RWRpdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRv
ci5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRp
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIGJvb2wg
cmVtb3ZlQ2hpbGQoTm9kZSogcGFyZW50Tm9kZSwgTm9kZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAg
ICBib29sIHNldEF0dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCByZW1vdmVBdHRyaWJ1dGUo
RWxlbWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wg
c2V0T3V0ZXJIVE1MKE5vZGUqLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5vZGUqKiBuZXdOb2RlLCBF
eGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBzZXRPdXRlckhUTUwoTm9kZSYsIGNvbnN0IFN0cmlu
ZyYgaHRtbCwgTm9kZSoqIG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHJlcGxh
Y2VXaG9sZVRleHQoVGV4dCosIGNvbnN0IFN0cmluZyYgdGV4dCwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIGJvb2wgcmVwbGFjZUNoaWxkKE5vZGUqIHBhcmVudE5vZGUsIFBhc3NSZWZQdHI8Tm9kZT4g
bmV3Tm9kZSwgTm9kZSogb2xkTm9kZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgc2V0Tm9k
ZVZhbHVlKE5vZGUqIHBhcmVudE5vZGUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIGJvb2wgcmVtb3ZlQ2hpbGQoTm9k
ZSogcGFyZW50Tm9kZSwgTm9kZSosIEVycm9yU3RyaW5nKik7CiAgICAgYm9vbCBzZXRBdHRyaWJ1
dGUoRWxlbWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXJy
b3JTdHJpbmcqKTsKICAgICBib29sIHJlbW92ZUF0dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgU3Ry
aW5nJiBuYW1lLCBFcnJvclN0cmluZyopOwotICAgIGJvb2wgc2V0T3V0ZXJIVE1MKE5vZGUqLCBj
b25zdCBTdHJpbmcmIGh0bWwsIE5vZGUqKiBuZXdOb2RlLCBFcnJvclN0cmluZyopOworICAgIGJv
b2wgc2V0T3V0ZXJIVE1MKE5vZGUmLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5vZGUqKiBuZXdOb2Rl
LCBFcnJvclN0cmluZyopOwogICAgIGJvb2wgcmVwbGFjZVdob2xlVGV4dChUZXh0KiwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBFcnJvclN0cmluZyopOwogCiBwcml2YXRlOgpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJKHJldmlzaW9uIDE1Njk4MCkK
KysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTksMzIgKzExOSwzMiBAQCB2b2lkIERPTVBhdGNoU3VwcG9ydDo6cGF0Y2hE
b2N1bWVudChjb25zCiAgICAgfQogfQogCi1Ob2RlKiBET01QYXRjaFN1cHBvcnQ6OnBhdGNoTm9k
ZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCitO
b2RlKiBET01QYXRjaFN1cHBvcnQ6OnBhdGNoTm9kZShOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcm
IG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gRG9uJ3QgcGFyc2UgPGh0bWw+
IGFzIGEgZnJhZ21lbnQuCi0gICAgaWYgKG5vZGUtPmlzRG9jdW1lbnROb2RlKCkgfHwgKG5vZGUt
PnBhcmVudE5vZGUoKSAmJiBub2RlLT5wYXJlbnROb2RlKCktPmlzRG9jdW1lbnROb2RlKCkpKSB7
CisgICAgaWYgKG5vZGUuaXNEb2N1bWVudE5vZGUoKSB8fCAobm9kZS5wYXJlbnROb2RlKCkgJiYg
bm9kZS5wYXJlbnROb2RlKCktPmlzRG9jdW1lbnROb2RlKCkpKSB7CiAgICAgICAgIHBhdGNoRG9j
dW1lbnQobWFya3VwKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgTm9kZSogcHJl
dmlvdXNTaWJsaW5nID0gbm9kZS0+cHJldmlvdXNTaWJsaW5nKCk7CisgICAgTm9kZSogcHJldmlv
dXNTaWJsaW5nID0gbm9kZS5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIHNob3VsZCB1c2Ugb25lIG9mIGNyZWF0ZUZyYWdtZW50KiBpbiBtYXJrdXAuaAogICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0
ZSgqbV9kb2N1bWVudCk7CiAgICAgaWYgKG1fZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCi0g
ICAgICAgIGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCBub2RlLT5wYXJlbnRFbGVtZW50KCkg
PyBub2RlLT5wYXJlbnRFbGVtZW50KCkgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSk7
CisgICAgICAgIGZyYWdtZW50LT5wYXJzZUhUTUwobWFya3VwLCBub2RlLnBhcmVudEVsZW1lbnQo
KSA/IG5vZGUucGFyZW50RWxlbWVudCgpIDogbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkp
OwogICAgIGVsc2UKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgbm9kZS0+cGFy
ZW50RWxlbWVudCgpID8gbm9kZS0+cGFyZW50RWxlbWVudCgpIDogbV9kb2N1bWVudC0+ZG9jdW1l
bnRFbGVtZW50KCkpOworICAgICAgICBmcmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCBub2RlLnBh
cmVudEVsZW1lbnQoKSA/IG5vZGUucGFyZW50RWxlbWVudCgpIDogbV9kb2N1bWVudC0+ZG9jdW1l
bnRFbGVtZW50KCkpOwogCiAgICAgLy8gQ29tcG9zZSB0aGUgb2xkIGxpc3QuCi0gICAgQ29udGFp
bmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKTsKLSAgICBWZWN0b3I8T3du
UHRyPERpZ2VzdD4gPiBvbGRMaXN0OworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE5vZGUgPSBu
b2RlLnBhcmVudE5vZGUoKTsKKyAgICBWZWN0b3I8T3duUHRyPERpZ2VzdD4+IG9sZExpc3Q7CiAg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIG9sZExpc3QuYXBwZW5kKGNyZWF0
ZURpZ2VzdChjaGlsZCwgMCkpOwogCiAgICAgLy8gQ29tcG9zZSB0aGUgbmV3IGxpc3QuCiAgICAg
U3RyaW5nIG1hcmt1cENvcHkgPSBtYXJrdXAubG93ZXIoKTsKICAgICBWZWN0b3I8T3duUHRyPERp
Z2VzdD4gPiBuZXdMaXN0OwotICAgIGZvciAoTm9kZSogY2hpbGQgPSBwYXJlbnROb2RlLT5maXJz
dENoaWxkKCk7IGNoaWxkICE9IG5vZGU7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0g
Jm5vZGU7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIG5ld0xpc3QuYXBw
ZW5kKGNyZWF0ZURpZ2VzdChjaGlsZCwgMCkpOwogICAgIGZvciAoTm9kZSogY2hpbGQgPSBmcmFn
bWVudC0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkg
ewogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoaGVhZFRhZykgJiYgIWNoaWxkLT5maXJz
dENoaWxkKCkgJiYgbWFya3VwQ29weS5maW5kKCI8L2hlYWQ+IikgPT0gbm90Rm91bmQpCkBAIC0x
NTMsMTMgKzE1MywxMyBAQCBOb2RlKiBET01QYXRjaFN1cHBvcnQ6OnBhdGNoTm9kZShOb2RlKiBu
CiAgICAgICAgICAgICBjb250aW51ZTsgLy8gSFRNTDUgcGFyc2VyIGluc2VydHMgZW1wdHkgPGJv
ZHk+IHRhZyB3aGVuZXZlciBpdCBwYXJzZXMgPC9oZWFkPgogICAgICAgICBuZXdMaXN0LmFwcGVu
ZChjcmVhdGVEaWdlc3QoY2hpbGQsICZtX3VudXNlZE5vZGVzTWFwKSk7CiAgICAgfQotICAgIGZv
ciAoTm9kZSogY2hpbGQgPSBub2RlLT5uZXh0U2libGluZygpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gbm9kZS5uZXh0U2libGlu
ZygpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbmV3TGlz
dC5hcHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAwKSk7CiAKICAgICBpZiAoIWlubmVyUGF0Y2hD
aGlsZHJlbihwYXJlbnROb2RlLCBvbGRMaXN0LCBuZXdMaXN0LCBlYykpIHsKICAgICAgICAgLy8g
RmFsbCBiYWNrIHRvIHRvdGFsIHJlcGxhY2UuCiAgICAgICAgIGVjID0gMDsKLSAgICAgICAgaWYg
KCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKHBhcmVudE5vZGUsIGZyYWdtZW50LnJlbGVhc2Uo
KSwgbm9kZSwgZWMpKQorICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZXBsYWNlQ2hpbGQocGFy
ZW50Tm9kZSwgZnJhZ21lbnQucmVsZWFzZSgpLCAmbm9kZSwgZWMpKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogICAgIHJldHVybiBwcmV2aW91c1NpYmxpbmcgPyBwcmV2aW91c1NpYmxp
bmctPm5leHRTaWJsaW5nKCkgOiBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oCShyZXZpc2lvbiAxNTY5Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfkRPTVBhdGNoU3Vw
cG9ydCgpOwogCiAgICAgdm9pZCBwYXRjaERvY3VtZW50KGNvbnN0IFN0cmluZyYgbWFya3VwKTsK
LSAgICBOb2RlKiBwYXRjaE5vZGUoTm9kZSosIGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRp
b25Db2RlJik7CisgICAgTm9kZSogcGF0Y2hOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmt1
cCwgRXhjZXB0aW9uQ29kZSYpOwogCiBwcml2YXRlOgogICAgIHN0cnVjdCBEaWdlc3Q7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAJKHJl
dmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2OCw3ICs3NjgsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRPdXRlckhUTUwoRXJyCiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm47CiAKLSAgICAqb3V0ZXJIVE1MID0gY3JlYXRlTWFya3VwKG5vZGUpOworICAgICpvdXRlckhU
TUwgPSBjcmVhdGVNYXJrdXAoKm5vZGUpOwogfQogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRPdXRlckhUTUwoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBpbnQgbm9kZUlkLCBjb25zdCBT
dHJpbmcmIG91dGVySFRNTCkKQEAgLTc5NCw3ICs3OTQsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZXRPdXRlckhUTUwoRXJyCiAgICAgfQogCiAgICAgTm9kZSogbmV3Tm9kZSA9IDA7Ci0g
ICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0T3V0ZXJIVE1MKG5vZGUsIG91dGVySFRNTCwgJm5ld05v
ZGUsIGVycm9yU3RyaW5nKSkKKyAgICBpZiAoIW1fZG9tRWRpdG9yLT5zZXRPdXRlckhUTUwoKm5v
ZGUsIG91dGVySFRNTCwgJm5ld05vZGUsIGVycm9yU3RyaW5nKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgaWYgKCFuZXdOb2RlKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2
ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAkocmV2aXNpb24gMTU2OTc3KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0MSw3ICs0NDEsNyBAQCBQYXNzUmVmUHRyPExlZ2FjeVdlYkFy
Y2hpdmU+IExlZ2FjeVdlYkFyCiAgICAgfQogICAgICAgICAKICAgICBWZWN0b3I8Tm9kZSo+IG5v
ZGVMaXN0OwotICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAobm9kZSwgSW5j
bHVkZU5vZGUsICZub2RlTGlzdCwgRG9Ob3RSZXNvbHZlVVJMcywgdGFnTmFtZXNUb0ZpbHRlci5n
ZXQoKSk7CisgICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGNyZWF0ZU1hcmt1cCgqbm9kZSwgSW5j
bHVkZU5vZGUsICZub2RlTGlzdCwgRG9Ob3RSZXNvbHZlVVJMcywgdGFnTmFtZXNUb0ZpbHRlci5n
ZXQoKSk7CiAgICAgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUgPSBub2RlLT5ub2RlVHlwZSgpOwog
ICAgIGlmIChub2RlVHlwZSAhPSBOb2RlOjpET0NVTUVOVF9OT0RFICYmIG5vZGVUeXBlICE9IE5v
ZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSkKICAgICAgICAgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRU
eXBlU3RyaW5nKG5vZGUtPmRvY3VtZW50KCkpICsgbWFya3VwU3RyaW5nOwpAQCAtNDc2LDIyICs0
NzYsMjEgQEAgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcgogUGFzc1Jl
ZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUoUmFuZ2UqIHJh
bmdlKQogewogICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKICAgICAKICAgICBOb2RlKiBzdGFydENvbnRhaW5lciA9IHJhbmdlLT5zdGFy
dENvbnRhaW5lcigpOwogICAgIGlmICghc3RhcnRDb250YWluZXIpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgCiAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gc3RhcnRDb250YWluZXItPmRvY3VtZW50KCk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAwOwotICAg
IAotICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
ICAgIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFsd2F5cyAiZm9yIGludGVyY2hhbmdlIi4gSXMg
dGhhdCByaWdodD8gU2VlIHRoZSBwcmV2aW91cyBtZXRob2QuCi0gICAgU3RyaW5nIG1hcmt1cFN0
cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhkb2N1bWVudCkgKyBjcmVhdGVNYXJrdXAocmFuZ2Us
ICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CisgICAgVmVjdG9yPE5vZGUqPiBu
b2RlTGlzdDsKKyAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKGRv
Y3VtZW50KSArIGNyZWF0ZU1hcmt1cCgqcmFuZ2UsICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRl
cmNoYW5nZSk7CiAKICAgICByZXR1cm4gY3JlYXRlKG1hcmt1cFN0cmluZywgZnJhbWUsIG5vZGVM
aXN0LCAwKTsKIH0KQEAgLTU4NSwxNSArNTg0LDE4IEBAIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJj
aGl2ZT4gTGVnYWN5V2ViQXIKIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2Vi
QXJjaGl2ZTo6Y3JlYXRlRnJvbVNlbGVjdGlvbihGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVu
dCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmVm
UHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0aW9uUmFuZ2UpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFya3VwU3Ry
aW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKCpkb2N1bWVudCkgKyBjcmVhdGVNYXJrdXAoc2VsZWN0
aW9uUmFuZ2UuZ2V0KCksICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7CisgICAg
U3RyaW5nIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZygqZG9jdW1lbnQpICsgY3Jl
YXRlTWFya3VwKCpzZWxlY3Rpb25SYW5nZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlKTsKIAogICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gY3JlYXRlKG1h
cmt1cFN0cmluZywgZnJhbWUsIG5vZGVMaXN0LCAwKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE1Njk3NykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYwLDcgKzM2MCw3IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpj
b250ZXh0TWVudUkKIAogICAgICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7CiAgICAgICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwotICAgICAgICAgICAgUmVm
UHRyPFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kPiBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQ6OmNyZWF0ZSgqZG9jdW1lbnQsIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVu
dCwgaXRlbS0+dGl0bGUoKSwgIiIpLCByZXBsYWNlT3B0aW9ucyk7CisgICAgICAgICAgICBSZWZQ
dHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpkb2N1bWVu
dCwgaXRlbS0+dGl0bGUoKSwgIiIpLCByZXBsYWNlT3B0aW9ucyk7CiAgICAgICAgICAgICBhcHBs
eUNvbW1hbmQoY29tbWFuZCk7CiAgICAgICAgICAgICBmcmFtZVNlbGVjdGlvbi5yZXZlYWxTZWxl
Y3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDE1Njk3
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NCwxOCArNjQsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMg
Ym9vbCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShOb2RlKiBub2RlKQorc3RhdGljIGJvb2wgaXND
aGFyc2V0U3BlY2lmeWluZ05vZGUoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUt
PmlzSFRNTEVsZW1lbnQoKSkKKyAgICBpZiAoIW5vZGUuaXNIVE1MRWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1l
bnQobm9kZSk7Ci0gICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRh
ZykpCisgICAgY29uc3QgSFRNTEVsZW1lbnQmIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUp
OworICAgIGlmICghZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bWV0YVRhZykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OkF0dHJpYnV0ZUxp
c3QgYXR0cmlidXRlczsKLSAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmlidXRlcygpKSB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50LT5hdHRyaWJ1dGVDb3VudCgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gZWxlbWVudC0+
YXR0cmlidXRlQXQoaSk7CisgICAgaWYgKGVsZW1lbnQuaGFzQXR0cmlidXRlcygpKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50LmF0dHJpYnV0ZUNvdW50KCk7ICsr
aSkgeworICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgPSBlbGVtZW50LmF0
dHJpYnV0ZUF0KGkpOwogICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkZWFsIGFwcHJv
cHJpYXRlbHkgd2l0aCB0aGUgYXR0cmlidXRlIGlmIHRoZXkgaGF2ZSBhIG5hbWVzcGFjZS4KICAg
ICAgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5kKHN0ZDo6bWFrZV9wYWlyKGF0dHJpYnV0ZS5uYW1l
KCkudG9TdHJpbmcoKSwgYXR0cmlidXRlLnZhbHVlKCkuc3RyaW5nKCkpKTsKICAgICAgICAgfQpA
QCAtODQsOSArODQsOSBAQCBzdGF0aWMgYm9vbCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShOb2Rl
CiAgICAgcmV0dXJuIHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7CiB9CiAKLXN0YXRpYyBib29sIHNo
b3VsZElnbm9yZUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3N0YXRpYyBib29sIHNob3VsZEln
bm9yZUVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om5vc2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVt
ZW50KTsKKyAgICByZXR1cm4gZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFn
KSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpub3NjcmlwdFRhZykgfHwgaXNDaGFy
c2V0U3BlY2lmeWluZ05vZGUoZWxlbWVudCk7CiB9CiAKIHN0YXRpYyBjb25zdCBRdWFsaWZpZWRO
YW1lJiBmcmFtZU93bmVyVVJMQXR0cmlidXRlTmFtZShjb25zdCBIVE1MRnJhbWVPd25lckVsZW1l
bnQmIGZyYW1lT3duZXIpCkBAIC05NSw2NCArOTUsNjMgQEAgc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGZyYW1lT3duZXJVUgogICAgIHJldHVybiBpc0hUTUxPYmplY3RFbGVtZW50KGZyYW1l
T3duZXIpID8gSFRNTE5hbWVzOjpkYXRhQXR0ciA6IEhUTUxOYW1lczo6c3JjQXR0cjsKIH0KIAot
Y2xhc3MgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIFdlYkNvcmU6Ok1hcmt1
cEFjY3VtdWxhdG9yIHsKK2NsYXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciBGSU5BTCA6
IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7CiBwdWJsaWM6Ci0gICAgU2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8
Tm9kZSo+Kik7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVy
JiwgRG9jdW1lbnQmLCBWZWN0b3I8Tm9kZSo+Kik7CiAgICAgdmlydHVhbCB+U2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yKCk7CiAKLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
VGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
RWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAg
dmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBF
bGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9k
ZSopOwotCiBwcml2YXRlOgotICAgIFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6ZXI7Ci0gICAg
RG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgUGFnZVNlcmlhbGl6ZXImIG1fc2VyaWFsaXplcjsK
KyAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBUZXh0JikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lk
IGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1lc3BhY2Vz
KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3Ry
aW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1lc3BhY2VzKikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEVuZFRhZyhjb25zdCBOb2RlJikgT1ZFUlJJREU7CiB9OwogCi1T
ZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQ
YWdlU2VyaWFsaXplciogc2VyaWFsaXplciwgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9k
ZSo+KiBub2RlcykKK1NlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6U2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyJiBzZXJpYWxpemVyLCBEb2N1bWVudCYgZG9jdW1l
bnQsIFZlY3RvcjxOb2RlKj4qIG5vZGVzKQogICAgIDogTWFya3VwQWNjdW11bGF0b3Iobm9kZXMs
IFJlc29sdmVBbGxVUkxzKQogICAgICwgbV9zZXJpYWxpemVyKHNlcmlhbGl6ZXIpCiAgICAgLCBt
X2RvY3VtZW50KGRvY3VtZW50KQogewogICAgIC8vIE1hcmt1cEFjY3VtdWxhdG9yIGRvZXMgbm90
IHNlcmlhbGl6ZSB0aGUgPD94bWwgLi4uIGxpbmUsIHNvIHdlIGFkZCBpdCBleHBsaWNpdGVseSB0
byBlbnN1cmUgdGhlIHJpZ2h0IGVuY29kaW5nIGlzIHNwZWNpZmllZC4KLSAgICBpZiAobV9kb2N1
bWVudC0+aXNYSFRNTERvY3VtZW50KCkgfHwgbV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgpIHx8
IG1fZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKLSAgICAgICAgYXBwZW5kU3RyaW5nKCI8P3ht
bCB2ZXJzaW9uPVwiIiArIG1fZG9jdW1lbnQtPnhtbFZlcnNpb24oKSArICJcIiBlbmNvZGluZz1c
IiIgKyBtX2RvY3VtZW50LT5jaGFyc2V0KCkgKyAiXCI/PiIpOworICAgIGlmIChtX2RvY3VtZW50
LmlzWEhUTUxEb2N1bWVudCgpIHx8IG1fZG9jdW1lbnQueG1sU3RhbmRhbG9uZSgpIHx8IG1fZG9j
dW1lbnQuaXNTVkdEb2N1bWVudCgpKQorICAgICAgICBhcHBlbmRTdHJpbmcoIjw/eG1sIHZlcnNp
b249XCIiICsgbV9kb2N1bWVudC54bWxWZXJzaW9uKCkgKyAiXCIgZW5jb2Rpbmc9XCIiICsgbV9k
b2N1bWVudC5jaGFyc2V0KCkgKyAiXCI/PiIpOwogfQogCiBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3I6On5TZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoKQogewogfQogCi12b2lkIFNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRl
eHQqIHRleHQpCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChT
dHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFRleHQmIHRleHQpCiB7Ci0gICAgRWxlbWVudCogcGFy
ZW50ID0gdGV4dC0+cGFyZW50RWxlbWVudCgpOwotICAgIGlmIChwYXJlbnQgJiYgIXNob3VsZEln
bm9yZUVsZW1lbnQocGFyZW50KSkKKyAgICBFbGVtZW50KiBwYXJlbnQgPSB0ZXh0LnBhcmVudEVs
ZW1lbnQoKTsKKyAgICBpZiAocGFyZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KCpwYXJlbnQp
KQogICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChvdXQsIHRleHQpOwogfQog
Ci12b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdC
dWlsZGVyJiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2
b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWls
ZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMp
CiB7CiAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpKQogICAgICAgICBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwog
Ci0gICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgeworICAg
IGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgewogICAgICAgICBv
dXQuYXBwZW5kKCI8bWV0YSBjaGFyc2V0PVwiIik7Ci0gICAgICAgIG91dC5hcHBlbmQobV9kb2N1
bWVudC0+Y2hhcnNldCgpKTsKKyAgICAgICAgb3V0LmFwcGVuZChtX2RvY3VtZW50LmNoYXJzZXQo
KSk7CiAgICAgICAgIG91dC5hcHBlbmQoIlwiPiIpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBG
b3Igb2JqZWN0IChwbHVnaW5zKSB0YWdzIGFuZCB2aWRlbyB0YWcgd2UgY291bGQgcmVwbGFjZSB0
aGVtIGJ5IGFuIGltYWdlIG9mIHRoZWlyIGN1cnJlbnQgY29udGVudHMuCiB9CiAKLXZvaWQgU2Vy
aWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1
aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3Zv
aWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0
cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKIHsKLSAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkKKyAg
ICBpZiAoIWVsZW1lbnQuaXNGcmFtZU93bmVyRWxlbWVudCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXIgPSB0b0ZyYW1lT3duZXJFbGVt
ZW50KGVsZW1lbnQpOwotICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFt
ZSgpOworICAgIGNvbnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lciA9IHRvRnJh
bWVPd25lckVsZW1lbnQoZWxlbWVudCk7CisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVPd25lci5j
b250ZW50RnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTE2
MSwxMyArMTYwLDEzIEBAIHZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmQK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBsb2NhdGlv
biB0byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc2VyaWFs
aXplZCBmcmFtZS4KLSAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJhbWUoZnJh
bWUpOwotICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsIEF0dHJpYnV0ZShmcmFtZU93
bmVyVVJMQXR0cmlidXRlTmFtZSgqZnJhbWVPd25lciksIHVybC5zdHJpbmcoKSksIG5hbWVzcGFj
ZXMpOworICAgIHVybCA9IG1fc2VyaWFsaXplci51cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKKyAg
ICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCBBdHRyaWJ1dGUoZnJhbWVPd25lclVSTEF0
dHJpYnV0ZU5hbWUoZnJhbWVPd25lciksIHVybC5zdHJpbmcoKSksIG5hbWVzcGFjZXMpOwogfQog
Ci12b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKE5vZGUqIG5v
ZGUpCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKGNvbnN0
IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhc2hvdWxk
SWdub3JlRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpKQorICAgIGlmIChub2RlLmlzRWxlbWVudE5v
ZGUoKSAmJiAhc2hvdWxkSWdub3JlRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpKQogICAgICAgICBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKG5vZGUpOwogfQogCkBAIC0yMTAsMTQgKzIw
OSwxNCBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtCiAgICAgfQog
CiAgICAgVmVjdG9yPE5vZGUqPiBub2RlczsKLSAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0
b3IgYWNjdW11bGF0b3IodGhpcywgZG9jdW1lbnQsICZub2Rlcyk7CisgICAgU2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKCp0aGlzLCAqZG9jdW1lbnQsICZub2Rlcyk7CiAg
ICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhkb2N1bWVudC0+Y2hhcnNldCgpKTsKICAgICBD
U3RyaW5nIGRhdGE7CiAgICAgaWYgKCF0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKSB7CiAgICAgICAg
IC8vIEZJWE1FOiBpZnJhbWVzIHVzZWQgYXMgaW1hZ2VzIHRyaWdnZXIgdGhpcy4gV2Ugc2hvdWxk
IGRlYWwgd2l0aCB0aGVtIGNvcnJlY3RseS4KICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBT
dHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGRvY3VtZW50LT5kb2N1bWVu
dEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5vZGUpOworICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0
b3Iuc2VyaWFsaXplTm9kZXMoKmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgSW5jbHVk
ZU5vZGUpOwogICAgIENTdHJpbmcgZnJhbWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0
LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOwog
ICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoUmVzb3VyY2UodXJsLCBkb2N1bWVudC0+c3VnZ2VzdGVk
TUlNRVR5cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVI
VE1MLmxlbmd0aCgpKSkpOwogICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0JKHJldmlzaW9uIDE1
Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50TG9h
ZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoY29yZUFy
Y2hpdmUuZ2V0KCkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLmdldCgp
LCBtYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZy
YW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcuZ2V0KCksIG1haW5SZXNvdXJjZS0+dXJsKCks
IERpc2FsbG93U2NyaXB0aW5nQ29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNyAr
NjEzLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChEb2N1bWVudCogZG9jdQogCiAgICAg
ICAgIC8vIEZJWE1FOiBBY2NvcmRpbmcgdG8gWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMiwgdGhpcyBz
aG91bGQgdXNlIHRoZSBEb2N1bWVudC5pbm5lckhUTUwgYWxnb3JpdGhtCiAgICAgICAgIC8vIGZy
b20gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24gdG8gc2VyaWFsaXplIHRoZSBkb2N1bWVudC4KLSAg
ICAgICAgU3RyaW5nIGJvZHkgPSBjcmVhdGVNYXJrdXAoZG9jdW1lbnQpOworICAgICAgICBTdHJp
bmcgYm9keSA9IGNyZWF0ZU1hcmt1cCgqZG9jdW1lbnQpOwogCiAgICAgICAgIC8vIEZJWE1FOiB0
aGlzIHNob3VsZCB1c2UgdmFsdWUgb2YgZG9jdW1lbnQuaW5wdXRFbmNvZGluZyB0byBkZXRlcm1p
bmUgdGhlIGVuY29kaW5nIHRvIHVzZS4KICAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0g
VVRGOEVuY29kaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MU2VyaWFsaXplci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCShy
ZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MU2VyaWFsaXplci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgU3RyaW5nIFhNTFNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZVRvU3RyaW5nKAogICAgICAgICBlYyA9IFR5cGVFcnJvcjsKICAgICAgICAgcmV0dXJu
IFN0cmluZygpOwogICAgIH0KLSAgICByZXR1cm4gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1ZGVO
b2RlLCAwLCBEb05vdFJlc29sdmVVUkxzLCAwLCBYTUxGcmFnbWVudFNlcmlhbGl6YXRpb24pOwor
ICAgIHJldHVybiBjcmVhdGVNYXJrdXAoKm5vZGUsIEluY2x1ZGVOb2RlLCAwLCBEb05vdFJlc29s
dmVVUkxzLCAwLCBYTUxGcmFnbWVudFNlcmlhbGl6YXRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZpc2lv
biAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xUUHJv
Y2Vzc29yOjp0cmFuCiAgICAgU3RyaW5nIHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyByZXN1
bHRTdHJpbmc7CiAgICAgU3RyaW5nIHJlc3VsdEVuY29kaW5nOwotICAgIGlmICghdHJhbnNmb3Jt
VG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0
RW5jb2RpbmcpKQorICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoKnNvdXJjZU5vZGUsIHJlc3Vs
dE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShyZXN1bHRTdHJpbmcsIHJl
c3VsdEVuY29kaW5nLCByZXN1bHRNSU1FVHlwZSwgc291cmNlTm9kZSwgMCk7CiB9CkBAIC0xMzQs
NyArMTM0LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2VzcwogICAg
IGlmIChvdXRwdXREb2MtPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJlc3VsdE1JTUVUeXBl
ID0gInRleHQvaHRtbCI7CiAKLSAgICBpZiAoIXRyYW5zZm9ybVRvU3RyaW5nKHNvdXJjZU5vZGUs
IHJlc3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKKyAgICBpZiAo
IXRyYW5zZm9ybVRvU3RyaW5nKCpzb3VyY2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVzdWx0U3Ry
aW5nLCByZXN1bHRFbmNvZGluZykpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBjcmVh
dGVGcmFnbWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQocmVzdWx0U3RyaW5nLCByZXN1bHRNSU1F
VHlwZSwgb3V0cHV0RG9jKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vz
c29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAko
cmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgflhTTFRQcm9jZXNz
b3IoKTsKIAogICAgIHZvaWQgc2V0WFNMU3R5bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxlU2hl
ZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNoZWV0ID0gc3R5bGVTaGVldDsgfQotICAgIGJvb2wg
dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBT
dHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7CisgICAgYm9vbCB0
cmFuc2Zvcm1Ub1N0cmluZyhOb2RlJiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0
cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKICAgICBQYXNzUmVm
UHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBzb3Vy
Y2UsIGNvbnN0IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNlTUlN
RVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFtZSk7CiAgICAgCiAgICAgLy8gRE9N
IG1ldGhvZHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0
LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNz
b3JMaWJ4c2x0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRpYyB4
c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFAKIAogICAgICAgICAvLyBBY2NvcmRpbmcg
dG8gTW96aWxsYSBkb2N1bWVudGF0aW9uLCB0aGUgbm9kZSBtdXN0IGJlIGEgRG9jdW1lbnQgbm9k
ZSwgYW4geHNsOnN0eWxlc2hlZXQgb3IgeHNsOnRyYW5zZm9ybSBlbGVtZW50LgogICAgICAgICAv
LyBCdXQgd2UganVzdCB1c2UgdGV4dCBjb250ZW50IHJlZ2FyZGxlc3Mgb2Ygbm9kZSB0eXBlLgot
ICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5wYXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5bGVz
aGVldFJvb3ROb2RlKSk7CisgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5nKGNy
ZWF0ZU1hcmt1cCgqc3R5bGVzaGVldFJvb3ROb2RlKSk7CiAgICAgfQogCiAgICAgaWYgKCFjYWNo
ZWRTdHlsZXNoZWV0IHx8ICFjYWNoZWRTdHlsZXNoZWV0LT5kb2N1bWVudCgpKQpAQCAtMjY1LDEw
ICsyNjUsMTAgQEAgc3RhdGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0UAogICAg
IHJldHVybiBjYWNoZWRTdHlsZXNoZWV0LT5jb21waWxlU3R5bGVTaGVldCgpOwogfQogCi1zdGF0
aWMgaW5saW5lIHhtbERvY1B0ciB4bWxEb2NQdHJGcm9tTm9kZShOb2RlKiBzb3VyY2VOb2RlLCBi
b29sJiBzaG91bGREZWxldGUpCitzdGF0aWMgaW5saW5lIHhtbERvY1B0ciB4bWxEb2NQdHJGcm9t
Tm9kZShOb2RlJiBzb3VyY2VOb2RlLCBib29sJiBzaG91bGREZWxldGUpCiB7Ci0gICAgUmVmPERv
Y3VtZW50PiBvd25lckRvY3VtZW50KHNvdXJjZU5vZGUtPmRvY3VtZW50KCkpOwotICAgIGJvb2wg
c291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09ICZvd25lckRvY3VtZW50LmdldCgpKTsK
KyAgICBSZWY8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQoc291cmNlTm9kZS5kb2N1bWVudCgpKTsK
KyAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoJnNvdXJjZU5vZGUgPT0gJm93bmVyRG9jdW1l
bnQuZ2V0KCkpOwogCiAgICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7CiAgICAgaWYgKHNvdXJj
ZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCkBAIC0zMDAs
OSArMzAwLDkgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgcmVzdWx0TUlNRVR5cGUoeG1sRAogICAg
IHJldHVybiAiYXBwbGljYXRpb24veG1sIjsKIH0KIAotYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFu
c2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmIG1pbWVUeXBlLCBTdHJpbmcm
IHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZykKK2Jvb2wgWFNMVFByb2Nlc3Nv
cjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSYgc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwg
U3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpCiB7Ci0gICAgUmVm
PERvY3VtZW50PiBvd25lckRvY3VtZW50KHNvdXJjZU5vZGUtPmRvY3VtZW50KCkpOworICAgIFJl
ZjxEb2N1bWVudD4gb3duZXJEb2N1bWVudChzb3VyY2VOb2RlLmRvY3VtZW50KCkpOwogCiAgICAg
c2V0WFNMVExvYWRDYWxsQmFjayhkb2NMb2FkZXJGdW5jLCB0aGlzLCBvd25lckRvY3VtZW50LT5j
YWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKICAgICB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9IHhz
bHRTdHlsZXNoZWV0UG9pbnRlcihtX3N0eWxlc2hlZXQsIG1fc3R5bGVzaGVldFJvb3ROb2RlLmdl
dCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk4MykKKysrIFNvdXJjZS9X
ZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEz
LTEwLTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVGhy
ZWFkIHJlZmVyZW5jZXMgdGhyb3VnaCBtYXJrdXAuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAg
ICAgKC1bRE9NTm9kZSBtYXJrdXBTdHJpbmddKToKKyAgICAgICAgKC1bRE9NUmFuZ2UgbWFya3Vw
U3RyaW5nXSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWUgX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOmJhc2VVUkxTdHJpbmc6XSk6
CisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJhZ3Jh
cGhzOl0pOgorCiAyMDEzLTEwLTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgQ1RURTogUGFzcyBEb2N1bWVudFdyaXRlciBhcm91bmQgYXMgYSByZWZlcmVuY2UKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCShyZXZpc2lvbiAx
NTY5NzcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZl
QnlGaWx0ZXJpbmdTdWIKIAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKIHsKLSAgICByZXR1
cm4gY3JlYXRlRnVsbE1hcmt1cChjb3JlKHNlbGYpKTsKKyAgICByZXR1cm4gY3JlYXRlRnVsbE1h
cmt1cCgqY29yZShzZWxmKSk7CiB9CiAKIC0gKE5TUmVjdClfcmVuZGVyUmVjdDooYm9vbCAqKWlz
UmVwbGFjZWQKQEAgLTE3Miw3ICsxNzIsNyBAQCAtIChXZWJBcmNoaXZlICopd2ViQXJjaGl2ZQog
CiAtIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZwogewotICAgIHJldHVybiBjcmVhdGVGdWxsTWFy
a3VwKGNvcmUoc2VsZikpOworICAgIHJldHVybiBjcmVhdGVGdWxsTWFya3VwKCpjb3JlKHNlbGYp
KTsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCShy
ZXZpc2lvbiAxNTY5NzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC03MjEsMjQgKzcyMSw0MyBAQCAtIChET01SYW5nZSAqKV9zbWFy
dERlbGV0ZVJhbmdlRm9yUHJvcG9zCiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1l
bnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VV
UkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZyAKIHsKLSAgICBpZiAoIV9wcml2YXRl
LT5jb3JlRnJhbWUgfHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgRnJh
bWUqIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAg
ICByZXR1cm4gbmlsOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7CisgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJldHVy
biBraXQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKF9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3Vt
ZW50KCksIG1hcmt1cFN0cmluZywgYmFzZVVSTFN0cmluZywgRGlzYWxsb3dTY3JpcHRpbmdDb250
ZW50KS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmRv
Y3VtZW50LCBtYXJrdXBTdHJpbmcsIGJhc2VVUkxTdHJpbmcsIERpc2FsbG93U2NyaXB0aW5nQ29u
dGVudCkuZ2V0KCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJh
Z21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6KE5TQXJyYXkgKilub2RlcwogewotICAgIGlmICgh
X3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkK
KyAgICBGcmFtZSogZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gbmls
OworCiAgICAgTlNFbnVtZXJhdG9yICpub2RlRW51bSA9IFtub2RlcyBvYmplY3RFbnVtZXJhdG9y
XTsKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzVmVjdG9yOwogICAgIERPTU5vZGUgKm5vZGU7CiAg
ICAgd2hpbGUgKChub2RlID0gW25vZGVFbnVtIG5leHRPYmplY3RdKSkKICAgICAgICAgbm9kZXNW
ZWN0b3IuYXBwZW5kKGNvcmUobm9kZSkpOwotICAgIAotICAgIHJldHVybiBraXQoY3JlYXRlRnJh
Z21lbnRGcm9tTm9kZXMoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZXNWZWN0
b3IpLmdldCgpKTsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRv
Y3VtZW50LT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKyAgICBzaXplX3Qgc2l6ZSA9IG5v
ZGVzVmVjdG9yLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZURlZmF1bHRQYXJhZ3Jh
cGhFbGVtZW50KCpkb2N1bWVudCk7CisgICAgICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKG5vZGVz
VmVjdG9yW2ldLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICAgICAgZnJhZ21lbnQtPmFwcGVu
ZENoaWxkKGVsZW1lbnQucmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICB9CisK
KyAgICByZXR1cm4ga2l0KGZyYWdtZW50LnJlbGVhc2UoKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQp
X3JlcGxhY2VTZWxlY3Rpb25XaXRoTm9kZTooRE9NTm9kZSAqKW5vZGUgc2VsZWN0UmVwbGFjZW1l
bnQ6KEJPT0wpc2VsZWN0UmVwbGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFj
ZSBtYXRjaFN0eWxlOihCT09MKW1hdGNoU3R5bGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213492</attachid>
            <date>2013-10-05 21:36:00 -0700</date>
            <delta_ts>2013-10-05 21:48:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122403-20131005213600.patch</filename>
            <type>text/plain</type>
            <size>102296</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTA1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVGhyZWFkIHJlZmVyZW5jZXMg
dGhyb3VnaCBtYXJrdXAuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNDAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSGlnaGxpZ2h0czoKKyAgICAgICAgLSBSZW1vdmVkIGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cFdpdGhDb250ZXh0KCksIGl0IHdhcyB1bnVzZWQuCisgICAgICAgIC0gTW92ZWQgY3Jl
YXRlRnJhZ21lbnRGcm9tTm9kZXMoKSBpbnRvIGl0cyBvbmUgY2FsbGVyIChpbiBXZWJLaXQvbWFj
KQorICAgICAgICAtIEFkZCBhIGJ1bmNoIG1vcmUgdG9Gb28oKSBvdmVybG9hZHMuCisKIDIwMTMt
MTAtMDUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEZyYW1l
U2VsZWN0aW9uOiBSZW1vdmUgdHdvIHVudXNlZCBtZW1iZXIgZnVuY3Rpb25zLgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDYgQEAgX19aTjdXZWJDb3Jl
MTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5nZQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JE
MUV2CiBfX1pON1dlYkNvcmUxMlVURjhFbmNvZGluZ0V2CiBfX1pON1dlYkNvcmUxMmNhY2hlU3Rv
cmFnZUV2Ci1fX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQTjNXVEY2VmVj
dG9ySVBOU180Tm9kZUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFTlNfMjNFQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZUViTlNfMTNFQWJzb2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJkZWxldGVD
b29raWVFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxMmdjQ29udHJvbGxlckV2CiBfX1pON1dlYkNvcmUxMmljb25EYXRh
YmFzZUV2CkBAIC01ODEsOCArNTgwLDggQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9u
MjJleHBhbmRVcwogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUEtOU181UmFuZ2VF
TlNfOUVBZmZpbml0eUViCiBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1
VmlzaWJsZVBvc2l0aW9uRVMzX2IKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FYgotX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBL
TlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCitf
X1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUktOU180Tm9kZUUKK19fWk43V2ViQ29yZTE2
Y3JlYXRlRnVsbE1hcmt1cEVSS05TXzVSYW5nZUUKIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29v
a2llc0VSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRQogX19aTjdXZWJDb3JlMTZlbmNsb3Np
bmdJbnRSZWN0RVJLNkNHUmVjdAogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNf
OUZsb2F0UmVjdEUKQEAgLTc2NSw3ICs3NjQsNiBAQCBfX1pON1dlYkNvcmUyM0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQzFFCiBfX1pON1dlYkNvcmUyM011dGFibGVTdHlsZVByb3BlcnR5U2V0MjVl
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uRXYKIF9fWk43V2ViQ29yZTIzTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXREMUV2CiBfX1pON1dlYkNvcmUyM1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50MjRwbGF0
Zm9ybUJhZFJlc3BvbnNlRXJyb3JFdgotX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21O
b2Rlc0VQTlNfOERvY3VtZW50RVJLTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFTlMyXzE1Q3Jh
c2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBlRVA1
TlNVUkxsCiBfX1pON1dlYkNvcmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4
X05TUmFuZ2UKIF9fWk43V2ViQ29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmlu
ZzhfTlNSYW5nZQpAQCAtNzgxLDcgKzc3OSw3IEBAIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyMTQKIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyMTR3
aWxsRGV0YWNoUGFnZUV2CiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckMy
RVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYK
LV9fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktO
M1dURjZTdHJpbmdFUzVfTlNfMTlQYXJzZXJDb250ZW50UG9saWN5RQorX19aTjdXZWJDb3JlMjRj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUk5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9O
U18xOVBhcnNlckNvbnRlbnRQb2xpY3lFCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0cmluZ0UKQEAgLTgx
MSw2ICs4MDksNyBAQCBfX1pON1dlYkNvcmUyOERvY3VtZW50U3R5bGVTaGVldENvbGxlY3RpCiBf
X1pON1dlYkNvcmUyOGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmUyOHJlbW92ZUxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXJFUHYKIF9fWk43V2Vi
Q29yZTI5Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWVFUktOU18yMU5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkVSS05TXzNVUkxFUzVfCitfX1pON1dlYkNvcmUyOWNyZWF0ZURlZmF1bHRQYXJhZ3Jh
cGhFbGVtZW50RVJOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUyOWlzQ2hhcmFjdGVyU21hcnRS
ZXBsYWNlRXhlbXB0RWliCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNEZWNvZGluZ1dpdGhS
YW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNFbmNv
ZGluZ1dpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTY5Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc5Niw3ICs3OTYsNyBAQAogCQkxQzExQ0NDODBBQTYwOTM3MDBEQURC
MjAgLyogRE9NSFRNTEVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1REYyRUVCMEFBMzg3Q0IwMEFENjRDNSAvKiBE
T01IVE1MRWxlbWVudC5oICovOyB9OwogCQkxQzI2NDk3QTBEN0UyNDhBMDBCRDEwRjIgLyogRG9j
dW1lbnRMb2FkZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNw
cCAqLzsgfTsKIAkJMUMyNjQ5N0MwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyNjQ5N0IwRDdFMjRF
QzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwICovOyB9OwotCQkxQzRDOEYwMjBBRDg1RDg3MDA5NDc1
Q0UgLyogRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGMDAwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJMUM0QzhGMDIwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNEM4RjAwMEFEODVEODcwMDk0NzVDRSAvKiBEZWxldGVCdXR0b25Db250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUM0QzhGNjYwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGNjQwQUQ4NjU1RDAwOTQ3
NUNFIC8qIERlbGV0ZUJ1dHRvbi5oICovOyB9OwogCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzgg
LyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUZBRUNGMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwICovOyB9OwogCQkxQzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzVGQUVEMDBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmggKi87IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1t
CShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhU
TUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKIAogLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmlu
ZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKIHsKLSAgICByZXR1cm4g
a2l0KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFti
YXNlVVJMIGFic29sdXRlU3RyaW5nXSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKCpjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFtiYXNlVVJMIGFic29s
dXRlU3RyaW5nXSkuZ2V0KCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRl
RG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ0RBVEFTZWN0aW9uLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DREFUQVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMzMgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gdmlydHVhbENyZWF0ZShjb25zdCBTdHJp
bmcmKTsKIH07CiAKK2lubGluZSBDREFUQVNlY3Rpb24mIHRvQ0RBVEFTZWN0aW9uKE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENEQVRBU2VjdGlvbiY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9uJiB0
b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05P
REUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24mPihub2RlKTsK
K30KKworaW5saW5lIENEQVRBU2VjdGlvbiogdG9DREFUQVNlY3Rpb24oTm9kZSogbm9kZSkKK3sK
KyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENEQVRBU2VjdGlvbio+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9u
KiB0b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RB
VEFfU0VDVElPTl9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0RBVEFTZWN0
aW9uKj4obm9kZSk7Cit9CisKK3ZvaWQgdG9DREFUQVNlY3Rpb24oY29uc3QgQ0RBVEFTZWN0aW9u
Jik7Cit2b2lkIHRvQ0RBVEFTZWN0aW9uKGNvbnN0IENEQVRBU2VjdGlvbiopOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDREFUQVNlY3Rpb25faApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0NvbW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q29tbWVudC5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwzMyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdDsKIH07CiAKK2lubGluZSBD
b21tZW50JiB0b0NvbW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
Q29tbWVudCYgdG9Db21tZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9E
RSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQmPihub2RlKTsKK30KKwor
aW5saW5lIENvbW1lbnQqIHRvQ29tbWVudChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
Q09NTUVOVF9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpOwor
fQorCitpbmxpbmUgY29uc3QgQ29tbWVudCogdG9Db21tZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBDb21tZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQm
KTsKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gQ29tbWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDE1Njk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNjcsNyArNDI2Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNM
VHJhbnNmb3JtKFByb2Nlc3MKICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5n
IG5ld1NvdXJjZTsKICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7Ci0gICAgaWYgKCFwcm9jZXNz
b3ItPnRyYW5zZm9ybVRvU3RyaW5nKHRoaXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJl
c3VsdEVuY29kaW5nKSkKKyAgICBpZiAoIXByb2Nlc3Nvci0+dHJhbnNmb3JtVG9TdHJpbmcoKnRo
aXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB0aGUgdHJhbnNmb3JtIGZhaWxlZCB3ZSBzaG91bGQg
cHJvYmFibHkgcmVwb3J0IGFuIGVycm9yIChsaWtlIE1vemlsbGEgZG9lcykuCiAgICAgRnJhbWUq
IG93bmVyRnJhbWUgPSBmcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjE5LDggKzE2MTksMjEgQEAgaW5saW5lIGNvbnN0IERvY3VtZW50KiB0b0RvY3VtZW50
KGNvbnN0IAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KG5vZGUpOwog
fQogCitpbmxpbmUgRG9jdW1lbnQmIHRvRG9jdW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
RG9jdW1lbnQmIHRvRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCY+KG5vZGUpOworfQorCiAvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvRG9jdW1lbnQo
Y29uc3QgRG9jdW1lbnQqKTsKK3ZvaWQgdG9Eb2N1bWVudChjb25zdCBEb2N1bWVudCYpOwogCiAv
LyBQdXQgdGhlc2UgbWV0aG9kcyBoZXJlLCBiZWNhdXNlIHRoZXkgcmVxdWlyZSB0aGUgRG9jdW1l
bnQgZGVmaW5pdGlvbiwgYnV0IHdlIHJlYWxseSB3YW50IHRvIGlubGluZSB0aGVtLgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDMz
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3Vic2V0OwogfTsKIAoraW5saW5lIERvY3VtZW50
VHlwZSYgdG9Eb2N1bWVudFR5cGUoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9O
T0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlJj4obm9kZSk7Cit9CisK
K2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUmIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IERvY3VtZW50VHlwZSY+KG5vZGUpOworfQorCitpbmxpbmUgRG9jdW1lbnRUeXBlKiB0
b0RvY3VtZW50VHlwZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQ
RV9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSk7Cit9
CisKK2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUqIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudFR5cGUqPihub2RlKTsKK30KKwordm9pZCB0b0Rv
Y3VtZW50VHlwZShjb25zdCBEb2N1bWVudFR5cGUmKTsKK3ZvaWQgdG9Eb2N1bWVudFR5cGUoY29u
c3QgRG9jdW1lbnRUeXBlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCShyZXZpc2lv
biAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5MSwzMyBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
CitpbmxpbmUgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihO
b2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUu
bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mPihub2RlKTsKK30KKworaW5s
aW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uJj4obm9k
ZSk7Cit9CisKIGlubGluZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRvUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREUpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24q
Pihub2RlKTsKIH0KIAoraW5saW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogdG9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBS
T0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpOworfQorCit2b2lkIHRvUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYpOwordm9pZCB0b1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbihjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qKTsKKwogfSAvL25hbWVz
cGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTU2OTc3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Myw3
ICsxMDgzLDcgQEAgU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25Db2RlJiBlYwogCiBT
dHJpbmcgUmFuZ2U6OnRvSFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCh0
aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogU3RyaW5nIFJhbmdl
Ojp0ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IFNoYWRvd1Jvb3Q6OmNsb25l
Tm9kZShiCiAKIFN0cmluZyBTaGFkb3dSb290Ojppbm5lckhUTUwoKSBjb25zdAogewotICAgIHJl
dHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAgICByZXR1cm4gY3JlYXRl
TWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiB2b2lkIFNoYWRvd1Jvb3Q6OnNldElu
bmVySFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UZXh0LmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDEyIEBAIGlubGluZSBUZXh0JiB0b1RleHQoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dCY+KG5vZGUpOwogfQogCitpbmxp
bmUgY29uc3QgVGV4dCYgdG9UZXh0KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc1RleHROb2RlKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Jj4obm9kZSk7Cit9CisKIGlubGluZSBUZXh0KiB0b1RleHQo
Tm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9k
ZSB8fCBub2RlLT5pc1RleHROb2RlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTk4LDcgKzExOTgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFy
YWdyYXBoCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRo
aXMgdXNlZCB0byB1c2UgYSB0ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29u
ZnVzZWQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoJmRvY3VtZW50KCksIGNyZWF0ZU1hcmt1cChy
YW5nZS5nZXQoKSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCB0cnVlKSwgIiIpOwor
ICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCgpLCBj
cmVhdGVNYXJrdXAoKnJhbmdlLCAwLCBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIHRydWUp
LCAiIik7CiAKICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3
aGVuIHdlIGNvcHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5n
IGlmIHdlJ3JlIGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFw
aCBjYW4gaGF2ZSBzdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDEsNyArNTAxLDcgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEhvcml6b250YWxSdWxlKAogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5z
ZXJ0SFRNTChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY3V0ZUluc2VydEZyYWdtZW50KGZyYW1l
LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgdmFsdWUsICIiKSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChmcmFtZSwgY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCB2YWx1ZSwgIiIpKTsKIH0KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEltYWdlKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsMjUgKzExMywyNSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkK
IHsKIH0KIAotU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2RlcyhOb2RlKiB0
YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSkK
K1N0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpCiB7CiAgICAg
cmV0dXJuIHNlcmlhbGl6ZU5vZGVzKHRhcmdldE5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVuT25s
eSwgMCk7CiB9CiAKLVN0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9u
bHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCitTdHJpbmcgTWFya3Vw
QWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5vZGVU
b1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4q
IHRhZ05hbWVzVG9Ta2lwKQogewogICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXModGFy
Z2V0Tm9kZSwgbm9kZVRvU2tpcCwgY2hpbGRyZW5Pbmx5LCAwLCB0YWdOYW1lc1RvU2tpcCk7CiAg
ICAgcmV0dXJuIG1fbWFya3VwLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogdGFyZ2V0Tm9kZSwgTm9kZSog
bm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMsIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUmIHRh
cmdldE5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBj
b25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05h
bWVzVG9Ta2lwKQogewotICAgIGlmICh0YXJnZXROb2RlID09IG5vZGVUb1NraXApCisgICAgaWYg
KCZ0YXJnZXROb2RlID09IG5vZGVUb1NraXApCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAodGFnTmFtZXNUb1NraXApIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWdO
YW1lc1RvU2tpcC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXROb2RlLT5o
YXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCisgICAgICAgICAgICBpZiAodGFyZ2V0
Tm9kZS5oYXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ4LDI5ICsxNDgsMjkgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaQogICAgIGlmICghY2hpbGRyZW5Pbmx5KQog
ICAgICAgICBhcHBlbmRTdGFydFRhZyh0YXJnZXROb2RlLCAmbmFtZXNwYWNlSGFzaCk7CiAKLSAg
ICBpZiAoISh0YXJnZXROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVu
dENhbm5vdEhhdmVFbmRUYWcodGFyZ2V0Tm9kZSkpKSB7CisgICAgaWYgKCEodGFyZ2V0Tm9kZS5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcodGFy
Z2V0Tm9kZSkpKSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIE5vZGUq
IGN1cnJlbnQgPSB0YXJnZXROb2RlLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSA/IHRvSFRNTFRl
bXBsYXRlRWxlbWVudCh0YXJnZXROb2RlKS0+Y29udGVudCgpLT5maXJzdENoaWxkKCkgOiB0YXJn
ZXROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIGN1cnJlbnQgPSB0YXJnZXROb2Rl
Lmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpID8gdG9IVE1MVGVtcGxhdGVFbGVtZW50KHRhcmdldE5v
ZGUpLmNvbnRlbnQoKS0+Zmlyc3RDaGlsZCgpIDogdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAj
ZWxzZQotICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS0+Zmlyc3RDaGlsZCgpOwor
ICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAjZW5kaWYK
ICAgICAgICAgZm9yICggOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoY3VycmVudCwgbm9k
ZVRvU2tpcCwgSW5jbHVkZU5vZGUsICZuYW1lc3BhY2VIYXNoLCB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgICAgICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKCpjdXJyZW50LCBub2RlVG9T
a2lwLCBJbmNsdWRlTm9kZSwgJm5hbWVzcGFjZUhhc2gsIHRhZ05hbWVzVG9Ta2lwKTsKICAgICB9
CiAKICAgICBpZiAoIWNoaWxkcmVuT25seSkKICAgICAgICAgYXBwZW5kRW5kVGFnKHRhcmdldE5v
ZGUpOwogfQogCi1TdHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnJlc29sdmVVUkxJZk5lZWRlZChj
b25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK1N0
cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6cmVzb2x2ZVVSTElmTmVlZGVkKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAogewogICAgIHN3aXRjaCAo
bV9yZXNvbHZlVVJMc01ldGhvZCkgewogICAgIGNhc2UgUmVzb2x2ZUFsbFVSTHM6Ci0gICAgICAg
IHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybFN0cmluZykuc3RyaW5n
KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsU3Ry
aW5nKS5zdHJpbmcoKTsKIAogICAgIGNhc2UgUmVzb2x2ZU5vbkxvY2FsVVJMczoKLSAgICAgICAg
aWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLnN0cmlu
ZygpOworICAgICAgICBpZiAoIWVsZW1lbnQuZG9jdW1lbnQoKS51cmwoKS5pc0xvY2FsRmlsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxT
dHJpbmcpLnN0cmluZygpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRG9Ob3RSZXNvbHZl
VVJMczoKQEAgLTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0cmluZyhjb24KICAgICBtX21hcmt1cC5hcHBlbmQoc3RyaW5nKTsKIH0KIAotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoTm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKGNvbnN0IE5v
ZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kU3RhcnRNYXJr
dXAobV9tYXJrdXAsIG5vZGUsIG5hbWVzcGFjZXMpOwogICAgIGlmIChtX25vZGVzKQotICAgICAg
ICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZXMtPmFwcGVuZChjb25zdF9j
YXN0PE5vZGUqPigmbm9kZSkpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bmRUYWcoTm9kZSogbm9kZSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhj
b25zdCBOb2RlJiBub2RlKQogewogICAgIGFwcGVuZEVuZE1hcmt1cChtX21hcmt1cCwgbm9kZSk7
CiB9CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRB
dHRyaWJ1dGVWCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJp
YnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopCiB7
CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZh
bHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
QXR0cmlidXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90
ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIEFTU0VSVChlbGVt
ZW50LT5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VS
TEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAgICBjb25zdCBTdHJpbmcgcmVzb2x2ZWRVUkxTdHJp
bmcgPSByZXNvbHZlVVJMSWZOZWVkZWQoZWxlbWVudCwgYXR0cmlidXRlLnZhbHVlKCkpOwogICAg
IFVDaGFyIHF1b3RlQ2hhciA9ICciJzsKICAgICBTdHJpbmcgc3RyaXBwZWRVUkxTdHJpbmcgPSBy
ZXNvbHZlZFVSTFN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTI0NSwxNiArMjQ1LDE2IEBA
IHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICByZXN1bHQuYXBw
ZW5kKHF1b3RlQ2hhcik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdl
KiByYW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTm9kZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kZSwg
Y29uc3QgUmFuZ2UqIHJhbmdlLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7Ci0gICAgY29uc3Qg
U3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOworICAgIGNvbnN0IFN0cmluZyBzdHIgPSBu
b2RlLm5vZGVWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBzdGFydCA9IDA7CiAKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKG5v
ZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQorICAgICAgICBpZiAoJm5vZGUgPT0gcmFuZ2Ut
PmVuZENvbnRhaW5lcigpKQogICAgICAgICAgICAgbGVuZ3RoID0gcmFuZ2UtPmVuZE9mZnNldCgp
OwotICAgICAgICBpZiAobm9kZSA9PSByYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAgICAg
ICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpIHsKICAgICAgICAgICAgIHN0
YXJ0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7
CiAgICAgICAgIH0KQEAgLTI2MywxNSArMjYzLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZE5vZGVWYWx1ZSgKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMo
cmVzdWx0LCBzdHIsIHN0YXJ0LCBsZW5ndGgsIGVudGl0eU1hc2spOwogfQogCi1ib29sIE1hcmt1
cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBh
dHRyaWJ1dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXggPSBlbGVtZW50LT5wcmVmaXgoKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCA9IGVsZW1lbnQucHJlZml4KCk7CiAgICAgaWYgKHByZWZpeC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAhZWxlbWVudC0+aGFzQXR0cmlidXRlKHhtbG5zQXRv
bSk7CisgICAgICAgIHJldHVybiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoeG1sbnNBdG9tKTsKIAog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB4bWxuc1dpdGhDb2xvbiwgKEFTQ0lJTGl0
ZXJhbCgieG1sbnM6IikpKTsKLSAgICByZXR1cm4gIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh4bWxu
c1dpdGhDb2xvbiArIHByZWZpeCk7CisgICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSh4
bWxuc1dpdGhDb2xvbiArIHByZWZpeCk7CiB9CiAKIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFt
ZXNwYWNlcyYgbmFtZXNwYWNlcykKQEAgLTMzMywyNCArMzMzLDI0IEBAIHZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSgKICAgICB9CiB9CiAKLUVudGl0eU1hc2sgTWFya3Vw
QWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQpIGNvbnN0CitFbnRpdHlN
YXNrIE1hcmt1cEFjY3VtdWxhdG9yOjplbnRpdHlNYXNrRm9yVGV4dChjb25zdCBUZXh0JiB0ZXh0
KSBjb25zdAogewogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIHBhcmVudE5hbWUgPSAwOwotICAg
IGlmICh0ZXh0LT5wYXJlbnRFbGVtZW50KCkpCi0gICAgICAgIHBhcmVudE5hbWUgPSAmKHRleHQt
PnBhcmVudEVsZW1lbnQoKSktPnRhZ1FOYW1lKCk7CisgICAgaWYgKHRleHQucGFyZW50RWxlbWVu
dCgpKQorICAgICAgICBwYXJlbnROYW1lID0gJih0ZXh0LnBhcmVudEVsZW1lbnQoKSktPnRhZ1FO
YW1lKCk7CiAKICAgICBpZiAocGFyZW50TmFtZSAmJiAoKnBhcmVudE5hbWUgPT0gc2NyaXB0VGFn
IHx8ICpwYXJlbnROYW1lID09IHN0eWxlVGFnIHx8ICpwYXJlbnROYW1lID09IHhtcFRhZykpCiAg
ICAgICAgIHJldHVybiBFbnRpdHlNYXNrSW5DREFUQTsKIAotICAgIHJldHVybiB0ZXh0LT5kb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBFbnRpdHlNYXNrSW5IVE1MUENEQVRBIDogRW50aXR5
TWFza0luUENEQVRBOworICAgIHJldHVybiB0ZXh0LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSA/IEVudGl0eU1hc2tJbkhUTUxQQ0RBVEEgOiBFbnRpdHlNYXNrSW5QQ0RBVEE7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBU
ZXh0KiB0ZXh0KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbnN0IFRleHQmIHRleHQpCiB7CiAgICAgYXBwZW5kTm9kZVZhbHVlKHJl
c3VsdCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50KQorc3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdC
dWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKIHsKICAgICAvLyBGSVhNRTog
Q29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBv
c3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5j
bHVkZXMgIi0tPiIuCiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhLS0iKTsKQEAgLTM1OCwy
MSArMzU4LDIxIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQoU3QKICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLS0+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kWE1MRGVjbGFy
YXRpb24oU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKCFkb2N1bWVudC0+aGFzWE1MRGVjbGFyYXRpb24oKSkKKyAgICBpZiAoIWRvY3Vt
ZW50Lmhhc1hNTERlY2xhcmF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCI8P3htbCB2ZXJzaW9uPVwiIik7Ci0gICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudC0+eG1sVmVyc2lvbigpKTsKLSAgICBjb25zdCBTdHJpbmcmIGVuY29kaW5nID0gZG9jdW1l
bnQtPnhtbEVuY29kaW5nKCk7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudC54bWxWZXJzaW9u
KCkpOworICAgIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcgPSBkb2N1bWVudC54bWxFbmNvZGluZygp
OwogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJcIiBlbmNvZGluZz1cIiIpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kaW5n
KTsKICAgICB9Ci0gICAgaWYgKGRvY3VtZW50LT54bWxTdGFuZGFsb25lU3RhdHVzKCkgIT0gRG9j
dW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgeworICAgIGlmIChkb2N1bWVudC54bWxTdGFu
ZGFsb25lU3RhdHVzKCkgIT0gRG9jdW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXCIgc3RhbmRhbG9uZT1cIiIpOwotICAgICAgICBp
ZiAoZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSkKKyAgICAgICAgaWYgKGRvY3VtZW50LnhtbFN0
YW5kYWxvbmUoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJ5ZXMiKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5vIik7CkBAIC0z
ODEsMzIgKzM4MSwzMiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxEZWNsYXJh
CiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwiPz4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
RG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRU
eXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlJiBkb2N1bWVudFR5
cGUpCiB7Ci0gICAgaWYgKG4tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgaWYgKGRvY3VtZW50VHlw
ZS5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiPCFET0NUWVBFICIpOwotICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsKLSAg
ICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudFR5cGUubmFtZSgpKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZS5wdWJsaWNJZCgpLmlzRW1w
dHkoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFBVQkxJQyBcIiIpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGRvY3VtZW50VHlwZS5wdWJsaWNJZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwot
ICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghZG9j
dW1lbnRUeXBlLnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgJyk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChk
b2N1bWVudFR5cGUuc3lzdGVtSWQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewor
ICAgIH0gZWxzZSBpZiAoIWRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFNZU1RFTSBcIiIpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50VHlw
ZS5zeXN0ZW1JZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwogICAgIH0KLSAgICBp
ZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFkb2N1bWVudFR5
cGUuaW50ZXJuYWxTdWJzZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICcpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCdbJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
bi0+aW50ZXJuYWxTdWJzZXQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBl
LmludGVybmFsU3Vic2V0KCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCddJyk7CiAgICAgfQog
ICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKQEAgLTQyNCwxNCArNDI0LDE0IEBAIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmcKICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9
CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBw
ZW5kT3BlblRhZyhyZXN1bHQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCi0gICAgaWYgKGVsZW1l
bnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50
LT5hdHRyaWJ1dGVDb3VudCgpOworICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50LmF0dHJpYnV0ZUNvdW50KCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVtZW50LCBlbGVtZW50LT5hdHRyaWJ1dGVBdChp
KSwgbmFtZXNwYWNlcyk7CisgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVt
ZW50LCBlbGVtZW50LmF0dHJpYnV0ZUF0KGkpLCBuYW1lc3BhY2VzKTsKICAgICB9CiAKICAgICAv
LyBHaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMgdG8gYWRkIHRoZWlyIG93biBhdHRy
aWJ1dGVzLgpAQCAtNDQwLDI3ICs0NDAsMjcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudChTdAogICAgIGFwcGVuZENsb3NlVGFnKHJlc3VsdCwgZWxlbWVudCk7CiB9CiAK
LXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgcmVzdWx0
LmFwcGVuZCgnPCcpOwotICAgIGlmIChpblhNTEZyYWdtZW50U2VyaWFsaXphdGlvbigpICYmIG5h
bWVzcGFjZXMgJiYgZWxlbWVudC0+cHJlZml4KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKGluWE1M
RnJhZ21lbnRTZXJpYWxpemF0aW9uKCkgJiYgbmFtZXNwYWNlcyAmJiBlbGVtZW50LnByZWZpeCgp
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcv
VFIvRE9NLUxldmVsLTMtQ29yZS9uYW1lc3BhY2VzLWFsZ29yaXRobXMuaHRtbCNub3JtYWxpemVE
b2N1bWVudEFsZ28gd2Ugbm93IHNob3VsZCBjcmVhdGUKICAgICAgICAgLy8gYSBkZWZhdWx0IG5h
bWVzcGFjZSBkZWNsYXJhdGlvbiB0byBtYWtlIHRoaXMgbmFtZXNwYWNlIHdlbGwtZm9ybWVkLiBI
b3dldmVyLCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtbmFtZXMxMS8jeG1sUmVzZXJ2ZWQgc3Rh
dGVzCiAgICAgICAgIC8vICJUaGUgcHJlZml4IHhtbCBNVVNUIE5PVCBiZSBkZWNsYXJlZCBhcyB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuIiwgc28gdXNlIHRoZSB4bWwgcHJlZml4IGV4cGxpY2l0bHku
Ci0gICAgICAgIGlmIChlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSA9PSBYTUxOYW1lczo6eG1sTmFt
ZXNwYWNlVVJJKSB7CisgICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSgpID09IFhNTE5h
bWVzOjp4bWxOYW1lc3BhY2VVUkkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sQXRv
bSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgcmVzdWx0LmFwcGVuZChlbGVtZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwotICAg
IGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSB8fCAhZWxlbWVudC0+ZG9jdW1lbnQo
KS5pc0hUTUxEb2N1bWVudCgpKSAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVs
ZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIGFwcGVuZE5hbWVzcGFjZShyZXN1bHQsIGVsZW1lbnQt
PnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMsIGluWE1MRnJh
Z21lbnRTZXJpYWxpemF0aW9uKCkpOworICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudC5ub2RlTmFt
ZVByZXNlcnZpbmdDYXNlKCkpOworICAgIGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24o
KSB8fCAhZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpICYmIG5hbWVzcGFjZXMg
JiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgYXBwZW5kTmFt
ZXNwYWNlKHJlc3VsdCwgZWxlbWVudC5wcmVmaXgoKSwgZWxlbWVudC5uYW1lc3BhY2VVUkkoKSwg
Km5hbWVzcGFjZXMsIGluWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKCkpOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYg
KHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewotICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKQorICAgICAgICBpZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7IC8vIFhIVE1MIDEuMCA8LT4gSFRNTCBjb21wYXRpYmls
aXR5LgogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgfQpAQCAtNDkyLDkgKzQ5Miw5
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmdlbmVyYXRlVW5pcXVlUHIKICAgICB9IHdoaWxl
ICh0cnVlKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFN0
cmluZ0J1aWxkZXImIHJlc3VsdCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKIHsKLSAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOworICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LmRvY3VtZW50
KCkuaXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIApAQCAtNTIw
LDcgKzUyMCw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKIAog
ICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKIAotICAgIGlmIChlbGVtZW50LT5pc1VSTEF0dHJpYnV0
ZShhdHRyaWJ1dGUpKQorICAgIGlmIChlbGVtZW50LmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkp
CiAgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgZWxlbWVudCwg
YXR0cmlidXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwpAQCAt
NTQwLDE3ICs1NDAsMTcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0
aQogICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJdXT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBO
b2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlJiBu
b2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1lc3BhY2VzKQogICAg
ICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBzd2l0Y2ggKG5vZGUt
Pm5vZGVUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUoKSkgewogICAgIGNhc2Ug
Tm9kZTo6VEVYVF9OT0RFOgotICAgICAgICBhcHBlbmRUZXh0KHJlc3VsdCwgdG9UZXh0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKSk7CisgICAgICAgIGFwcGVuZFRleHQocmVzdWx0LCB0b1RleHQo
bm9kZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAg
ICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihu
b2RlKS0+ZGF0YSgpKTsKKyAgICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHRvQ29tbWVudChu
b2RlKS5kYXRhKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05P
REU6CiAgICAgICAgIGFwcGVuZFhNTERlY2xhcmF0aW9uKHJlc3VsdCwgdG9Eb2N1bWVudChub2Rl
KSk7CkBAIC01NTgsMTYgKzU1OCwxNiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dGFydE1hcmt1CiAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICAgICAgYXBw
ZW5kRG9jdW1lbnRUeXBlKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnRUeXBlKj4o
bm9kZSkpOworICAgICAgICBhcHBlbmREb2N1bWVudFR5cGUocmVzdWx0LCB0b0RvY3VtZW50VHlw
ZShub2RlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNU
UlVDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0
LCBzdGF0aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKS0+dGFyZ2V0
KCksIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpLT5kYXRh
KCkpOworICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0LCB0b1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbihub2RlKS50YXJnZXQoKSwgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
bm9kZSkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05P
REU6Ci0gICAgICAgIGFwcGVuZEVsZW1lbnQocmVzdWx0LCB0b0VsZW1lbnQoY29uc3RfY2FzdDxO
b2RlKj4obm9kZSkpLCBuYW1lc3BhY2VzKTsKKyAgICAgICAgYXBwZW5kRWxlbWVudChyZXN1bHQs
IHRvRWxlbWVudChub2RlKSwgbmFtZXNwYWNlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Tm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRDREFUQVNlY3Rpb24ocmVz
dWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKS0+ZGF0YSgpKTsKKyAg
ICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgdG9DREFUQVNlY3Rpb24obm9kZSkuZGF0
YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAg
ICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgpAQCAtNTg0LDM3ICs1ODQsMzcgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdQogLy8gMi4gRWxlbWVudHMgdy8gY2hpbGRy
ZW4gbmV2ZXIgc2VsZi1jbG9zZSBiZWNhdXNlIHRoZXkgdXNlIGEgc2VwYXJhdGUgZW5kIHRhZy4K
IC8vIDMuIEhUTUwgZWxlbWVudHMgd2hpY2ggZG8gbm90IGhhdmUgYSAiZm9yYmlkZGVuIiBlbmQg
dGFnIHdpbGwgY2xvc2Ugd2l0aCBhIHNlcGFyYXRlIGVuZCB0YWcuCiAvLyA0LiBPdGhlciBlbGVt
ZW50cyBzZWxmLWNsb3NlLgotYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkU2VsZkNsb3Nl
KGNvbnN0IE5vZGUqIG5vZGUpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRTZWxmQ2xv
c2UoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIWluWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQorICAgIGlmICghaW5Y
TUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiBub2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVz
KCkpCisgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudENhbm5vdEhhdmVFbmRU
YWcobm9kZSkpCisgICAgaWYgKG5vZGUuaXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIE1hcmt1cEFjY3VtdWxhdG9yOjplbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhj
b25zdCBOb2RlKiBub2RlKQorYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6ZWxlbWVudENhbm5vdEhh
dmVFbmRUYWcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkKKyAgICBpZiAoIW5vZGUuaXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBGSVhNRTogaWVGb3JiaWRzSW5zZXJ0SFRNTCBtYXkgbm90IGJlIHRoZSBy
aWdodCBmdW5jdGlvbiB0byBjYWxsIGhlcmUKICAgICAvLyBpZUZvcmJpZHNJbnNlcnRIVE1MIGlz
IHVzZWQgdG8gZGlzYWxsb3cgc2V0dGluZyBpbm5lckhUTUwvb3V0ZXJIVE1MCiAgICAgLy8gb3Ig
Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LiAgSXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgYWxpZ24g
d2l0aAogICAgIC8vIHdoaWNoIGVsZW1lbnRzIHNob3VsZCBiZSBzZXJpYWxpemVkIHcvbyBlbmQg
dGFncy4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+
aWVGb3JiaWRzSW5zZXJ0SFRNTCgpOworICAgIHJldHVybiB0b0hUTUxFbGVtZW50KG5vZGUpLmll
Rm9yYmlkc0luc2VydEhUTUwoKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwg
c2hvdWxkU2VsZkNsb3NlKG5vZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGVsZW1l
bnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKKyAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgp
IHx8IHNob3VsZFNlbGZDbG9zZShub2RlKSB8fCAoIW5vZGUuaGFzQ2hpbGROb2RlcygpICYmIGVs
ZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVz
dWx0LmFwcGVuZCgnPCcpOwogICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICByZXN1bHQuYXBw
ZW5kKHRvRWxlbWVudChub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICByZXN1
bHQuYXBwZW5kKHRvRWxlbWVudChub2RlKS5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwogICAg
IHJlc3VsdC5hcHBlbmQoJz4nKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
YXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw0OCArNjks
NTMgQEAgcHVibGljOgogICAgIE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qLCBFQWJz
b2x1dGVVUkxzLCBjb25zdCBSYW5nZSogPSAwLCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uID0gSFRN
TEZyYWdtZW50U2VyaWFsaXphdGlvbik7CiAgICAgdmlydHVhbCB+TWFya3VwQWNjdW11bGF0b3Io
KTsKIAotICAgIFN0cmluZyBzZXJpYWxpemVOb2RlcyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBu
b2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5KTsKLSAgICBTdHJpbmcgc2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSwgVmVjdG9yPFF1
YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRD
b21tZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgc2VyaWFs
aXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25s
eSk7CisgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5v
ZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNU
b1NraXApOwogCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0
aWVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEVu
dGl0eU1hc2spOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2Vz
KiA9IDApOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRp
YyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAubGVuZ3RoKCk7IH0KKwogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IE5vZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhT
dHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwgY29uc3QgVGV4dCYpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFt
ZXNwYWNlcyopOworCisgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhjb25zdCBOb2RlJiwgTmFtZXNw
YWNlcyogPSAwKTsKKworICAgIHZvaWQgYXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgY29u
c3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CisKKyAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3Vw
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBw
ZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJik7CisKICAgICB2b2lkIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCBib29sKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwg
RWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7Ci0gICAgYm9v
bCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKLSAgICBib29sIHNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7
CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IE5vZGUmLCBj
b25zdCBSYW5nZSosIEVudGl0eU1hc2spOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmLCBib29sIGFsbG93RW1wdHlEZWZhdWx0TlMgPSBm
YWxzZSk7Ci0gICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYsIFRleHQqKTsKLSAgICB2
b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1bWVudCop
OwotICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1
bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXIm
LCBjb25zdCBEb2N1bWVudCYpOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1
aWxkZXImLCBjb25zdCBEb2N1bWVudFR5cGUmKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRl
ciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRPcGVuVGFnKFN0cmlu
Z0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ2xvc2VU
YWcoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShT
dHJpbmdCdWlsZGVyJiwgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYs
IGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2Vj
dGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBhcHBlbmRTdGFy
dE1hcmt1cChTdHJpbmdCdWlsZGVyJiwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKLSAgICBi
b29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7Ci0gICAgYm9vbCBlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhjb25zdCBOb2RlKik7Ci0gICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoU3RyaW5n
QnVpbGRlciYsIGNvbnN0IE5vZGUqKTsKKworICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CisgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1
dGUoY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyYpOworICAgIGJvb2wgc2hvdWxkU2VsZkNs
b3NlKGNvbnN0IE5vZGUmKTsKKyAgICBib29sIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0
IE5vZGUmKTsKKyAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KGNvbnN0IFRleHQmKSBj
b25zdDsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3QgUmFu
Z2UqIGNvbnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIHJlc29sdmVVUkxJZk5l
ZWRlZChjb25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdm9pZCBhcHBl
bmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCos
IGNvbnN0IEF0dHJpYnV0ZSYpOwotICAgIHZvaWQgc2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNl
cyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25z
dCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgU3RyaW5nIHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50JiwgY29uc3QgU3RyaW5n
JikgY29uc3Q7CisgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIGNvbnN0IEF0dHJpYnV0ZSYpOworICAgIHZvaWQgc2Vy
aWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9T
a2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5h
bWU+KiB0YWdOYW1lc1RvU2tpcCk7CiAgICAgYm9vbCBpblhNTEZyYWdtZW50U2VyaWFsaXphdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTZXJpYWxpemF0aW9uID09IFhNTEZyYWdtZW50
U2VyaWFsaXphdGlvbjsgfQogICAgIHZvaWQgZ2VuZXJhdGVVbmlxdWVQcmVmaXgoUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IE5hbWVzcGFjZXMmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMzQgKzExNyw0OCBAQCBzdGF0aWMgdm9pZCBjb21w
bGV0ZVVSTHMoRG9jdW1lbnRGcmFnbWVuCiAgICAgICAgIGNoYW5nZXNbaV0uYXBwbHkoKTsKIH0K
ICAgICAKLWNsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIE1hcmt1cEFjY3Vt
dWxhdG9yIHsKK2NsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIEZJTkFMIDogcHVibGljIE1h
cmt1cEFjY3VtdWxhdG9yIHsKIHB1YmxpYzoKICAgICBlbnVtIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSB7IERvZXNGdWxseVNlbGVjdE5vZGUsIERvZXNOb3RGdWxseVNlbGVjdE5vZGUgfTsKIAogICAg
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVV
UkxzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgY29uc3QgUmFuZ2UqLCBOb2RlKiBoaWdoZXN0
Tm9kZVRvQmVTZXJpYWxpemVkID0gMCk7CisKICAgICBOb2RlKiBzZXJpYWxpemVOb2RlcyhOb2Rl
KiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3Ry
aW5nKHMpOyB9Ci0gICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSosIGJvb2wgY29udmVydEJsb2Nr
c1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxl
Y3ROb2RlKTsKLSAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqLCBE
b2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lkIHdyYXBXaXRoTm9kZShO
b2RlJiwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIFJhbmdlRnVsbHlTZWxl
Y3RzTm9kZSA9IERvZXNGdWxseVNlbGVjdE5vZGUpOworICAgIHZvaWQgd3JhcFdpdGhTdHlsZU5v
ZGUoU3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50JiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwog
ICAgIFN0cmluZyB0YWtlUmVzdWx0cygpOwogCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisKIHByaXZhdGU6Ci0gICAg
dm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5
U2V0KiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1l
bnQmLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHlsZU5vZGVD
bG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRl
eHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7Ci0gICAgU3RyaW5nIHJlbmRlcmVkVGV4dChj
b25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWVGb3JSYW5n
ZShjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1
bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBl
bGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KKworICAgIFN0cmluZyByZW5k
ZXJlZFRleHQoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlRm9yUmFuZ2UoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisKKyAgICB2b2lkIGFwcGVu
ZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiwgYm9vbCBhZGREaXNw
bGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0JikgT1ZFUlJJREU7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKikgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIGFwcGVu
ZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7CisgICAg
fQogCiAgICAgZW51bSBOb2RlVHJhdmVyc2FsTW9kZSB7IEVtaXRTdHJpbmcsIERvTm90RW1pdFN0
cmluZyB9OwogICAgIE5vZGUqIHRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0
YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZCwgTm9kZVRyYXZlcnNhbE1vZGUpOwogCi0gICAgYm9vbCBz
aG91bGRBbm5vdGF0ZSgpIHsgcmV0dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZTsgfQotICAgIGJvb2wgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKE5vZGUqIG5v
ZGUpIGNvbnN0CisgICAgYm9vbCBzaG91bGRBbm5vdGF0ZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9oaWdoZXN0Tm9kZVRvQmVTZXJpYWxpemVkICYmIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFs
aXplZC0+cGFyZW50Tm9kZSgpID09IG5vZGUtPnBhcmVudE5vZGUoKQotICAgICAgICAgICAgJiYg
bV93cmFwcGluZ1N0eWxlICYmIG1fd3JhcHBpbmdTdHlsZS0+c3R5bGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTsKKyAgICB9CisK
KyAgICBib29sIHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZShjb25zdCBOb2RlJiBub2RlKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFsaXplZCAmJiBt
X2hpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQtPnBhcmVudE5vZGUoKSA9PSBub2RlLnBhcmVudE5v
ZGUoKSAmJiBtX3dyYXBwaW5nU3R5bGUgJiYgbV93cmFwcGluZ1N0eWxlLT5zdHlsZSgpOwogICAg
IH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXA7CkBAIC0x
NjEsMjAgKzE3NSwyMCBAQCBpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1h
CiB7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZShOb2Rl
KiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3
cmFwV2l0aE5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewogICAgIFN0cmluZ0J1
aWxkZXIgbWFya3VwOwotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIGFw
cGVuZEVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQobm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSksIHJhbmdlRnVsbHlTZWxlY3Rz
Tm9kZSk7CisgICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBhcHBlbmRFbGVt
ZW50KG1hcmt1cCwgdG9FbGVtZW50KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlz
QmxvY2soJm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKICAgICAgICAg
YXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKICAgICBtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwLmFwcGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5v
ZGUpOwogICAgIGlmIChtX25vZGVzKQotICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7Cisg
ICAgICAgIG1fbm9kZXMtPmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1bWVudCYg
ZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAg
ICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1lbnQsIGlzQmxv
Y2spOwpAQCAtMTgyLDcgKzE5Niw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6Ondy
YXBXaXRoU3QKICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNCbG9jaykpOwog
fQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFn
KFN0cmluZ0J1aWxkZXImIG91dCwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBpc0Jsb2NrKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIFN0eWxlUHJvcGVydHlTZXQq
IHN0eWxlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICAvLyB3cmFw
cGluZ1N0eWxlRm9yU2VyaWFsaXphdGlvbiBzaG91bGQgaGF2ZSByZW1vdmVkIC13ZWJraXQtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICBBU1NFUlQocHJvcGVydHlNaXNzaW5nT3JFcXVh
bFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkp
OwpAQCAtMTkwLDcgKzIwNCw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0eWwKICAgICAgICAgb3V0LmFwcGVuZExpdGVyYWwoIjxkaXYgc3R5bGU9XCIiKTsKICAgICBl
bHNlCiAgICAgICAgIG91dC5hcHBlbmRMaXRlcmFsKCI8c3BhbiBzdHlsZT1cIiIpOwotICAgIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmFzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1M
RG9jdW1lbnQoKSk7CisgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+YXNUZXh0
KCksIGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpOwogICAgIG91dC5hcHBlbmRMaXRlcmFsKCJc
Ij4iKTsKIH0KIApAQCAtMjE1LDkgKzIyOSw5IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dGFrZVJlc3UKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZVdpdGhM
aXRlcmFsKCdcMCcsICIiKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCit2b2lkIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYg
dGV4dCkKIHsgICAgCi0gICAgY29uc3QgYm9vbCBwYXJlbnRJc1RleHRhcmVhID0gdGV4dC0+cGFy
ZW50RWxlbWVudCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LT5wYXJlbnRFbGVtZW50
KCkpOworICAgIGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IHRleHQucGFyZW50RWxlbWVu
dCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LnBhcmVudEVsZW1lbnQoKSk7CiAgICAg
Y29uc3QgYm9vbCB3cmFwcGluZ1NwYW4gPSBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUodGV4dCkg
JiYgIXBhcmVudElzVGV4dGFyZWE7CiAgICAgaWYgKHdyYXBwaW5nU3BhbikgewogICAgICAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB3cmFwcGluZ1N0eWxlID0gbV93cmFwcGluZ1N0eWxlLT5jb3B5
KCk7CkBAIC0yMjcsNjUgKzI0MSw2NSBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBpbmNsdWRlZCBpbiBm
b3JjZUlubGluZT8KICAgICAgICAgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlGbG9hdCwgQ1NTVmFsdWVOb25lKTsKIAotICAgICAgICBhcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKSwgJnRleHQtPmRvY3VtZW50KCkp
OworICAgICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5
bGUoKSwgdGV4dC5kb2N1bWVudCgpKTsKICAgICB9CiAKICAgICBpZiAoIXNob3VsZEFubm90YXRl
KCkgfHwgcGFyZW50SXNUZXh0YXJlYSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFRleHQob3V0LCB0ZXh0KTsKICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5k
ZXJlZFRleHQgPSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0
KSwgc2VsZWN0VGFnKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSAhZW5j
bG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb25zdF9jYXN0PFRleHQqPigm
dGV4dCkpLCBzZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVk
VGV4dCA/IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2Uo
dGV4dCwgbV9yYW5nZSk7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgICAgICBh
cHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVyLCBjb250ZW50LCAwLCBjb250
ZW50Lmxlbmd0aCgpLCBFbnRpdHlNYXNrSW5QQ0RBVEEpOwotICAgICAgICBvdXQuYXBwZW5kKGNv
bnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoYnVmZmVyLnRvU3RyaW5nKCksIHRleHQp
KTsKKyAgICAgICAgb3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0
KGJ1ZmZlci50b1N0cmluZygpLCAmdGV4dCkpOwogICAgIH0KIAogICAgIGlmICh3cmFwcGluZ1Nw
YW4pCiAgICAgICAgIG91dC5hcHBlbmQoc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CiB9CiAgICAgCi1T
dHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBu
b2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCitTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlJiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0g
ICAgaWYgKCFub2RlLT5pc1RleHROb2RlKCkpCisgICAgaWYgKCFub2RlLmlzVGV4dE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgY29uc3QgVGV4dCogdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obm9kZSk7CisgICAgY29uc3QgVGV4dCYgdGV4dE5vZGUg
PSB0b1RleHQobm9kZSk7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHVuc2ln
bmVkIGVuZE9mZnNldCA9IHRleHROb2RlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSB0ZXh0Tm9kZS5sZW5ndGgoKTsKIAotICAgIGlmIChyYW5nZSAmJiBub2RlID09IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpKQorICAgIGlmIChyYW5nZSAmJiAmbm9kZSA9PSByYW5nZS0+c3Rh
cnRDb250YWluZXIoKSkKICAgICAgICAgc3RhcnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQo
KTsKLSAgICBpZiAocmFuZ2UgJiYgbm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKCkpCisgICAg
aWYgKHJhbmdlICYmICZub2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAgICAgZW5k
T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwogCi0gICAgUG9zaXRpb24gc3RhcnQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zm
c2V0KTsKLSAgICBQb3NpdGlvbiBlbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29u
c3RfY2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7Ci0gICAgcmV0dXJuIHBsYWluVGV4dChS
YW5nZTo6Y3JlYXRlKCZub2RlLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKS5nZXQoKSk7CisgICAg
UG9zaXRpb24gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxO
b2RlKj4oJm5vZGUpLCBzdGFydE9mZnNldCk7CisgICAgUG9zaXRpb24gZW5kID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSwgZW5kT2Zmc2V0KTsK
KyAgICByZXR1cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUoJm5vZGUuZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCkuZ2V0KCkpOwogfQogCi1TdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnN0
cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQor
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0
IE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBub2RlLm5vZGVW
YWx1ZSgpOwogCi0gICAgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOwotICAgIGlmIChu
b2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKKyAgICBTdHJpbmcgc3RyID0gbm9kZS5ub2Rl
VmFsdWUoKTsKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQogICAgICAg
ICBzdHIudHJ1bmNhdGUocmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBpZiAobm9kZSA9PSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKSkKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkpCiAgICAgICAgIHN0ci5yZW1vdmUoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAg
IHJldHVybiBzdHI7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFkZERpc3Bs
YXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2
b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewotICAgIGNvbnN0IGJv
b2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCk7
CisgICAgY29uc3QgYm9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKIAotICAg
IGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSA/IGVsZW1l
bnQtPmF0dHJpYnV0ZUNvdW50KCkgOiAwOwotICAgIGNvbnN0IGJvb2wgc2hvdWxkQW5ub3RhdGVP
ckZvcmNlSW5saW5lID0gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0
ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOworICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVs
ZW1lbnQuaGFzQXR0cmlidXRlcygpID8gZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpIDogMDsKKyAg
ICBjb25zdCBib29sIHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSA9IGVsZW1lbnQuaXNIVE1M
RWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOwogICAg
IGNvbnN0IGJvb2wgc2hvdWxkT3ZlcnJpZGVTdHlsZUF0dHIgPSBzaG91bGRBbm5vdGF0ZU9yRm9y
Y2VJbmxpbmUgfHwgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQuYXR0cmlidXRlQXQoaSk7CiAgICAgICAgIC8v
IFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmlidXRlIHNlcGFyYXRlbHksIGJlbG93LgogICAg
ICAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzdHlsZUF0dHIgJiYgc2hvdWxkT3ZlcnJpZGVT
dHlsZUF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5NywxNyArMzExLDE3IEBAIHZv
aWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KIAogICAgICAgICBpZiAoc2hv
dWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZSA9IG1fd3JhcHBpbmdTdHlsZS0+Y29weSgpOwotICAgICAgICAgICAgbmV3SW5saW5lU3R5
bGUtPnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoZWxlbWVudCk7Ci0gICAg
ICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9m
Tm9kZShlbGVtZW50KTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0
aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSk7
CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhT
dHlsZU9mTm9kZShjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsK
IAotICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpKQotICAgICAgICAgICAgbmV3
SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxlKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihlbGVtZW50KS0+aW5saW5lU3R5bGUoKSk7CisgICAgICAgIGlmIChlbGVtZW50LmlzU3R5bGVk
RWxlbWVudCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5p
bmxpbmVTdHlsZSgpKQorICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0
eWxlKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5pbmxpbmVTdHls
ZSgpKTsKIAogICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5lKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkKLSAgICAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24odG9IVE1MRWxlbWVudChl
bGVtZW50KSk7CisgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm1lcmdlU3R5bGVGcm9t
UnVsZXNGb3JTZXJpYWxpemF0aW9uKHRvSFRNTEVsZW1lbnQoY29uc3RfY2FzdDxFbGVtZW50Kj4o
JmVsZW1lbnQpKSk7CiAKICAgICAgICAgICAgIGlmIChhZGREaXNwbGF5SW5saW5lKQogICAgICAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5mb3JjZUlubGluZSgpOwpAQCAtMzcxLDEyICszODUs
MTIgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gQWRkIHRoZSBub2RlIHRvIHRoZSBtYXJrdXAgaWYgd2Un
cmUgbm90IHNraXBwaW5nIHRoZSBkZXNjZW5kYW50cwogICAgICAgICAgICAgaWYgKHNob3VsZEVt
aXQpCi0gICAgICAgICAgICAgICAgYXBwZW5kU3RhcnRUYWcobik7CisgICAgICAgICAgICAgICAg
YXBwZW5kU3RhcnRUYWcoKm4pOwogCiAgICAgICAgICAgICAvLyBJZiBub2RlIGhhcyBubyBjaGls
ZHJlbiwgY2xvc2UgdGhlIHRhZyBub3cuCiAgICAgICAgICAgICBpZiAoIW4tPmNoaWxkTm9kZUNv
dW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRW1pdCkKLSAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kRW5kVGFnKG4pOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmRUYWco
Km4pOwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBuOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBvcGVuZWRUYWcgPSB0cnVlOwpAQCAtMzk0LDcgKzQwOCw3IEBA
IE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgLy8gTm90IGF0IHRoZSBlbmQgb2YgdGhlIHJh
bmdlLCBjbG9zZSBhbmNlc3RvcnMgdXAgdG8gc2libGluZyBvZiBuZXh0IG5vZGUuCiAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRh
ZyhhbmNlc3Rvcik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRhZygqYW5jZXN0b3Ip
OwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBhbmNlc3RvcjsKICAgICAgICAgICAgICAg
ICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgIH0KQEAgLTQxMCw3
ICs0MjQsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAg
ICAgICAgICAgICAgICAgIC8vIG9yIGIpIGFuY2VzdG9ycyB0aGF0IHdlIG5ldmVyIGVuY291bnRl
cmVkIGR1cmluZyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgc3RhcnRpbmcgYXQgc3RhcnROb2RlOgog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJl
bnQpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwV2l0aE5vZGUocGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBXaXRoTm9kZSgqcGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9
IHBhcmVudDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDQsMzUgKzU1
OCwzMyBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwCiAKIC8vIEZJ
WE1FOiBTaG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RB
bm5vdGF0ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBh
bmQgc3R5bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1h
cmt1cFN0cmluZygpCi1zdGF0aWMgU3RyaW5nIGNyZWF0ZU1hcmt1cEludGVybmFsKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgUmFuZ2UqIHJhbmdlLCBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdl
LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywKK3N0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJu
YWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFJhbmdlJiB1
cGRhdGVkUmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLAogICAgIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlIHNob3VsZEFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIEVBYnNv
bHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAg
ICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVCh1cGRhdGVkUmFuZ2UpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcsIChBU0NJ
SUxpdGVyYWwoIjxiciBjbGFzcz1cIiIgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUgIlwiPiIpKSk7
CiAKLSAgICBib29sIGNvbGxhcHNlZCA9IHVwZGF0ZWRSYW5nZS0+Y29sbGFwc2VkKEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgIGJvb2wgY29sbGFwc2VkID0gdXBkYXRlZFJhbmdlLmNvbGxhcHNl
ZChBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoY29sbGFwc2VkKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHVwZGF0ZWRSYW5n
ZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgTm9k
ZSogY29tbW9uQW5jZXN0b3IgPSB1cGRhdGVkUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
QVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBOb2RlKiBib2R5ID0gZW5jbG9zaW5nTm9kZVdpdGhU
YWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIGJvZHlUYWcpOwogICAgIE5v
ZGUqIGZ1bGx5U2VsZWN0ZWRSb290ID0gMDsKICAgICAvLyBGSVhNRTogRG8gdGhpcyBmb3IgYWxs
IGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90IGp1c3QgdGhlIGJvZHkuCi0gICAgaWYgKGJvZHkg
JiYgYXJlUmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRz
T2ZOb2RlKGJvZHkpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJhbmdlKSkKKyAgICBpZiAo
Ym9keSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgJnJhbmdlKSkKICAg
ICAgICAgZnVsbHlTZWxlY3RlZFJvb3QgPSBib2R5OwotICAgIE5vZGUqIHNwZWNpYWxDb21tb25B
bmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCh1cGRhdGVkUmFuZ2UsIHNob3Vs
ZEFubm90YXRlKTsKLSAgICBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcihub2Rl
cywgc2hvdWxkUmVzb2x2ZVVSTHMsIHNob3VsZEFubm90YXRlLCB1cGRhdGVkUmFuZ2UsIHNwZWNp
YWxDb21tb25BbmNlc3Rvcik7Ci0gICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS0+cGFz
dExhc3ROb2RlKCk7Ci0KLSAgICBOb2RlKiBzdGFydE5vZGUgPSB1cGRhdGVkUmFuZ2UtPmZpcnN0
Tm9kZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQodXBkYXRlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7CisgICAgTm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9y
VG9XcmFwTWFya3VwKCZ1cGRhdGVkUmFuZ2UsIHNob3VsZEFubm90YXRlKTsKKworICAgIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCBzaG91bGRSZXNvbHZlVVJMcywg
c2hvdWxkQW5ub3RhdGUsICZ1cGRhdGVkUmFuZ2UsIHNwZWNpYWxDb21tb25BbmNlc3Rvcik7Cisg
ICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS5wYXN0TGFzdE5vZGUoKTsKKworICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IHVwZGF0ZWRSYW5nZS5maXJzdE5vZGUoKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVN0YXJ0KHVwZGF0ZWRSYW5nZS5zdGFydFBvc2l0aW9uKCksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5n
ZS5lbmRQb3NpdGlvbigpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAoc2hvdWxkQW5u
b3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSAmJiBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5l
QWZ0ZXIodmlzaWJsZVN0YXJ0KSkgewogICAgICAgICBpZiAodmlzaWJsZVN0YXJ0ID09IHZpc2li
bGVFbmQucHJldmlvdXMoKSkKICAgICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVT
dHJpbmc7CkBAIC02MTEsNyArNjIzLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRl
cm5hbChEb2N1bQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTaW5j
ZSB0aGlzIG5vZGUgYW5kIGFsbCB0aGUgb3RoZXIgYW5jZXN0b3JzIGFyZSBub3QgaW4gdGhlIHNl
bGVjdGlvbiB3ZSB3YW50IHRvIHNldCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgdG8gRG9lc05vdEZ1
bGx5U2VsZWN0Tm9kZQogICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgc3R5bGVzIHRoYXQgYWZm
ZWN0IHRoZSBleHRlcmlvciBvZiB0aGUgbm9kZSBhcmUgbm90IGluY2x1ZGVkLgotICAgICAgICAg
ICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZShhbmNlc3RvciwgY29udmVydEJsb2Nrc1Rv
SW5saW5lcywgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OkRvZXNOb3RGdWxseVNlbGVjdE5vZGUp
OworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZSgqYW5jZXN0b3IsIGNv
bnZlcnRCbG9ja3NUb0lubGluZXMsIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpEb2VzTm90RnVs
bHlTZWxlY3ROb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlcykKICAg
ICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGFuY2VzdG9yKTsKQEAgLTYzMCwxMyArNjQyLDEw
IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJuYWwoRG9jdW0KICAgICByZXR1cm4g
YWNjdW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25z
dCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSBzaG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1
dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5n
ZSYgcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBz
aG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKTsKLSAgICBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdlID0gcmFuZ2U7CisgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpOworICAgIGNvbnN0IFJhbmdl
KiB1cGRhdGVkUmFuZ2UgPSAmcmFuZ2U7CiAKICNpZiBFTkFCTEUoREVMRVRJT05fVUkpCiAgICAg
Ly8gRGlzYWJsZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2Vy
aWFsaXplZCBpbnRvIHRoZSBtYXJrdXAsCkBAIC02NDYsMTI2ICs2NTUsNDMgQEAgU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogCiAgICAgUmVmUHRyPFJhbmdlPiB1cGRh
dGVkUmFuZ2VSZWY7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHVwZGF0ZWRSYW5nZVJlZiA9
IGZyYW1lLT5lZGl0b3IoKS5hdm9pZEludGVyc2VjdGlvbldpdGhEZWxldGVCdXR0b25Db250cm9s
bGVyKHJhbmdlKTsKKyAgICAgICAgdXBkYXRlZFJhbmdlUmVmID0gZnJhbWUtPmVkaXRvcigpLmF2
b2lkSW50ZXJzZWN0aW9uV2l0aERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoJnJhbmdlKTsKICAgICAg
ICAgdXBkYXRlZFJhbmdlID0gdXBkYXRlZFJhbmdlUmVmLmdldCgpOwogICAgICAgICBpZiAoIXVw
ZGF0ZWRSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KICNl
bmRpZgogCi0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFsKCZkb2N1bWVudCwgcmFuZ2Us
IHVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFs
KGRvY3VtZW50LCByYW5nZSwgKnVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBj
b252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CiB9CiAKLVBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFy
c2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQorUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBQYXJzZXJDb250ZW50
UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3kpCiB7CiAgICAgLy8gV2UgdXNlIGEgZmFrZSBib2R5
IGVsZW1lbnQgaGVyZSB0byB0cmljayB0aGUgSFRNTCBwYXJzZXIgdG8gdXNpbmcgdGhlIEluQm9k
eSBpbnNlcnRpb24gbW9kZS4KLSAgICBSZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBmYWtlQm9keSA9
IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7
CisgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKIAogICAgIGZyYWdtZW50LT5w
YXJzZUhUTUwobWFya3VwLCBmYWtlQm9keS5nZXQoKSwgcGFyc2VyQ29udGVudFBvbGljeSk7CiAK
LSAgICBpZiAoIWJhc2VVUkwuaXNFbXB0eSgpICYmIGJhc2VVUkwgIT0gYmxhbmtVUkwoKSAmJiBi
YXNlVVJMICE9IGRvY3VtZW50LT5iYXNlVVJMKCkpCisgICAgaWYgKCFiYXNlVVJMLmlzRW1wdHko
KSAmJiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC5iYXNlVVJM
KCkpCiAgICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7CiAKICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBmcmFn
bWVudE1hcmtlclRhZ1tdID0gIndlYmtpdC1mcmFnbWVudC1tYXJrZXIiOwotCi1zdGF0aWMgYm9v
bCBmaW5kTm9kZXNTdXJyb3VuZGluZ0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBSZWZQdHI8
Tm9kZT4mIG5vZGVCZWZvcmVDb250ZXh0LCBSZWZQdHI8Tm9kZT4mIG5vZGVBZnRlckNvbnRleHQp
Ci17Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFICYmIHN0YXRpY19jYXN0PENoYXJhY3RlckRh
dGEqPihub2RlKS0+ZGF0YSgpID09IGZyYWdtZW50TWFya2VyVGFnKSB7Ci0gICAgICAgICAgICBp
ZiAoIW5vZGVCZWZvcmVDb250ZXh0KQotICAgICAgICAgICAgICAgIG5vZGVCZWZvcmVDb250ZXh0
ID0gbm9kZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5vZGVBZnRlckNv
bnRleHQgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQg
dHJpbUZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBOb2RlKiBub2RlQmVmb3Jl
Q29udGV4dCwgTm9kZSogbm9kZUFmdGVyQ29udGV4dCkKLXsKLSAgICBSZWZQdHI8Tm9kZT4gbmV4
dDsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0LT5pc0Rl
c2NlbmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5n
ZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMobm9kZUFmdGVyQ29udGV4dCkp
OwotICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIEFT
U0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBpZiAobm9kZUJlZm9yZUNvbnRleHQgPT0gbm9k
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChub2RlQWZ0ZXJDb250
ZXh0LT5wYXJlbnROb2RlKCkpOwotICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBub2RlQWZ0
ZXJDb250ZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7Ci0gICAgICAgIG5vZGUtPnBh
cmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBt
YXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLAotICAg
IGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50
UG9saWN5KQotewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGUgbWFya3VwIGFscmVhZHkgY29udGFpbnMgdGhlc2UgbWFya2Vycy4KLQotICAgIFN0cmluZ0J1
aWxkZXIgdGFnZ2VkTWFya3VwOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLmxlZnQo
ZnJhZ21lbnRTdGFydCkpOwotICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KHRh
Z2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQo
bWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdtZW50U3Rh
cnQpKTsKLSAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAs
IGZyYWdtZW50TWFya2VyVGFnKTsKLSAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJz
dHJpbmcoZnJhZ21lbnRFbmQpKTsKLQotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0YWdn
ZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdGFnZ2VkTWFy
a3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwotICAgIFJlZlB0
cjxEb2N1bWVudD4gdGFnZ2VkRG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIFVSTCgpKTsK
LSAgICB0YWdnZWREb2N1bWVudC0+dGFrZUFsbENoaWxkcmVuRnJvbSh0YWdnZWRGcmFnbWVudC5n
ZXQoKSk7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbm9kZUJlZm9yZUNvbnRleHQ7Ci0gICAgUmVmUHRy
PE5vZGU+IG5vZGVBZnRlckNvbnRleHQ7Ci0gICAgaWYgKCFmaW5kTm9kZXNTdXJyb3VuZGluZ0Nv
bnRleHQodGFnZ2VkRG9jdW1lbnQuZ2V0KCksIG5vZGVCZWZvcmVDb250ZXh0LCBub2RlQWZ0ZXJD
b250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQoKSwKLSAgICAgICAgcG9zaXRpb25BZnRl
ck5vZGUobm9kZUJlZm9yZUNvbnRleHQuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
LAotICAgICAgICBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyQ29udGV4dC5nZXQoKSkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBy
YW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAg
Tm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFu
ZEFwcGVhcmFuY2VXaXRoTm9SZW5kZXJlcihjb21tb25BbmNlc3Rvcik7Ci0KLSAgICAvLyBXaGVu
IHRoZXJlJ3MgYSBzcGVjaWFsIGNvbW1vbiBhbmNlc3RvciBvdXRzaWRlIG9mIHRoZSBmcmFnbWVu
dCwgd2UgbXVzdCBpbmNsdWRlIGl0IGFzIHdlbGwgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0aGUgc3Ry
dWN0dXJlIGFuZCBhcHBlYXJhbmNlIG9mIHRoZSBmcmFnbWVudC4gRm9yIGV4YW1wbGUsIGlmIHRo
ZSBmcmFnbWVudCBjb250YWlucwotICAgIC8vIFRELCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGVu
Y2xvc2luZyBUQUJMRSB0YWcgYXMgd2VsbC4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKLSAgICBpZiAo
c3BlY2lhbENvbW1vbkFuY2VzdG9yKQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoc3Bl
Y2lhbENvbW1vbkFuY2VzdG9yLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBlbHNlCi0gICAg
ICAgIGZyYWdtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRvQ29udGFpbmVyTm9kZShjb21tb25B
bmNlc3RvcikpOwotCi0gICAgdHJpbUZyYWdtZW50KGZyYWdtZW50LmdldCgpLCBub2RlQmVmb3Jl
Q29udGV4dC5nZXQoKSwgbm9kZUFmdGVyQ29udGV4dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gZnJh
Z21lbnQ7Ci19Ci0KLVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxk
cmVuT25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lw
LCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKK1N0cmluZyBj
cmVhdGVNYXJrdXAoY29uc3QgTm9kZSYgbm9kZSwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHks
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwLCBFRnJhZ21lbnRTZXJpYWxpemF0
aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKIHsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgSFRNTEVsZW1lbnQqIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSAwOwogI2lmIEVOQUJMRShERUxFVElPTl9VSSkKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLmNv
bnRhaW5lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFudE9mKGRlbGV0
ZUJ1dHRvbkNvbnRhaW5lckVsZW1lbnQpKQorICAgICAgICBpZiAobm9kZS5pc0Rlc2NlbmRhbnRP
ZihkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogICAgIH0KICNlbmRpZgorCiAgICAgTWFya3VwQWNjdW11bGF0b3IgYWNjdW11
bGF0b3Iobm9kZXMsIHNob3VsZFJlc29sdmVVUkxzLCAwLCBmcmFnbWVudFNlcmlhbGl6YXRpb24p
OwotICAgIHJldHVybiBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhjb25zdF9jYXN0PE5vZGUq
Pihub2RlKSwgZGVsZXRlQnV0dG9uQ29udGFpbmVyRWxlbWVudCwgY2hpbGRyZW5Pbmx5LCB0YWdO
YW1lc1RvU2tpcCk7CisgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGNvbnN0
X2Nhc3Q8Tm9kZSY+KG5vZGUpLCBkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50LCBjaGlsZHJl
bk9ubHksIHRhZ05hbWVzVG9Ta2lwKTsKIH0KIAogc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZy
b21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBoLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
QEAgLTg5Niw1NCArODIyLDI5IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ20KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgVmVjdG9yPE5vZGUqPiYgbm9kZXMpCi17Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSNpZiBFTkFCTEUoREVMRVRJT05fVUkpCi0gICAgLy8gZGlzYWJs
ZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2VyaWFsaXplZCBp
bnRvIHRoZSBtYXJrdXAKLSAgICBEZWxldGVCdXR0b25Db250cm9sbGVyRGlzYWJsZVNjb3BlKGRv
Y3VtZW50LT5mcmFtZSgpKTsKLSNlbmRpZgotCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIHNp
emVfdCBzaXplID0gbm9kZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlRGVmYXVs
dFBhcmFncmFwaEVsZW1lbnQoKmRvY3VtZW50KTsKLSAgICAgICAgZWxlbWVudC0+YXBwZW5kQ2hp
bGQobm9kZXNbaV0sIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoZWxlbWVudC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIH0K
LQotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KIFN0cmluZyBkb2N1bWVudFR5
cGVTdHJpbmcoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHJldHVybiBjcmVhdGVN
YXJrdXAoZG9jdW1lbnQuZG9jdHlwZSgpKTsKKyAgICBEb2N1bWVudFR5cGUqIGRvY3VtZW50VHlw
ZSA9IGRvY3VtZW50LmRvY3R5cGUoKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZSkKKyAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqZG9jdW1lbnRU
eXBlKTsKIH0KIAotU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSogbm9kZSkKK1N0
cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZXZl
ciAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8KICAgICBTdHJpbmcgbWFya3VwU3Ry
aW5nID0gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1ZGVOb2RlLCAwKTsKIAotICAgIE5vZGU6Ok5v
ZGVUeXBlIG5vZGVUeXBlID0gbm9kZS0+bm9kZVR5cGUoKTsKKyAgICBOb2RlOjpOb2RlVHlwZSBu
b2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKICAgICBpZiAobm9kZVR5cGUgIT0gTm9kZTo6RE9D
VU1FTlRfTk9ERSAmJiBub2RlVHlwZSAhPSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpCi0gICAg
ICAgIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhub2RlLT5kb2N1bWVudCgpKSAr
IG1hcmt1cFN0cmluZzsKKyAgICAgICAgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5n
KG5vZGUuZG9jdW1lbnQoKSkgKyBtYXJrdXBTdHJpbmc7CiAKICAgICByZXR1cm4gbWFya3VwU3Ry
aW5nOwogfQogCi1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UpCitT
dHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTm9kZSogbm9kZSA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUqIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDcgQEAgZW51bSBF
QWJzb2x1dGVVUkxzIHsgRG9Ob3RSZXNvbHZlVVJMcywgUgogZW51bSBFRnJhZ21lbnRTZXJpYWxp
emF0aW9uIHsgSFRNTEZyYWdtZW50U2VyaWFsaXphdGlvbiwgWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uIH07CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGlj
eSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5k
LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kpOwotUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNv
bnN0IFZlY3RvcjxOb2RlKj4mKTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29u
dGVudCk7CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5u
ZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ks
IEV4Y2VwdGlvbkNvZGUmKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpOwogUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgSFRNTEVs
ZW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5LCBFeGNlcHRpb25Db2RlJik7CkBAIC02NCwxMSAr
NjIsMTEgQEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKik7CiB2b2lkIHJlcGxhY2VDaGls
ZHJlbldpdGhGcmFnbWVudChDb250YWluZXJOb2RlJiwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiwgRXhjZXB0aW9uQ29kZSYpOwogdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChDb250
YWluZXJOb2RlJiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi1TdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmdlKiwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSA9IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgYm9vbCBjb252ZXJ0Qmxv
Y2tzVG9JbmxpbmVzID0gZmFsc2UsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzKTsK
LVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRl
Tm9kZSwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQWJzb2x1dGVVUkxzID0gRG9Ob3RSZXNvbHZlVVJM
cywgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCA9IDAsIEVGcmFnbWVudFNl
cmlhbGl6YXRpb24gPSBIVE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKTsKK1N0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZ2UmLCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlID0gRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBib29sIGNvbnZlcnRCbG9ja3NU
b0lubGluZXMgPSBmYWxzZSwgRUFic29sdXRlVVJMcyA9IERvTm90UmVzb2x2ZVVSTHMpOworU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlJiwgRUNoaWxkcmVuT25seSA9IEluY2x1ZGVOb2Rl
LCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwID0gMCwgRUZyYWdtZW50U2VyaWFs
aXphdGlvbiA9IEhUTUxGcmFnbWVudFNlcmlhbGl6YXRpb24pOwogCi1TdHJpbmcgY3JlYXRlRnVs
bE1hcmt1cChjb25zdCBOb2RlKik7Ci1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5n
ZSopOworU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSYpOworU3RyaW5nIGNyZWF0
ZUZ1bGxNYXJrdXAoY29uc3QgUmFuZ2UmKTsKIAogU3RyaW5nIHVybFRvTWFya3VwKGNvbnN0IFVS
TCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCBi
b29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyCiAgICAgICAgICAgICBsb2Fk
ZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoYXJjaGl2ZS5nZXQoKSk7CiAKICAgICAgICAgU3Ry
aW5nIG1hcmt1cFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobWFpblJlc291cmNlLT5kYXRhKCkt
PmRhdGEoKSwgbWFpblJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7Ci0gICAgICAgIGFkZEZyYWdt
ZW50KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJp
bmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVu
dCkpOworICAgICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1l
LmRvY3VtZW50KCksIG1hcmt1cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dT
Y3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24g
MTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjIsNyArNDYyLDcgQEAgYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFk
ZXI6OnJlYWRXZWJBcgogICAgICAgICAgICAgbG9hZGVyLT5hZGRBbGxBcmNoaXZlUmVzb3VyY2Vz
KGFyY2hpdmUuZ2V0KCkpOwogCiAgICAgICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpOwotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERp
c2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CisgICAgICAgIGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1h
aW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTE0LDcgKzUxNCw3IEBAIGJvb2wgRWRp
dG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRNTCgKICAgICBpZiAoc3RyaW5nT21pdHRpbmdN
aWNyb3NvZnRQcmVmaXguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBzdHJp
bmdPbWl0dGluZ01pY3Jvc29mdFByZWZpeCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRp
bmdBbmRQbHVnaW5Db250ZW50KTsKKyAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgc3RyaW5nT21pdHRpbmdNaWNyb3NvZnRQcmVmaXgsIGVt
cHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAgICAgcmV0
dXJuIGZyYWdtZW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0NSwxMiArMzQ1LDEyIEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFEKIAogU3RyaW5nIEhUTUxFbGVtZW50Ojppbm5lckhUTUwoKSBj
b25zdAogewotICAgIHJldHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAg
ICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiBTdHJpbmcg
SFRNTEVsZW1lbnQ6Om91dGVySFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1
cCh0aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1M
RWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJ
KHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEyICs3NywyNyBAQCBpbmxpbmUgSFRNTEZy
YW1lT3duZXJFbGVtZW50JiB0b0ZyYW1lT3duCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
cmFtZU93bmVyRWxlbWVudCY+KG5vZGUpOwogfQogCitpbmxpbmUgY29uc3QgSFRNTEZyYW1lT3du
ZXJFbGVtZW50JiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0ZyYW1lT3duZXJFbGVtZW50
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQm
Pihub2RlKTsKK30KKwogaW5saW5lIEhUTUxGcmFtZU93bmVyRWxlbWVudCogdG9GcmFtZU93bmVy
RWxlbWVudChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFub2RlIHx8IG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOwogfQogCitpbmxpbmUgY29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50KiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQmKTsKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKKwogY2xhc3MgU3ViZnJhbWVM
b2FkaW5nRGlzYWJsZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN1YmZyYW1lTG9hZGluZ0Rp
c2FibGVyKENvbnRhaW5lck5vZGUmIHJvb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDEy
ICs4NSw2IEBAIHZvaWQgSFRNTFRlbXBsYXRlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG8KICAgICBk
b2N1bWVudCgpLmVuc3VyZVRlbXBsYXRlRG9jdW1lbnQoKS0+YWRvcHRJZk5lZWRlZChtX2NvbnRl
bnQuZ2V0KCkpOwogfQogCi0jaWZuZGVmIE5ERUJVRwotY29uc3QgSFRNTFRlbXBsYXRlRWxlbWVu
dCogdG9IVE1MVGVtcGxhdGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSAmJiBub2RlLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50Kj4obm9kZSk7Ci19CiAjZW5kaWYKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxh
dGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxh
dGVFbGVtZW50LmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRlbXBsYXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMSArNTQsNyBAQCBwcml2
YXRlOgogICAgIG11dGFibGUgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IG1fY29udGVudDsKIH07
CiAKLWNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQqIHRvSFRNTFRlbXBsYXRlRWxlbWVudChjb25z
dCBOb2RlKik7Ci0KLWlubGluZSBIVE1MVGVtcGxhdGVFbGVtZW50KiB0b0hUTUxUZW1wbGF0ZUVs
ZW1lbnQoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gY29uc3RfY2FzdDxIVE1MVGVtcGxhdGVF
bGVtZW50Kj4odG9IVE1MVGVtcGxhdGVFbGVtZW50KHN0YXRpY19jYXN0PGNvbnN0IE5vZGUqPihu
b2RlKSkpOwotfQotCi0jaWZkZWYgTkRFQlVHCi0KLS8vIFRoZSBkZWJ1ZyB2ZXJzaW9uIG9mIHRo
aXMsIHdpdGggYXNzZXJ0aW9ucywgaXMgbm90IGlubGluZWQuCi1pbmxpbmUgY29uc3QgSFRNTFRl
bXBsYXRlRWxlbWVudCogdG9IVE1MVGVtcGxhdGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17
Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQqPihub2Rl
KTsKLX0KLSNlbmRpZiAvLyBOREVCVUcKK0VMRU1FTlRfVFlQRV9DQVNUUyhIVE1MVGVtcGxhdGVF
bGVtZW50KQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01FZGl0b3IuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA2LDEwICsyMDYs
MTAgQEAgcHJpdmF0ZToKIGNsYXNzIERPTUVkaXRvcjo6U2V0T3V0ZXJIVE1MQWN0aW9uIDogcHVi
bGljIEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbiB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
U2V0T3V0ZXJIVE1MQWN0aW9uKTsKIHB1YmxpYzoKLSAgICBTZXRPdXRlckhUTUxBY3Rpb24oTm9k
ZSogbm9kZSwgY29uc3QgU3RyaW5nJiBodG1sKQorICAgIFNldE91dGVySFRNTEFjdGlvbihOb2Rl
JiBub2RlLCBjb25zdCBTdHJpbmcmIGh0bWwpCiAgICAgICAgIDogSW5zcGVjdG9ySGlzdG9yeTo6
QWN0aW9uKCJTZXRPdXRlckhUTUwiKQogICAgICAgICAsIG1fbm9kZShub2RlKQotICAgICAgICAs
IG1fbmV4dFNpYmxpbmcobm9kZS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgLCBtX25leHRTaWJs
aW5nKG5vZGUubmV4dFNpYmxpbmcoKSkKICAgICAgICAgLCBtX2h0bWwoaHRtbCkKICAgICAgICAg
LCBtX25ld05vZGUoMCkKICAgICAgICAgLCBtX2hpc3RvcnkoYWRvcHRQdHIobmV3IEluc3BlY3Rv
ckhpc3RvcnkoKSkpCkBAIC0yNDEsNyArMjQxLDcgQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0
ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJlZjxOb2RlPiBtX25vZGU7CiAgICAg
UmVmUHRyPE5vZGU+IG1fbmV4dFNpYmxpbmc7CiAgICAgU3RyaW5nIG1faHRtbDsKICAgICBTdHJp
bmcgbV9vbGRIVE1MOwpAQCAtMzc0LDcgKzM3NCw3IEBAIGJvb2wgRE9NRWRpdG9yOjpyZW1vdmVB
dHRyaWJ1dGUoRWxlbWVudCoKICAgICByZXR1cm4gbV9oaXN0b3J5LT5wZXJmb3JtKGFkb3B0UHRy
KG5ldyBSZW1vdmVBdHRyaWJ1dGVBY3Rpb24oZWxlbWVudCwgbmFtZSkpLCBlYyk7CiB9CiAKLWJv
b2wgRE9NRWRpdG9yOjpzZXRPdXRlckhUTUwoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBodG1s
LCBOb2RlKiogbmV3Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCitib29sIERPTUVkaXRvcjo6c2V0
T3V0ZXJIVE1MKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5ld05vZGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIE93blB0cjxTZXRPdXRlckhUTUxBY3Rpb24+IGFj
dGlvbiA9IGFkb3B0UHRyKG5ldyBTZXRPdXRlckhUTUxBY3Rpb24obm9kZSwgaHRtbCkpOwogICAg
IFNldE91dGVySFRNTEFjdGlvbiogcmF3QWN0aW9uID0gYWN0aW9uLmdldCgpOwpAQCAtNDM5LDcg
KzQzOSw3IEBAIGJvb2wgRE9NRWRpdG9yOjpyZW1vdmVBdHRyaWJ1dGUoRWxlbWVudCoKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIERPTUVkaXRvcjo6c2V0T3V0ZXJIVE1MKE5vZGUqIG5v
ZGUsIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5ld05vZGUsIEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZykKK2Jvb2wgRE9NRWRpdG9yOjpzZXRPdXRlckhUTUwoTm9kZSYgbm9kZSwgY29uc3Qg
U3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQog
ewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJvb2wgcmVzdWx0ID0gc2V0T3V0ZXJI
VE1MKG5vZGUsIGh0bWwsIG5ld05vZGUsIGVjKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
RE9NRWRpdG9yLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCByZW1vdmVDaGlsZChOb2RlKiBwYXJlbnROb2RlLCBOb2RlKiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIGJvb2wgc2V0QXR0cmlidXRlKEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHJlbW92ZUF0
dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgYm9vbCBzZXRPdXRlckhUTUwoTm9kZSosIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5l
d05vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHNldE91dGVySFRNTChOb2RlJiwgY29u
c3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJv
b2wgcmVwbGFjZVdob2xlVGV4dChUZXh0KiwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgYm9vbCByZXBsYWNlQ2hpbGQoTm9kZSogcGFyZW50Tm9kZSwgUGFzc1JlZlB0
cjxOb2RlPiBuZXdOb2RlLCBOb2RlKiBvbGROb2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9v
bCBzZXROb2RlVmFsdWUoTm9kZSogcGFyZW50Tm9kZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOwpAQCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCByZW1vdmVD
aGlsZChOb2RlKiBwYXJlbnROb2RlLCBOb2RlKiwgRXJyb3JTdHJpbmcqKTsKICAgICBib29sIHNl
dEF0dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBFcnJvclN0cmluZyopOwogICAgIGJvb2wgcmVtb3ZlQXR0cmlidXRlKEVsZW1lbnQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEVycm9yU3RyaW5nKik7Ci0gICAgYm9vbCBzZXRPdXRlckhUTUwo
Tm9kZSosIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5ld05vZGUsIEVycm9yU3RyaW5nKik7
CisgICAgYm9vbCBzZXRPdXRlckhUTUwoTm9kZSYsIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoq
IG5ld05vZGUsIEVycm9yU3RyaW5nKik7CiAgICAgYm9vbCByZXBsYWNlV2hvbGVUZXh0KFRleHQq
LCBjb25zdCBTdHJpbmcmIHRleHQsIEVycm9yU3RyaW5nKik7CiAKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkocmV2aXNpb24g
MTU2OTgwKQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOSwzMiArMTE5LDMyIEBAIHZvaWQgRE9NUGF0Y2hTdXBwb3J0
OjpwYXRjaERvY3VtZW50KGNvbnMKICAgICB9CiB9CiAKLU5vZGUqIERPTVBhdGNoU3VwcG9ydDo6
cGF0Y2hOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2Rl
JiBlYykKK05vZGUqIERPTVBhdGNoU3VwcG9ydDo6cGF0Y2hOb2RlKE5vZGUmIG5vZGUsIGNvbnN0
IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICAvLyBEb24ndCBwYXJz
ZSA8aHRtbD4gYXMgYSBmcmFnbWVudC4KLSAgICBpZiAobm9kZS0+aXNEb2N1bWVudE5vZGUoKSB8
fCAobm9kZS0+cGFyZW50Tm9kZSgpICYmIG5vZGUtPnBhcmVudE5vZGUoKS0+aXNEb2N1bWVudE5v
ZGUoKSkpIHsKKyAgICBpZiAobm9kZS5pc0RvY3VtZW50Tm9kZSgpIHx8IChub2RlLnBhcmVudE5v
ZGUoKSAmJiBub2RlLnBhcmVudE5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkpIHsKICAgICAgICAg
cGF0Y2hEb2N1bWVudChtYXJrdXApOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBO
b2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKKyAgICBOb2Rl
KiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLnByZXZpb3VzU2libGluZygpOwogICAgIC8vIEZJWE1F
OiBUaGlzIGNvZGUgc2hvdWxkIHVzZSBvbmUgb2YgY3JlYXRlRnJhZ21lbnQqIGluIG1hcmt1cC5o
CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVu
dDo6Y3JlYXRlKCptX2RvY3VtZW50KTsKICAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1l
bnQoKSkKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlSFRNTChtYXJrdXAsIG5vZGUtPnBhcmVudEVs
ZW1lbnQoKSA/IG5vZGUtPnBhcmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxl
bWVudCgpKTsKKyAgICAgICAgZnJhZ21lbnQtPnBhcnNlSFRNTChtYXJrdXAsIG5vZGUucGFyZW50
RWxlbWVudCgpID8gbm9kZS5wYXJlbnRFbGVtZW50KCkgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVs
ZW1lbnQoKSk7CiAgICAgZWxzZQotICAgICAgICBmcmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCBu
b2RlLT5wYXJlbnRFbGVtZW50KCkgPyBub2RlLT5wYXJlbnRFbGVtZW50KCkgOiBtX2RvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgICAgIGZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAs
IG5vZGUucGFyZW50RWxlbWVudCgpID8gbm9kZS5wYXJlbnRFbGVtZW50KCkgOiBtX2RvY3VtZW50
LT5kb2N1bWVudEVsZW1lbnQoKSk7CiAKICAgICAvLyBDb21wb3NlIHRoZSBvbGQgbGlzdC4KLSAg
ICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOwotICAgIFZl
Y3RvcjxPd25QdHI8RGlnZXN0PiA+IG9sZExpc3Q7CisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50
Tm9kZSA9IG5vZGUucGFyZW50Tm9kZSgpOworICAgIFZlY3RvcjxPd25QdHI8RGlnZXN0Pj4gb2xk
TGlzdDsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgb2xkTGlzdC5hcHBl
bmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAwKSk7CiAKICAgICAvLyBDb21wb3NlIHRoZSBuZXcgbGlz
dC4KICAgICBTdHJpbmcgbWFya3VwQ29weSA9IG1hcmt1cC5sb3dlcigpOwogICAgIFZlY3RvcjxP
d25QdHI8RGlnZXN0PiA+IG5ld0xpc3Q7Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9IHBhcmVudE5v
ZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbm9kZTsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZCAhPSAmbm9kZTsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKICAgICAgICAgbmV3
TGlzdC5hcHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAwKSk7CiAgICAgZm9yIChOb2RlKiBjaGls
ZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFnTmFtZShoZWFkVGFnKSAmJiAhY2hp
bGQtPmZpcnN0Q2hpbGQoKSAmJiBtYXJrdXBDb3B5LmZpbmQoIjwvaGVhZD4iKSA9PSBub3RGb3Vu
ZCkKQEAgLTE1MywxMyArMTUzLDEzIEBAIE5vZGUqIERPTVBhdGNoU3VwcG9ydDo6cGF0Y2hOb2Rl
KE5vZGUqIG4KICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBIVE1MNSBwYXJzZXIgaW5zZXJ0cyBl
bXB0eSA8Ym9keT4gdGFnIHdoZW5ldmVyIGl0IHBhcnNlcyA8L2hlYWQ+CiAgICAgICAgIG5ld0xp
c3QuYXBwZW5kKGNyZWF0ZURpZ2VzdChjaGlsZCwgJm1fdW51c2VkTm9kZXNNYXApKTsKICAgICB9
Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUtPm5leHRTaWJsaW5nKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlLm5l
eHRTaWJsaW5nKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAg
ICBuZXdMaXN0LmFwcGVuZChjcmVhdGVEaWdlc3QoY2hpbGQsIDApKTsKIAogICAgIGlmICghaW5u
ZXJQYXRjaENoaWxkcmVuKHBhcmVudE5vZGUsIG9sZExpc3QsIG5ld0xpc3QsIGVjKSkgewogICAg
ICAgICAvLyBGYWxsIGJhY2sgdG8gdG90YWwgcmVwbGFjZS4KICAgICAgICAgZWMgPSAwOwotICAg
ICAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZXBsYWNlQ2hpbGQocGFyZW50Tm9kZSwgZnJhZ21lbnQu
cmVsZWFzZSgpLCBub2RlLCBlYykpCisgICAgICAgIGlmICghbV9kb21FZGl0b3ItPnJlcGxhY2VD
aGlsZChwYXJlbnROb2RlLCBmcmFnbWVudC5yZWxlYXNlKCksICZub2RlLCBlYykpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIHByZXZpb3VzU2libGluZyA/IHByZXZp
b3VzU2libGluZy0+bmV4dFNpYmxpbmcoKSA6IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmgJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+RE9N
UGF0Y2hTdXBwb3J0KCk7CiAKICAgICB2b2lkIHBhdGNoRG9jdW1lbnQoY29uc3QgU3RyaW5nJiBt
YXJrdXApOwotICAgIE5vZGUqIHBhdGNoTm9kZShOb2RlKiwgY29uc3QgU3RyaW5nJiBtYXJrdXAs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBOb2RlKiBwYXRjaE5vZGUoTm9kZSYsIGNvbnN0IFN0cmlu
ZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6CiAgICAgc3RydWN0IERpZ2Vz
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzY4LDcgKzc2OCw3IEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTChFcnIKICAgICBpZiAoIW5vZGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgICpvdXRlckhUTUwgPSBjcmVhdGVNYXJrdXAobm9kZSk7CisgICAg
Km91dGVySFRNTCA9IGNyZWF0ZU1hcmt1cCgqbm9kZSk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldE91dGVySFRNTChFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGludCBub2RlSWQs
IGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQpAQCAtNzk0LDcgKzc5NCw3IEBAIHZvaWQgSW5zcGVj
dG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnIKICAgICB9CiAKICAgICBOb2RlKiBuZXdOb2Rl
ID0gMDsKLSAgICBpZiAoIW1fZG9tRWRpdG9yLT5zZXRPdXRlckhUTUwobm9kZSwgb3V0ZXJIVE1M
LCAmbmV3Tm9kZSwgZXJyb3JTdHJpbmcpKQorICAgIGlmICghbV9kb21FZGl0b3ItPnNldE91dGVy
SFRNTCgqbm9kZSwgb3V0ZXJIVE1MLCAmbmV3Tm9kZSwgZXJyb3JTdHJpbmcpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAoIW5ld05vZGUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCShyZXZpc2lvbiAx
NTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJjaGl2ZS9jZi9MZWdhY3lXZWJBcmNo
aXZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQxLDcgKzQ0MSw3IEBAIFBhc3NSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXIKICAgICB9CiAgICAgICAgIAogICAgIFZlY3RvcjxO
b2RlKj4gbm9kZUxpc3Q7Ci0gICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGNyZWF0ZU1hcmt1cChu
b2RlLCBJbmNsdWRlTm9kZSwgJm5vZGVMaXN0LCBEb05vdFJlc29sdmVVUkxzLCB0YWdOYW1lc1Rv
RmlsdGVyLmdldCgpKTsKKyAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gY3JlYXRlTWFya3VwKCpu
b2RlLCBJbmNsdWRlTm9kZSwgJm5vZGVMaXN0LCBEb05vdFJlc29sdmVVUkxzLCB0YWdOYW1lc1Rv
RmlsdGVyLmdldCgpKTsKICAgICBOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSA9IG5vZGUtPm5vZGVU
eXBlKCk7CiAgICAgaWYgKG5vZGVUeXBlICE9IE5vZGU6OkRPQ1VNRU5UX05PREUgJiYgbm9kZVR5
cGUgIT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKQogICAgICAgICBtYXJrdXBTdHJpbmcgPSBk
b2N1bWVudFR5cGVTdHJpbmcobm9kZS0+ZG9jdW1lbnQoKSkgKyBtYXJrdXBTdHJpbmc7CkBAIC00
NzYsMjIgKzQ3NiwyMSBAQCBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFy
CiBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZShS
YW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUqIHN0YXJ0Q29udGFpbmVyID0gcmFu
Z2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikKLSAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAgICBEb2N1bWVu
dCYgZG9jdW1lbnQgPSBzdGFydENvbnRhaW5lci0+ZG9jdW1lbnQoKTsKIAogICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzICJmb3IgaW50ZXJjaGFu
Z2UiLiBJcyB0aGF0IHJpZ2h0PyBTZWUgdGhlIHByZXZpb3VzIG1ldGhvZC4KLSAgICBTdHJpbmcg
bWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKGRvY3VtZW50KSArIGNyZWF0ZU1hcmt1
cChyYW5nZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKTsKKyAgICBWZWN0b3I8
Tm9kZSo+IG5vZGVMaXN0OworICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVT
dHJpbmcoZG9jdW1lbnQpICsgY3JlYXRlTWFya3VwKCpyYW5nZSwgJm5vZGVMaXN0LCBBbm5vdGF0
ZUZvckludGVyY2hhbmdlKTsKIAogICAgIHJldHVybiBjcmVhdGUobWFya3VwU3RyaW5nLCBmcmFt
ZSwgbm9kZUxpc3QsIDApOwogfQpAQCAtNTg1LDE1ICs1ODQsMTggQEAgUGFzc1JlZlB0cjxMZWdh
Y3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcgogUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBM
ZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFtZSkKIHsKICAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICBpZiAo
IWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFzZWxlY3Rpb25SYW5nZSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OwotICAgIFN0cmluZyBt
YXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJpbmcoKmRvY3VtZW50KSArIGNyZWF0ZU1hcmt1
cChzZWxlY3Rpb25SYW5nZS5nZXQoKSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hhbmdl
KTsKKyAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKCpkb2N1bWVu
dCkgKyBjcmVhdGVNYXJrdXAoKnNlbGVjdGlvblJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UpOwogCiAgICAgUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IGFyY2hpdmUgPSBj
cmVhdGUobWFya3VwU3RyaW5nLCBmcmFtZSwgbm9kZUxpc3QsIDApOwogICAgIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkocmV2aXNpb24g
MTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRy
b2xsZXI6OmNvbnRleHRNZW51SQogCiAgICAgICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBm
cmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgICAg
ICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KGRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRpb25zKTsKKyAgICAgICAg
ICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUoKmRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRpb25zKTsKICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKICAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnJl
dmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOwogICAg
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNp
b24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY0LDE4ICs2NCwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXN0YXRpYyBib29sIGlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKE5vZGUqIG5vZGUpCitzdGF0aWMg
Ym9vbCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShjb25zdCBOb2RlJiBub2RlKQogewotICAgIGlm
ICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQorICAgIGlmICghbm9kZS5pc0hUTUxFbGVtZW50KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9I
VE1MRWxlbWVudChub2RlKTsKLSAgICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjptZXRhVGFnKSkKKyAgICBjb25zdCBIVE1MRWxlbWVudCYgZWxlbWVudCA9IHRvSFRNTEVsZW1l
bnQobm9kZSk7CisgICAgaWYgKCFlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhVGFn
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6QXR0
cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwotICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkp
IHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnQtPmF0dHJpYnV0ZUNv
dW50KCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgPSBl
bGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKKyAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkp
IHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1lbnQuYXR0cmlidXRlQ291
bnQoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVs
ZW1lbnQuYXR0cmlidXRlQXQoaSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRl
YWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRyaWJ1dGUgaWYgdGhleSBoYXZlIGEgbmFtZXNw
YWNlLgogICAgICAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXR0cmli
dXRlLm5hbWUoKS50b1N0cmluZygpLCBhdHRyaWJ1dGUudmFsdWUoKS5zdHJpbmcoKSkpOwogICAg
ICAgICB9CkBAIC04NCw5ICs4NCw5IEBAIHN0YXRpYyBib29sIGlzQ2hhcnNldFNwZWNpZnlpbmdO
b2RlKE5vZGUKICAgICByZXR1cm4gdGV4dEVuY29kaW5nLmlzVmFsaWQoKTsKIH0KIAotc3RhdGlj
IGJvb2wgc2hvdWxkSWdub3JlRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQorc3RhdGljIGJvb2wg
c2hvdWxkSWdub3JlRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewotICAgIHJldHVy
biBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6bm9zY3JpcHRUYWcpIHx8IGlzQ2hhcnNldFNwZWNpZnlpbmdO
b2RlKGVsZW1lbnQpOworICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpz
Y3JpcHRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6Om5vc2NyaXB0VGFnKSB8
fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsKIH0KIAogc3RhdGljIGNvbnN0IFF1
YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGNvbnN0IEhUTUxGcmFtZU93
bmVyRWxlbWVudCYgZnJhbWVPd25lcikKQEAgLTk1LDY0ICs5NSw2MyBAQCBzdGF0aWMgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgZnJhbWVPd25lclVSCiAgICAgcmV0dXJuIGlzSFRNTE9iamVjdEVsZW1l
bnQoZnJhbWVPd25lcikgPyBIVE1MTmFtZXM6OmRhdGFBdHRyIDogSFRNTE5hbWVzOjpzcmNBdHRy
OwogfQogCi1jbGFzcyBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgOiBwdWJsaWMgV2ViQ29y
ZTo6TWFya3VwQWNjdW11bGF0b3IgeworY2xhc3MgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
IEZJTkFMIDogcHVibGljIFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yIHsKIHB1YmxpYzoKLSAg
ICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXIqLCBEb2N1bWVudCos
IFZlY3RvcjxOb2RlKj4qKTsKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNl
cmlhbGl6ZXImLCBEb2N1bWVudCYsIFZlY3RvcjxOb2RlKj4qKTsKICAgICB2aXJ0dWFsIH5TZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3IoKTsKIAotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOwotICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMq
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVy
JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVu
ZFRhZyhOb2RlKik7Ci0KIHByaXZhdGU6Ci0gICAgUGFnZVNlcmlhbGl6ZXIqIG1fc2VyaWFsaXpl
cjsKLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBQYWdlU2VyaWFsaXplciYgbV9zZXJp
YWxpemVyOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRleHQoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFRleHQmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5h
bWVzcGFjZXMqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKSBPVkVSUklE
RTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKGNvbnN0IE5vZGUmKSBPVkVSUklERTsK
IH07CiAKLVNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6U2VyaWFsaXplck1hcmt1cEFjY3Vt
dWxhdG9yKFBhZ2VTZXJpYWxpemVyKiBzZXJpYWxpemVyLCBEb2N1bWVudCogZG9jdW1lbnQsIFZl
Y3RvcjxOb2RlKj4qIG5vZGVzKQorU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjpTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIsIERvY3VtZW50
JiBkb2N1bWVudCwgVmVjdG9yPE5vZGUqPiogbm9kZXMpCiAgICAgOiBNYXJrdXBBY2N1bXVsYXRv
cihub2RlcywgUmVzb2x2ZUFsbFVSTHMpCiAgICAgLCBtX3NlcmlhbGl6ZXIoc2VyaWFsaXplcikK
ICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiAgICAgLy8gTWFya3VwQWNjdW11bGF0b3Ig
ZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28gd2UgYWRkIGl0IGV4cGxp
Y2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVkLgotICAgIGlm
IChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LT54bWxTdGFuZGFs
b25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQotICAgICAgICBhcHBlbmRTdHJp
bmcoIjw/eG1sIHZlcnNpb249XCIiICsgbV9kb2N1bWVudC0+eG1sVmVyc2lvbigpICsgIlwiIGVu
Y29kaW5nPVwiIiArIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSArICJcIj8+Iik7CisgICAgaWYgKG1f
ZG9jdW1lbnQuaXNYSFRNTERvY3VtZW50KCkgfHwgbV9kb2N1bWVudC54bWxTdGFuZGFsb25lKCkg
fHwgbV9kb2N1bWVudC5pc1NWR0RvY3VtZW50KCkpCisgICAgICAgIGFwcGVuZFN0cmluZygiPD94
bWwgdmVyc2lvbj1cIiIgKyBtX2RvY3VtZW50LnhtbFZlcnNpb24oKSArICJcIiBlbmNvZGluZz1c
IiIgKyBtX2RvY3VtZW50LmNoYXJzZXQoKSArICJcIj8+Iik7CiB9CiAKIFNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcigpCiB7CiB9CiAKLXZv
aWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXIm
IG91dCwgVGV4dCogdGV4dCkKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYgdGV4dCkKIHsKLSAgICBFbGVt
ZW50KiBwYXJlbnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgaWYgKHBhcmVudCAmJiAh
c2hvdWxkSWdub3JlRWxlbWVudChwYXJlbnQpKQorICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQu
cGFyZW50RWxlbWVudCgpOworICAgIGlmIChwYXJlbnQgJiYgIXNob3VsZElnbm9yZUVsZW1lbnQo
KnBhcmVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4
dCk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNw
YWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxlbWVudCkpCiAgICAg
ICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgbmFtZXNw
YWNlcyk7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcp
KSB7CisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7CiAg
ICAgICAgIG91dC5hcHBlbmQoIjxtZXRhIGNoYXJzZXQ9XCIiKTsKLSAgICAgICAgb3V0LmFwcGVu
ZChtX2RvY3VtZW50LT5jaGFyc2V0KCkpOworICAgICAgICBvdXQuYXBwZW5kKG1fZG9jdW1lbnQu
Y2hhcnNldCgpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiXCI+Iik7CiAgICAgfQogCiAgICAgLy8g
RklYTUU6IEZvciBvYmplY3QgKHBsdWdpbnMpIHRhZ3MgYW5kIHZpZGVvIHRhZyB3ZSBjb3VsZCBy
ZXBsYWNlIHRoZW0gYnkgYW4gaW1hZ2Ugb2YgdGhlaXIgY3VycmVudCBjb250ZW50cy4KIH0KIAot
dm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMo
U3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3Bh
Y2VzKQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJp
YnV0ZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBOYW1lc3Bh
Y2VzKiBuYW1lc3BhY2VzKQogewotICAgIGlmICghZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVu
dCgpKQorICAgIGlmICghZWxlbWVudC5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHRvRnJhbWVP
d25lckVsZW1lbnQoZWxlbWVudCk7Ci0gICAgRnJhbWUqIGZyYW1lID0gZnJhbWVPd25lci0+Y29u
dGVudEZyYW1lKCk7CisgICAgY29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBmcmFtZU93bmVy
ID0gdG9GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KTsKKyAgICBGcmFtZSogZnJhbWUgPSBmcmFt
ZU93bmVyLmNvbnRlbnRGcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTYxLDEzICsxNjAsMTMgQEAgdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBuZWVkIHRvIGdpdmUgYSBmYWtl
IGxvY2F0aW9uIHRvIGJsYW5rIGZyYW1lcyBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRo
ZSBzZXJpYWxpemVkIGZyYW1lLgotICAgIHVybCA9IG1fc2VyaWFsaXplci0+dXJsRm9yQmxhbmtG
cmFtZShmcmFtZSk7Ci0gICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVudCwgQXR0cmlidXRl
KGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmluZygpKSwg
bmFtZXNwYWNlcyk7CisgICAgdXJsID0gbV9zZXJpYWxpemVyLnVybEZvckJsYW5rRnJhbWUoZnJh
bWUpOworICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsIEF0dHJpYnV0ZShmcmFtZU93
bmVyVVJMQXR0cmlidXRlTmFtZShmcmFtZU93bmVyKSwgdXJsLnN0cmluZygpKSwgbmFtZXNwYWNl
cyk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWco
Tm9kZSogbm9kZSkKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRU
YWcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYm
ICFzaG91bGRJZ25vcmVFbGVtZW50KHRvRWxlbWVudChub2RlKSkpCisgICAgaWYgKG5vZGUuaXNF
bGVtZW50Tm9kZSgpICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHRvRWxlbWVudChub2RlKSkpCiAg
ICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcobm9kZSk7CiB9CiAKQEAgLTIx
MCwxNCArMjA5LDE0IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW0K
ICAgICB9CiAKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzOwotICAgIFNlcmlhbGl6ZXJNYXJrdXBB
Y2N1bXVsYXRvciBhY2N1bXVsYXRvcih0aGlzLCBkb2N1bWVudCwgJm5vZGVzKTsKKyAgICBTZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3IoKnRoaXMsICpkb2N1bWVudCwgJm5v
ZGVzKTsKICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkp
OwogICAgIENTdHJpbmcgZGF0YTsKICAgICBpZiAoIXRleHRFbmNvZGluZy5pc1ZhbGlkKCkpIHsK
ICAgICAgICAgLy8gRklYTUU6IGlmcmFtZXMgdXNlZCBhcyBpbWFnZXMgdHJpZ2dlciB0aGlzLiBX
ZSBzaG91bGQgZGVhbCB3aXRoIHRoZW0gY29ycmVjdGx5LgogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0b3Iuc2VyaWFsaXplTm9kZXMoZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpLCAwLCBJbmNsdWRlTm9kZSk7CisgICAgU3RyaW5nIHRleHQgPSBh
Y2N1bXVsYXRvci5zZXJpYWxpemVOb2RlcygqZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAw
LCBJbmNsdWRlTm9kZSk7CiAgICAgQ1N0cmluZyBmcmFtZUhUTUwgPSB0ZXh0RW5jb2RpbmcuZW5j
b2RlKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2Rh
Ymxlcyk7CiAgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIGRvY3VtZW50LT5z
dWdnZXN0ZWRNSU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShmcmFtZUhUTUwuZGF0YSgp
LCBmcmFtZUhUTUwubGVuZ3RoKCkpKSk7CiAgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQkocmV2
aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3ICszNjEsNyBAQCBQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRG9j
dW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5sb2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNl
cyhjb3JlQXJjaGl2ZS5nZXQoKSk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50
ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJp
bmcuZ2V0KCksIG1haW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cFN0cmluZy5nZXQoKSwgbWFpblJlc291cmNl
LT51cmwoKSwgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZnJhZ21lbnQpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysr
IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYxMyw3ICs2MTMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKERvY3VtZW50KiBkb2N1
CiAKICAgICAgICAgLy8gRklYTUU6IEFjY29yZGluZyB0byBYTUxIdHRwUmVxdWVzdCBMZXZlbCAy
LCB0aGlzIHNob3VsZCB1c2UgdGhlIERvY3VtZW50LmlubmVySFRNTCBhbGdvcml0aG0KICAgICAg
ICAgLy8gZnJvbSB0aGUgSFRNTDUgc3BlY2lmaWNhdGlvbiB0byBzZXJpYWxpemUgdGhlIGRvY3Vt
ZW50LgotICAgICAgICBTdHJpbmcgYm9keSA9IGNyZWF0ZU1hcmt1cChkb2N1bWVudCk7CisgICAg
ICAgIFN0cmluZyBib2R5ID0gY3JlYXRlTWFya3VwKCpkb2N1bWVudCk7CiAKICAgICAgICAgLy8g
RklYTUU6IHRoaXMgc2hvdWxkIHVzZSB2YWx1ZSBvZiBkb2N1bWVudC5pbnB1dEVuY29kaW5nIHRv
IGRldGVybWluZSB0aGUgZW5jb2RpbmcgdG8gdXNlLgogICAgICAgICBUZXh0RW5jb2RpbmcgZW5j
b2RpbmcgPSBVVEY4RW5jb2RpbmcoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxTZXJp
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1MU2VyaWFsaXpl
ci5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxTZXJpYWxp
emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBTdHJpbmcgWE1MU2VyaWFs
aXplcjo6c2VyaWFsaXplVG9TdHJpbmcoCiAgICAgICAgIGVjID0gVHlwZUVycm9yOwogICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAgIHJldHVybiBjcmVhdGVNYXJrdXAobm9kZSwg
SW5jbHVkZU5vZGUsIDAsIERvTm90UmVzb2x2ZVVSTHMsIDAsIFhNTEZyYWdtZW50U2VyaWFsaXph
dGlvbik7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqbm9kZSwgSW5jbHVkZU5vZGUsIDAsIERv
Tm90UmVzb2x2ZVVSTHMsIDAsIFhNTEZyYWdtZW50U2VyaWFsaXphdGlvbik7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29y
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJ
KHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzExNiw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+
IFhTTFRQcm9jZXNzb3I6OnRyYW4KICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3Ry
aW5nIHJlc3VsdFN0cmluZzsKICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7Ci0gICAgaWYgKCF0
cmFuc2Zvcm1Ub1N0cmluZyhzb3VyY2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVzdWx0U3RyaW5n
LCByZXN1bHRFbmNvZGluZykpCisgICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmluZygqc291cmNlTm9k
ZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcpKQogICAgICAg
ICByZXR1cm4gMDsKICAgICByZXR1cm4gY3JlYXRlRG9jdW1lbnRGcm9tU291cmNlKHJlc3VsdFN0
cmluZywgcmVzdWx0RW5jb2RpbmcsIHJlc3VsdE1JTUVUeXBlLCBzb3VyY2VOb2RlLCAwKTsKIH0K
QEAgLTEzNCw3ICsxMzQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFhTTFRQcm9j
ZXNzCiAgICAgaWYgKG91dHB1dERvYy0+aXNIVE1MRG9jdW1lbnQoKSkKICAgICAgICAgcmVzdWx0
TUlNRVR5cGUgPSAidGV4dC9odG1sIjsKIAotICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoc291
cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcpKQor
ICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoKnNvdXJjZU5vZGUsIHJlc3VsdE1JTUVUeXBlLCBy
ZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0
dXJuIGNyZWF0ZUZyYWdtZW50Rm9yVHJhbnNmb3JtVG9GcmFnbWVudChyZXN1bHRTdHJpbmcsIHJl
c3VsdE1JTUVUeXBlLCBvdXRwdXREb2MpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hT
TFRQcm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nl
c3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICB+WFNM
VFByb2Nlc3NvcigpOwogCiAgICAgdm9pZCBzZXRYU0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNM
U3R5bGVTaGVldD4gc3R5bGVTaGVldCkgeyBtX3N0eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9Ci0g
ICAgYm9vbCB0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlN
RVR5cGUsIFN0cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKKyAg
ICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUmIHNvdXJjZSwgU3RyaW5nJiByZXN1bHRNSU1F
VHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpOwogICAg
IFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJp
bmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBz
b3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9kZSwgRnJhbWUqIGZyYW1lKTsKICAgICAKICAg
ICAvLyBET00gbWV0aG9kcwpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JM
aWJ4c2x0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nv
ckxpYnhzbHQuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNM
VFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAg
c3RhdGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0UAogCiAgICAgICAgIC8vIEFj
Y29yZGluZyB0byBNb3ppbGxhIGRvY3VtZW50YXRpb24sIHRoZSBub2RlIG11c3QgYmUgYSBEb2N1
bWVudCBub2RlLCBhbiB4c2w6c3R5bGVzaGVldCBvciB4c2w6dHJhbnNmb3JtIGVsZW1lbnQuCiAg
ICAgICAgIC8vIEJ1dCB3ZSBqdXN0IHVzZSB0ZXh0IGNvbnRlbnQgcmVnYXJkbGVzcyBvZiBub2Rl
IHR5cGUuCi0gICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5nKGNyZWF0ZU1hcmt1
cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKKyAgICAgICAgY2FjaGVkU3R5bGVzaGVldC0+cGFyc2VT
dHJpbmcoY3JlYXRlTWFya3VwKCpzdHlsZXNoZWV0Um9vdE5vZGUpKTsKICAgICB9CiAKICAgICBp
ZiAoIWNhY2hlZFN0eWxlc2hlZXQgfHwgIWNhY2hlZFN0eWxlc2hlZXQtPmRvY3VtZW50KCkpCkBA
IC0yNjUsMTAgKzI2NSwxMCBAQCBzdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hl
ZXRQCiAgICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hlZXQtPmNvbXBpbGVTdHlsZVNoZWV0KCk7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZyb21Ob2RlKE5vZGUqIHNvdXJj
ZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKK3N0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERv
Y1B0ckZyb21Ob2RlKE5vZGUmIHNvdXJjZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKIHsKLSAg
ICBSZWY8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQoc291cmNlTm9kZS0+ZG9jdW1lbnQoKSk7Ci0g
ICAgYm9vbCBzb3VyY2VJc0RvY3VtZW50ID0gKHNvdXJjZU5vZGUgPT0gJm93bmVyRG9jdW1lbnQu
Z2V0KCkpOworICAgIFJlZjxEb2N1bWVudD4gb3duZXJEb2N1bWVudChzb3VyY2VOb2RlLmRvY3Vt
ZW50KCkpOworICAgIGJvb2wgc291cmNlSXNEb2N1bWVudCA9ICgmc291cmNlTm9kZSA9PSAmb3du
ZXJEb2N1bWVudC5nZXQoKSk7CiAKICAgICB4bWxEb2NQdHIgc291cmNlRG9jID0gMDsKICAgICBp
ZiAoc291cmNlSXNEb2N1bWVudCAmJiBvd25lckRvY3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKSkK
QEAgLTMwMCw5ICszMDAsOSBAQCBzdGF0aWMgaW5saW5lIFN0cmluZyByZXN1bHRNSU1FVHlwZSh4
bWxECiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi94bWwiOwogfQogCi1ib29sIFhTTFRQcm9jZXNz
b3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUs
IFN0cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKQorYm9vbCBYU0xU
UHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlJiBzb3VyY2VOb2RlLCBTdHJpbmcmIG1p
bWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZykKIHsK
LSAgICBSZWY8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQoc291cmNlTm9kZS0+ZG9jdW1lbnQoKSk7
CisgICAgUmVmPERvY3VtZW50PiBvd25lckRvY3VtZW50KHNvdXJjZU5vZGUuZG9jdW1lbnQoKSk7
CiAKICAgICBzZXRYU0xUTG9hZENhbGxCYWNrKGRvY0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9j
dW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCkpOwogICAgIHhzbHRTdHlsZXNoZWV0UHRyIHNo
ZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1fc3R5bGVzaGVldCwgbV9zdHlsZXNoZWV0Um9v
dE5vZGUuZ2V0KCkpOwpJbmRleDogU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMTU2OTgzKQorKysg
U291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcg
QEAKKzIwMTMtMTAtMDUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBD
VFRFOiBUaHJlYWQgcmVmZXJlbmNlcyB0aHJvdWdoIG1hcmt1cC5oCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjI0MDMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1t
OgorICAgICAgICAoLVtET01Ob2RlIG1hcmt1cFN0cmluZ10pOgorICAgICAgICAoLVtET01SYW5n
ZSBtYXJrdXBTdHJpbmddKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAg
ICAoLVtXZWJGcmFtZSBfZG9jdW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6YmFzZVVSTFN0
cmluZzpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNB
c1BhcmFncmFwaHM6XSk6CisKIDIwMTMtMTAtMDUgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBDVFRFOiBQYXNzIERvY3VtZW50V3JpdGVyIGFyb3VuZCBhcyBhIHJlZmVy
ZW5jZQpJbmRleDogU291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0JKHJl
dmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25z
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAgLSAoV2ViQXJjaGl2ZSAqKXdl
YkFyY2hpdmVCeUZpbHRlcmluZ1N1YgogCiAtIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZwogewot
ICAgIHJldHVybiBjcmVhdGVGdWxsTWFya3VwKGNvcmUoc2VsZikpOworICAgIHJldHVybiBjcmVh
dGVGdWxsTWFya3VwKCpjb3JlKHNlbGYpKTsKIH0KIAogLSAoTlNSZWN0KV9yZW5kZXJSZWN0Oihi
b29sICopaXNSZXBsYWNlZApAQCAtMTcyLDcgKzE3Miw3IEBAIC0gKFdlYkFyY2hpdmUgKil3ZWJB
cmNoaXZlCiAKIC0gKE5TU3RyaW5nICopbWFya3VwU3RyaW5nCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUZ1bGxNYXJrdXAoY29yZShzZWxmKSk7CisgICAgcmV0dXJuIGNyZWF0ZUZ1bGxNYXJrdXAoKmNv
cmUoc2VsZikpOwogfQogCiBAZW5kCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0JKHJldmlzaW9uIDE1Njk3OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
RnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTcyMSwyNCArNzIxLDQzIEBAIC0gKERPTVJhbmdl
ICopX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3MKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAq
KV9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJp
bmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5nIAogewotICAgIGlmICgh
X3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkK
KyAgICBGcmFtZSogZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGlmICghZnJhbWUp
CisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gbmlsOwogCi0g
ICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoX3ByaXZhdGUtPmNvcmVGcmFt
ZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLCBiYXNlVVJMU3RyaW5nLCBEaXNhbGxvd1Njcmlw
dGluZ0NvbnRlbnQpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZG9jdW1lbnQsIG1hcmt1cFN0cmluZywgYmFzZVVSTFN0cmluZywgRGlzYWxsb3dTY3Jp
cHRpbmdDb250ZW50KS5nZXQoKSk7CiB9CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9j
dW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczooTlNBcnJheSAqKW5vZGVzCiB7Ci0g
ICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1
bWVudCgpKQorICAgIEZyYW1lKiBmcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CisgICAgaWYg
KCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKKworICAgIERvY3VtZW50KiBkb2N1
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJl
dHVybiBuaWw7CisKICAgICBOU0VudW1lcmF0b3IgKm5vZGVFbnVtID0gW25vZGVzIG9iamVjdEVu
dW1lcmF0b3JdOwogICAgIFZlY3RvcjxOb2RlKj4gbm9kZXNWZWN0b3I7CiAgICAgRE9NTm9kZSAq
bm9kZTsKICAgICB3aGlsZSAoKG5vZGUgPSBbbm9kZUVudW0gbmV4dE9iamVjdF0pKQogICAgICAg
ICBub2Rlc1ZlY3Rvci5hcHBlbmQoY29yZShub2RlKSk7Ci0gICAgCi0gICAgcmV0dXJuIGtpdChj
cmVhdGVGcmFnbWVudEZyb21Ob2RlcyhfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLCBu
b2Rlc1ZlY3RvcikuZ2V0KCkpOworCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKworICAgIHNpemVfdCBz
aXplID0gbm9kZXNWZWN0b3Iuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlRGVmYXVs
dFBhcmFncmFwaEVsZW1lbnQoKmRvY3VtZW50KTsKKyAgICAgICAgZWxlbWVudC0+YXBwZW5kQ2hp
bGQobm9kZXNWZWN0b3JbaV0sIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgICAgICBmcmFnbWVu
dC0+YXBwZW5kQ2hpbGQoZWxlbWVudC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENFUFRJT04pOwor
ICAgIH0KKworICAgIHJldHVybiBraXQoZnJhZ21lbnQucmVsZWFzZSgpLmdldCgpKTsKIH0KIAog
LSAodm9pZClfcmVwbGFjZVNlbGVjdGlvbldpdGhOb2RlOihET01Ob2RlICopbm9kZSBzZWxlY3RS
ZXBsYWNlbWVudDooQk9PTClzZWxlY3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21h
cnRSZXBsYWNlIG1hdGNoU3R5bGU6KEJPT0wpbWF0Y2hTdHlsZQo=
</data>
<flag name="commit-queue"
          id="235861"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213493</attachid>
            <date>2013-10-05 21:51:01 -0700</date>
            <delta_ts>2013-10-05 22:33:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122403-20131005215100.patch</filename>
            <type>text/plain</type>
            <size>102617</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTA1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVGhyZWFkIHJlZmVyZW5jZXMg
dGhyb3VnaCBtYXJrdXAuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNDAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSGlnaGxpZ2h0czoKKyAgICAgICAgLSBSZW1vdmVkIGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cFdpdGhDb250ZXh0KCksIGl0IHdhcyB1bnVzZWQuCisgICAgICAgIC0gTW92ZWQgY3Jl
YXRlRnJhZ21lbnRGcm9tTm9kZXMoKSBpbnRvIGl0cyBvbmUgY2FsbGVyIChpbiBXZWJLaXQvbWFj
KQorICAgICAgICAtIEFkZCBhIGJ1bmNoIG1vcmUgdG9Gb28oKSBvdmVybG9hZHMuCisKIDIwMTMt
MTAtMDUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEZyYW1l
U2VsZWN0aW9uOiBSZW1vdmUgdHdvIHVudXNlZCBtZW1iZXIgZnVuY3Rpb25zLgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDYgQEAgX19aTjdXZWJDb3Jl
MTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5nZQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JE
MUV2CiBfX1pON1dlYkNvcmUxMlVURjhFbmNvZGluZ0V2CiBfX1pON1dlYkNvcmUxMmNhY2hlU3Rv
cmFnZUV2Ci1fX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQTjNXVEY2VmVj
dG9ySVBOU180Tm9kZUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFTlNfMjNFQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZUViTlNfMTNFQWJzb2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJkZWxldGVD
b29raWVFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxMmdjQ29udHJvbGxlckV2CiBfX1pON1dlYkNvcmUxMmljb25EYXRh
YmFzZUV2CkBAIC01ODEsOCArNTgwLDggQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9u
MjJleHBhbmRVcwogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUEtOU181UmFuZ2VF
TlNfOUVBZmZpbml0eUViCiBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1
VmlzaWJsZVBvc2l0aW9uRVMzX2IKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FYgotX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBL
TlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCitf
X1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUktOU180Tm9kZUUKK19fWk43V2ViQ29yZTE2
Y3JlYXRlRnVsbE1hcmt1cEVSS05TXzVSYW5nZUUKIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29v
a2llc0VSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRQogX19aTjdXZWJDb3JlMTZlbmNsb3Np
bmdJbnRSZWN0RVJLNkNHUmVjdAogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNf
OUZsb2F0UmVjdEUKQEAgLTc2NSw3ICs3NjQsNiBAQCBfX1pON1dlYkNvcmUyM0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQzFFCiBfX1pON1dlYkNvcmUyM011dGFibGVTdHlsZVByb3BlcnR5U2V0MjVl
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uRXYKIF9fWk43V2ViQ29yZTIzTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXREMUV2CiBfX1pON1dlYkNvcmUyM1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50MjRwbGF0
Zm9ybUJhZFJlc3BvbnNlRXJyb3JFdgotX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21O
b2Rlc0VQTlNfOERvY3VtZW50RVJLTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFTlMyXzE1Q3Jh
c2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBlRVA1
TlNVUkxsCiBfX1pON1dlYkNvcmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4
X05TUmFuZ2UKIF9fWk43V2ViQ29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmlu
ZzhfTlNSYW5nZQpAQCAtNzgxLDcgKzc3OSw3IEBAIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyMTQKIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyMTR3
aWxsRGV0YWNoUGFnZUV2CiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckMy
RVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYK
LV9fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktO
M1dURjZTdHJpbmdFUzVfTlNfMTlQYXJzZXJDb250ZW50UG9saWN5RQorX19aTjdXZWJDb3JlMjRj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUk5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9O
U18xOVBhcnNlckNvbnRlbnRQb2xpY3lFCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0cmluZ0UKQEAgLTgx
MSw2ICs4MDksNyBAQCBfX1pON1dlYkNvcmUyOERvY3VtZW50U3R5bGVTaGVldENvbGxlY3RpCiBf
X1pON1dlYkNvcmUyOGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmUyOHJlbW92ZUxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXJFUHYKIF9fWk43V2Vi
Q29yZTI5Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWVFUktOU18yMU5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkVSS05TXzNVUkxFUzVfCitfX1pON1dlYkNvcmUyOWNyZWF0ZURlZmF1bHRQYXJhZ3Jh
cGhFbGVtZW50RVJOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUyOWlzQ2hhcmFjdGVyU21hcnRS
ZXBsYWNlRXhlbXB0RWliCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNEZWNvZGluZ1dpdGhS
YW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNFbmNv
ZGluZ1dpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTY5Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc5Niw3ICs3OTYsNyBAQAogCQkxQzExQ0NDODBBQTYwOTM3MDBEQURC
MjAgLyogRE9NSFRNTEVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1REYyRUVCMEFBMzg3Q0IwMEFENjRDNSAvKiBE
T01IVE1MRWxlbWVudC5oICovOyB9OwogCQkxQzI2NDk3QTBEN0UyNDhBMDBCRDEwRjIgLyogRG9j
dW1lbnRMb2FkZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNw
cCAqLzsgfTsKIAkJMUMyNjQ5N0MwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyNjQ5N0IwRDdFMjRF
QzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwICovOyB9OwotCQkxQzRDOEYwMjBBRDg1RDg3MDA5NDc1
Q0UgLyogRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGMDAwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJMUM0QzhGMDIwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNEM4RjAwMEFEODVEODcwMDk0NzVDRSAvKiBEZWxldGVCdXR0b25Db250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUM0QzhGNjYwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGNjQwQUQ4NjU1RDAwOTQ3
NUNFIC8qIERlbGV0ZUJ1dHRvbi5oICovOyB9OwogCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzgg
LyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUZBRUNGMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwICovOyB9OwogCQkxQzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzVGQUVEMDBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmggKi87IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1t
CShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhU
TUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKIAogLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmlu
ZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKIHsKLSAgICByZXR1cm4g
a2l0KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFti
YXNlVVJMIGFic29sdXRlU3RyaW5nXSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKCpjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFtiYXNlVVJMIGFic29s
dXRlU3RyaW5nXSkuZ2V0KCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRl
RG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ0RBVEFTZWN0aW9uLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DREFUQVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMzMgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gdmlydHVhbENyZWF0ZShjb25zdCBTdHJp
bmcmKTsKIH07CiAKK2lubGluZSBDREFUQVNlY3Rpb24mIHRvQ0RBVEFTZWN0aW9uKE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENEQVRBU2VjdGlvbiY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9uJiB0
b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05P
REUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24mPihub2RlKTsK
K30KKworaW5saW5lIENEQVRBU2VjdGlvbiogdG9DREFUQVNlY3Rpb24oTm9kZSogbm9kZSkKK3sK
KyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENEQVRBU2VjdGlvbio+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9u
KiB0b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RB
VEFfU0VDVElPTl9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0RBVEFTZWN0
aW9uKj4obm9kZSk7Cit9CisKK3ZvaWQgdG9DREFUQVNlY3Rpb24oY29uc3QgQ0RBVEFTZWN0aW9u
Jik7Cit2b2lkIHRvQ0RBVEFTZWN0aW9uKGNvbnN0IENEQVRBU2VjdGlvbiopOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDREFUQVNlY3Rpb25faApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0NvbW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q29tbWVudC5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwzMyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdDsKIH07CiAKK2lubGluZSBD
b21tZW50JiB0b0NvbW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
Q29tbWVudCYgdG9Db21tZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9E
RSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQmPihub2RlKTsKK30KKwor
aW5saW5lIENvbW1lbnQqIHRvQ29tbWVudChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
Q09NTUVOVF9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpOwor
fQorCitpbmxpbmUgY29uc3QgQ29tbWVudCogdG9Db21tZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBDb21tZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQm
KTsKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gQ29tbWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDE1Njk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNjcsNyArNDI2Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNM
VHJhbnNmb3JtKFByb2Nlc3MKICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5n
IG5ld1NvdXJjZTsKICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7Ci0gICAgaWYgKCFwcm9jZXNz
b3ItPnRyYW5zZm9ybVRvU3RyaW5nKHRoaXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJl
c3VsdEVuY29kaW5nKSkKKyAgICBpZiAoIXByb2Nlc3Nvci0+dHJhbnNmb3JtVG9TdHJpbmcoKnRo
aXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB0aGUgdHJhbnNmb3JtIGZhaWxlZCB3ZSBzaG91bGQg
cHJvYmFibHkgcmVwb3J0IGFuIGVycm9yIChsaWtlIE1vemlsbGEgZG9lcykuCiAgICAgRnJhbWUq
IG93bmVyRnJhbWUgPSBmcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjE5LDggKzE2MTksMjEgQEAgaW5saW5lIGNvbnN0IERvY3VtZW50KiB0b0RvY3VtZW50
KGNvbnN0IAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KG5vZGUpOwog
fQogCitpbmxpbmUgRG9jdW1lbnQmIHRvRG9jdW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
RG9jdW1lbnQmIHRvRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCY+KG5vZGUpOworfQorCiAvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvRG9jdW1lbnQo
Y29uc3QgRG9jdW1lbnQqKTsKK3ZvaWQgdG9Eb2N1bWVudChjb25zdCBEb2N1bWVudCYpOwogCiAv
LyBQdXQgdGhlc2UgbWV0aG9kcyBoZXJlLCBiZWNhdXNlIHRoZXkgcmVxdWlyZSB0aGUgRG9jdW1l
bnQgZGVmaW5pdGlvbiwgYnV0IHdlIHJlYWxseSB3YW50IHRvIGlubGluZSB0aGVtLgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDMz
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3Vic2V0OwogfTsKIAoraW5saW5lIERvY3VtZW50
VHlwZSYgdG9Eb2N1bWVudFR5cGUoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9O
T0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlJj4obm9kZSk7Cit9CisK
K2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUmIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IERvY3VtZW50VHlwZSY+KG5vZGUpOworfQorCitpbmxpbmUgRG9jdW1lbnRUeXBlKiB0
b0RvY3VtZW50VHlwZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQ
RV9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSk7Cit9
CisKK2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUqIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudFR5cGUqPihub2RlKTsKK30KKwordm9pZCB0b0Rv
Y3VtZW50VHlwZShjb25zdCBEb2N1bWVudFR5cGUmKTsKK3ZvaWQgdG9Eb2N1bWVudFR5cGUoY29u
c3QgRG9jdW1lbnRUeXBlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCShyZXZpc2lv
biAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5MSwzMyBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
CitpbmxpbmUgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihO
b2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUu
bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mPihub2RlKTsKK30KKworaW5s
aW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uJj4obm9k
ZSk7Cit9CisKIGlubGluZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRvUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREUpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24q
Pihub2RlKTsKIH0KIAoraW5saW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogdG9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBS
T0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpOworfQorCit2b2lkIHRvUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYpOwordm9pZCB0b1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbihjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qKTsKKwogfSAvL25hbWVz
cGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTU2OTc3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Myw3
ICsxMDgzLDcgQEAgU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25Db2RlJiBlYwogCiBT
dHJpbmcgUmFuZ2U6OnRvSFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCh0
aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogU3RyaW5nIFJhbmdl
Ojp0ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IFNoYWRvd1Jvb3Q6OmNsb25l
Tm9kZShiCiAKIFN0cmluZyBTaGFkb3dSb290Ojppbm5lckhUTUwoKSBjb25zdAogewotICAgIHJl
dHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAgICByZXR1cm4gY3JlYXRl
TWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiB2b2lkIFNoYWRvd1Jvb3Q6OnNldElu
bmVySFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UZXh0LmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDEyIEBAIGlubGluZSBUZXh0JiB0b1RleHQoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dCY+KG5vZGUpOwogfQogCitpbmxp
bmUgY29uc3QgVGV4dCYgdG9UZXh0KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc1RleHROb2RlKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Jj4obm9kZSk7Cit9CisKIGlubGluZSBUZXh0KiB0b1RleHQo
Tm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9k
ZSB8fCBub2RlLT5pc1RleHROb2RlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTk4LDcgKzExOTgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFy
YWdyYXBoCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRo
aXMgdXNlZCB0byB1c2UgYSB0ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29u
ZnVzZWQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoJmRvY3VtZW50KCksIGNyZWF0ZU1hcmt1cChy
YW5nZS5nZXQoKSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCB0cnVlKSwgIiIpOwor
ICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCgpLCBj
cmVhdGVNYXJrdXAoKnJhbmdlLCAwLCBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIHRydWUp
LCAiIik7CiAKICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3
aGVuIHdlIGNvcHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5n
IGlmIHdlJ3JlIGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFw
aCBjYW4gaGF2ZSBzdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDEsNyArNTAxLDcgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEhvcml6b250YWxSdWxlKAogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5z
ZXJ0SFRNTChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY3V0ZUluc2VydEZyYWdtZW50KGZyYW1l
LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgdmFsdWUsICIiKSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChmcmFtZSwgY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCB2YWx1ZSwgIiIpKTsKIH0KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEltYWdlKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsMjUgKzExMywyNSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkK
IHsKIH0KIAotU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2RlcyhOb2RlKiB0
YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSkK
K1N0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpCiB7CiAgICAg
cmV0dXJuIHNlcmlhbGl6ZU5vZGVzKHRhcmdldE5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVuT25s
eSwgMCk7CiB9CiAKLVN0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9u
bHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCitTdHJpbmcgTWFya3Vw
QWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5vZGVU
b1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4q
IHRhZ05hbWVzVG9Ta2lwKQogewogICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXModGFy
Z2V0Tm9kZSwgbm9kZVRvU2tpcCwgY2hpbGRyZW5Pbmx5LCAwLCB0YWdOYW1lc1RvU2tpcCk7CiAg
ICAgcmV0dXJuIG1fbWFya3VwLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogdGFyZ2V0Tm9kZSwgTm9kZSog
bm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMsIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUmIHRh
cmdldE5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBj
b25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05h
bWVzVG9Ta2lwKQogewotICAgIGlmICh0YXJnZXROb2RlID09IG5vZGVUb1NraXApCisgICAgaWYg
KCZ0YXJnZXROb2RlID09IG5vZGVUb1NraXApCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAodGFnTmFtZXNUb1NraXApIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWdO
YW1lc1RvU2tpcC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXROb2RlLT5o
YXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCisgICAgICAgICAgICBpZiAodGFyZ2V0
Tm9kZS5oYXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ4LDI5ICsxNDgsMjkgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaQogICAgIGlmICghY2hpbGRyZW5Pbmx5KQog
ICAgICAgICBhcHBlbmRTdGFydFRhZyh0YXJnZXROb2RlLCAmbmFtZXNwYWNlSGFzaCk7CiAKLSAg
ICBpZiAoISh0YXJnZXROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVu
dENhbm5vdEhhdmVFbmRUYWcodGFyZ2V0Tm9kZSkpKSB7CisgICAgaWYgKCEodGFyZ2V0Tm9kZS5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcodGFy
Z2V0Tm9kZSkpKSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIE5vZGUq
IGN1cnJlbnQgPSB0YXJnZXROb2RlLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSA/IHRvSFRNTFRl
bXBsYXRlRWxlbWVudCh0YXJnZXROb2RlKS0+Y29udGVudCgpLT5maXJzdENoaWxkKCkgOiB0YXJn
ZXROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIGN1cnJlbnQgPSB0YXJnZXROb2Rl
Lmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpID8gdG9IVE1MVGVtcGxhdGVFbGVtZW50KHRhcmdldE5v
ZGUpLmNvbnRlbnQoKS0+Zmlyc3RDaGlsZCgpIDogdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAj
ZWxzZQotICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS0+Zmlyc3RDaGlsZCgpOwor
ICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAjZW5kaWYK
ICAgICAgICAgZm9yICggOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoY3VycmVudCwgbm9k
ZVRvU2tpcCwgSW5jbHVkZU5vZGUsICZuYW1lc3BhY2VIYXNoLCB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgICAgICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKCpjdXJyZW50LCBub2RlVG9T
a2lwLCBJbmNsdWRlTm9kZSwgJm5hbWVzcGFjZUhhc2gsIHRhZ05hbWVzVG9Ta2lwKTsKICAgICB9
CiAKICAgICBpZiAoIWNoaWxkcmVuT25seSkKICAgICAgICAgYXBwZW5kRW5kVGFnKHRhcmdldE5v
ZGUpOwogfQogCi1TdHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnJlc29sdmVVUkxJZk5lZWRlZChj
b25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK1N0
cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6cmVzb2x2ZVVSTElmTmVlZGVkKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAogewogICAgIHN3aXRjaCAo
bV9yZXNvbHZlVVJMc01ldGhvZCkgewogICAgIGNhc2UgUmVzb2x2ZUFsbFVSTHM6Ci0gICAgICAg
IHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybFN0cmluZykuc3RyaW5n
KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsU3Ry
aW5nKS5zdHJpbmcoKTsKIAogICAgIGNhc2UgUmVzb2x2ZU5vbkxvY2FsVVJMczoKLSAgICAgICAg
aWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLnN0cmlu
ZygpOworICAgICAgICBpZiAoIWVsZW1lbnQuZG9jdW1lbnQoKS51cmwoKS5pc0xvY2FsRmlsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxT
dHJpbmcpLnN0cmluZygpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRG9Ob3RSZXNvbHZl
VVJMczoKQEAgLTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0cmluZyhjb24KICAgICBtX21hcmt1cC5hcHBlbmQoc3RyaW5nKTsKIH0KIAotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoTm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKGNvbnN0IE5v
ZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kU3RhcnRNYXJr
dXAobV9tYXJrdXAsIG5vZGUsIG5hbWVzcGFjZXMpOwogICAgIGlmIChtX25vZGVzKQotICAgICAg
ICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZXMtPmFwcGVuZChjb25zdF9j
YXN0PE5vZGUqPigmbm9kZSkpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bmRUYWcoTm9kZSogbm9kZSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhj
b25zdCBOb2RlJiBub2RlKQogewogICAgIGFwcGVuZEVuZE1hcmt1cChtX21hcmt1cCwgbm9kZSk7
CiB9CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRB
dHRyaWJ1dGVWCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJp
YnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopCiB7
CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZh
bHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
QXR0cmlidXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90
ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIEFTU0VSVChlbGVt
ZW50LT5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VS
TEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAgICBjb25zdCBTdHJpbmcgcmVzb2x2ZWRVUkxTdHJp
bmcgPSByZXNvbHZlVVJMSWZOZWVkZWQoZWxlbWVudCwgYXR0cmlidXRlLnZhbHVlKCkpOwogICAg
IFVDaGFyIHF1b3RlQ2hhciA9ICciJzsKICAgICBTdHJpbmcgc3RyaXBwZWRVUkxTdHJpbmcgPSBy
ZXNvbHZlZFVSTFN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTI0NSwxNiArMjQ1LDE2IEBA
IHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICByZXN1bHQuYXBw
ZW5kKHF1b3RlQ2hhcik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdl
KiByYW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTm9kZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kZSwg
Y29uc3QgUmFuZ2UqIHJhbmdlLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7Ci0gICAgY29uc3Qg
U3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOworICAgIGNvbnN0IFN0cmluZyBzdHIgPSBu
b2RlLm5vZGVWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBzdGFydCA9IDA7CiAKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKG5v
ZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQorICAgICAgICBpZiAoJm5vZGUgPT0gcmFuZ2Ut
PmVuZENvbnRhaW5lcigpKQogICAgICAgICAgICAgbGVuZ3RoID0gcmFuZ2UtPmVuZE9mZnNldCgp
OwotICAgICAgICBpZiAobm9kZSA9PSByYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAgICAg
ICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpIHsKICAgICAgICAgICAgIHN0
YXJ0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7
CiAgICAgICAgIH0KQEAgLTI2MywxNSArMjYzLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZE5vZGVWYWx1ZSgKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMo
cmVzdWx0LCBzdHIsIHN0YXJ0LCBsZW5ndGgsIGVudGl0eU1hc2spOwogfQogCi1ib29sIE1hcmt1
cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBh
dHRyaWJ1dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXggPSBlbGVtZW50LT5wcmVmaXgoKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCA9IGVsZW1lbnQucHJlZml4KCk7CiAgICAgaWYgKHByZWZpeC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAhZWxlbWVudC0+aGFzQXR0cmlidXRlKHhtbG5zQXRv
bSk7CisgICAgICAgIHJldHVybiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoeG1sbnNBdG9tKTsKIAog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB4bWxuc1dpdGhDb2xvbiwgKEFTQ0lJTGl0
ZXJhbCgieG1sbnM6IikpKTsKLSAgICByZXR1cm4gIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh4bWxu
c1dpdGhDb2xvbiArIHByZWZpeCk7CisgICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSh4
bWxuc1dpdGhDb2xvbiArIHByZWZpeCk7CiB9CiAKIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFt
ZXNwYWNlcyYgbmFtZXNwYWNlcykKQEAgLTMzMywyNCArMzMzLDI0IEBAIHZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSgKICAgICB9CiB9CiAKLUVudGl0eU1hc2sgTWFya3Vw
QWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQpIGNvbnN0CitFbnRpdHlN
YXNrIE1hcmt1cEFjY3VtdWxhdG9yOjplbnRpdHlNYXNrRm9yVGV4dChjb25zdCBUZXh0JiB0ZXh0
KSBjb25zdAogewogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIHBhcmVudE5hbWUgPSAwOwotICAg
IGlmICh0ZXh0LT5wYXJlbnRFbGVtZW50KCkpCi0gICAgICAgIHBhcmVudE5hbWUgPSAmKHRleHQt
PnBhcmVudEVsZW1lbnQoKSktPnRhZ1FOYW1lKCk7CisgICAgaWYgKHRleHQucGFyZW50RWxlbWVu
dCgpKQorICAgICAgICBwYXJlbnROYW1lID0gJih0ZXh0LnBhcmVudEVsZW1lbnQoKSktPnRhZ1FO
YW1lKCk7CiAKICAgICBpZiAocGFyZW50TmFtZSAmJiAoKnBhcmVudE5hbWUgPT0gc2NyaXB0VGFn
IHx8ICpwYXJlbnROYW1lID09IHN0eWxlVGFnIHx8ICpwYXJlbnROYW1lID09IHhtcFRhZykpCiAg
ICAgICAgIHJldHVybiBFbnRpdHlNYXNrSW5DREFUQTsKIAotICAgIHJldHVybiB0ZXh0LT5kb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBFbnRpdHlNYXNrSW5IVE1MUENEQVRBIDogRW50aXR5
TWFza0luUENEQVRBOworICAgIHJldHVybiB0ZXh0LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSA/IEVudGl0eU1hc2tJbkhUTUxQQ0RBVEEgOiBFbnRpdHlNYXNrSW5QQ0RBVEE7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBU
ZXh0KiB0ZXh0KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbnN0IFRleHQmIHRleHQpCiB7CiAgICAgYXBwZW5kTm9kZVZhbHVlKHJl
c3VsdCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50KQorc3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdC
dWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKIHsKICAgICAvLyBGSVhNRTog
Q29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBv
c3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5j
bHVkZXMgIi0tPiIuCiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhLS0iKTsKQEAgLTM1OCwy
MSArMzU4LDIxIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQoU3QKICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLS0+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kWE1MRGVjbGFy
YXRpb24oU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKCFkb2N1bWVudC0+aGFzWE1MRGVjbGFyYXRpb24oKSkKKyAgICBpZiAoIWRvY3Vt
ZW50Lmhhc1hNTERlY2xhcmF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCI8P3htbCB2ZXJzaW9uPVwiIik7Ci0gICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudC0+eG1sVmVyc2lvbigpKTsKLSAgICBjb25zdCBTdHJpbmcmIGVuY29kaW5nID0gZG9jdW1l
bnQtPnhtbEVuY29kaW5nKCk7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudC54bWxWZXJzaW9u
KCkpOworICAgIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcgPSBkb2N1bWVudC54bWxFbmNvZGluZygp
OwogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJcIiBlbmNvZGluZz1cIiIpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kaW5n
KTsKICAgICB9Ci0gICAgaWYgKGRvY3VtZW50LT54bWxTdGFuZGFsb25lU3RhdHVzKCkgIT0gRG9j
dW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgeworICAgIGlmIChkb2N1bWVudC54bWxTdGFu
ZGFsb25lU3RhdHVzKCkgIT0gRG9jdW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXCIgc3RhbmRhbG9uZT1cIiIpOwotICAgICAgICBp
ZiAoZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSkKKyAgICAgICAgaWYgKGRvY3VtZW50LnhtbFN0
YW5kYWxvbmUoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJ5ZXMiKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5vIik7CkBAIC0z
ODEsMzIgKzM4MSwzMiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxEZWNsYXJh
CiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwiPz4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
RG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRU
eXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlJiBkb2N1bWVudFR5
cGUpCiB7Ci0gICAgaWYgKG4tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgaWYgKGRvY3VtZW50VHlw
ZS5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiPCFET0NUWVBFICIpOwotICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsKLSAg
ICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudFR5cGUubmFtZSgpKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZS5wdWJsaWNJZCgpLmlzRW1w
dHkoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFBVQkxJQyBcIiIpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGRvY3VtZW50VHlwZS5wdWJsaWNJZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwot
ICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghZG9j
dW1lbnRUeXBlLnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgJyk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChk
b2N1bWVudFR5cGUuc3lzdGVtSWQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewor
ICAgIH0gZWxzZSBpZiAoIWRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFNZU1RFTSBcIiIpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50VHlw
ZS5zeXN0ZW1JZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwogICAgIH0KLSAgICBp
ZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFkb2N1bWVudFR5
cGUuaW50ZXJuYWxTdWJzZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICcpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCdbJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
bi0+aW50ZXJuYWxTdWJzZXQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBl
LmludGVybmFsU3Vic2V0KCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCddJyk7CiAgICAgfQog
ICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKQEAgLTQyNCwxNCArNDI0LDE0IEBAIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmcKICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9
CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBw
ZW5kT3BlblRhZyhyZXN1bHQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCi0gICAgaWYgKGVsZW1l
bnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50
LT5hdHRyaWJ1dGVDb3VudCgpOworICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50LmF0dHJpYnV0ZUNvdW50KCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVtZW50LCBlbGVtZW50LT5hdHRyaWJ1dGVBdChp
KSwgbmFtZXNwYWNlcyk7CisgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVt
ZW50LCBlbGVtZW50LmF0dHJpYnV0ZUF0KGkpLCBuYW1lc3BhY2VzKTsKICAgICB9CiAKICAgICAv
LyBHaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMgdG8gYWRkIHRoZWlyIG93biBhdHRy
aWJ1dGVzLgpAQCAtNDQwLDI3ICs0NDAsMjcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudChTdAogICAgIGFwcGVuZENsb3NlVGFnKHJlc3VsdCwgZWxlbWVudCk7CiB9CiAK
LXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgcmVzdWx0
LmFwcGVuZCgnPCcpOwotICAgIGlmIChpblhNTEZyYWdtZW50U2VyaWFsaXphdGlvbigpICYmIG5h
bWVzcGFjZXMgJiYgZWxlbWVudC0+cHJlZml4KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKGluWE1M
RnJhZ21lbnRTZXJpYWxpemF0aW9uKCkgJiYgbmFtZXNwYWNlcyAmJiBlbGVtZW50LnByZWZpeCgp
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcv
VFIvRE9NLUxldmVsLTMtQ29yZS9uYW1lc3BhY2VzLWFsZ29yaXRobXMuaHRtbCNub3JtYWxpemVE
b2N1bWVudEFsZ28gd2Ugbm93IHNob3VsZCBjcmVhdGUKICAgICAgICAgLy8gYSBkZWZhdWx0IG5h
bWVzcGFjZSBkZWNsYXJhdGlvbiB0byBtYWtlIHRoaXMgbmFtZXNwYWNlIHdlbGwtZm9ybWVkLiBI
b3dldmVyLCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtbmFtZXMxMS8jeG1sUmVzZXJ2ZWQgc3Rh
dGVzCiAgICAgICAgIC8vICJUaGUgcHJlZml4IHhtbCBNVVNUIE5PVCBiZSBkZWNsYXJlZCBhcyB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuIiwgc28gdXNlIHRoZSB4bWwgcHJlZml4IGV4cGxpY2l0bHku
Ci0gICAgICAgIGlmIChlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSA9PSBYTUxOYW1lczo6eG1sTmFt
ZXNwYWNlVVJJKSB7CisgICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSgpID09IFhNTE5h
bWVzOjp4bWxOYW1lc3BhY2VVUkkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sQXRv
bSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgcmVzdWx0LmFwcGVuZChlbGVtZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwotICAg
IGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSB8fCAhZWxlbWVudC0+ZG9jdW1lbnQo
KS5pc0hUTUxEb2N1bWVudCgpKSAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVs
ZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIGFwcGVuZE5hbWVzcGFjZShyZXN1bHQsIGVsZW1lbnQt
PnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMsIGluWE1MRnJh
Z21lbnRTZXJpYWxpemF0aW9uKCkpOworICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudC5ub2RlTmFt
ZVByZXNlcnZpbmdDYXNlKCkpOworICAgIGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24o
KSB8fCAhZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpICYmIG5hbWVzcGFjZXMg
JiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgYXBwZW5kTmFt
ZXNwYWNlKHJlc3VsdCwgZWxlbWVudC5wcmVmaXgoKSwgZWxlbWVudC5uYW1lc3BhY2VVUkkoKSwg
Km5hbWVzcGFjZXMsIGluWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKCkpOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYg
KHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewotICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKQorICAgICAgICBpZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7IC8vIFhIVE1MIDEuMCA8LT4gSFRNTCBjb21wYXRpYmls
aXR5LgogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgfQpAQCAtNDkyLDkgKzQ5Miw5
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmdlbmVyYXRlVW5pcXVlUHIKICAgICB9IHdoaWxl
ICh0cnVlKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFN0
cmluZ0J1aWxkZXImIHJlc3VsdCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKIHsKLSAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOworICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LmRvY3VtZW50
KCkuaXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIApAQCAtNTIw
LDcgKzUyMCw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKIAog
ICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKIAotICAgIGlmIChlbGVtZW50LT5pc1VSTEF0dHJpYnV0
ZShhdHRyaWJ1dGUpKQorICAgIGlmIChlbGVtZW50LmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkp
CiAgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgZWxlbWVudCwg
YXR0cmlidXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwpAQCAt
NTQwLDE3ICs1NDAsMTcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0
aQogICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJdXT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBO
b2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlJiBu
b2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1lc3BhY2VzKQogICAg
ICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBzd2l0Y2ggKG5vZGUt
Pm5vZGVUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUoKSkgewogICAgIGNhc2Ug
Tm9kZTo6VEVYVF9OT0RFOgotICAgICAgICBhcHBlbmRUZXh0KHJlc3VsdCwgdG9UZXh0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKSk7CisgICAgICAgIGFwcGVuZFRleHQocmVzdWx0LCB0b1RleHQo
bm9kZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAg
ICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihu
b2RlKS0+ZGF0YSgpKTsKKyAgICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHRvQ29tbWVudChu
b2RlKS5kYXRhKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05P
REU6CiAgICAgICAgIGFwcGVuZFhNTERlY2xhcmF0aW9uKHJlc3VsdCwgdG9Eb2N1bWVudChub2Rl
KSk7CkBAIC01NTgsMTYgKzU1OCwxNiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dGFydE1hcmt1CiAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICAgICAgYXBw
ZW5kRG9jdW1lbnRUeXBlKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnRUeXBlKj4o
bm9kZSkpOworICAgICAgICBhcHBlbmREb2N1bWVudFR5cGUocmVzdWx0LCB0b0RvY3VtZW50VHlw
ZShub2RlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNU
UlVDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0
LCBzdGF0aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKS0+dGFyZ2V0
KCksIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpLT5kYXRh
KCkpOworICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0LCB0b1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbihub2RlKS50YXJnZXQoKSwgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
bm9kZSkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05P
REU6Ci0gICAgICAgIGFwcGVuZEVsZW1lbnQocmVzdWx0LCB0b0VsZW1lbnQoY29uc3RfY2FzdDxO
b2RlKj4obm9kZSkpLCBuYW1lc3BhY2VzKTsKKyAgICAgICAgYXBwZW5kRWxlbWVudChyZXN1bHQs
IHRvRWxlbWVudChub2RlKSwgbmFtZXNwYWNlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Tm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRDREFUQVNlY3Rpb24ocmVz
dWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKS0+ZGF0YSgpKTsKKyAg
ICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgdG9DREFUQVNlY3Rpb24obm9kZSkuZGF0
YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAg
ICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgpAQCAtNTg0LDM3ICs1ODQsMzcgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdQogLy8gMi4gRWxlbWVudHMgdy8gY2hpbGRy
ZW4gbmV2ZXIgc2VsZi1jbG9zZSBiZWNhdXNlIHRoZXkgdXNlIGEgc2VwYXJhdGUgZW5kIHRhZy4K
IC8vIDMuIEhUTUwgZWxlbWVudHMgd2hpY2ggZG8gbm90IGhhdmUgYSAiZm9yYmlkZGVuIiBlbmQg
dGFnIHdpbGwgY2xvc2Ugd2l0aCBhIHNlcGFyYXRlIGVuZCB0YWcuCiAvLyA0LiBPdGhlciBlbGVt
ZW50cyBzZWxmLWNsb3NlLgotYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkU2VsZkNsb3Nl
KGNvbnN0IE5vZGUqIG5vZGUpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRTZWxmQ2xv
c2UoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIWluWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQorICAgIGlmICghaW5Y
TUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiBub2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVz
KCkpCisgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudENhbm5vdEhhdmVFbmRU
YWcobm9kZSkpCisgICAgaWYgKG5vZGUuaXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIE1hcmt1cEFjY3VtdWxhdG9yOjplbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhj
b25zdCBOb2RlKiBub2RlKQorYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6ZWxlbWVudENhbm5vdEhh
dmVFbmRUYWcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkKKyAgICBpZiAoIW5vZGUuaXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBGSVhNRTogaWVGb3JiaWRzSW5zZXJ0SFRNTCBtYXkgbm90IGJlIHRoZSBy
aWdodCBmdW5jdGlvbiB0byBjYWxsIGhlcmUKICAgICAvLyBpZUZvcmJpZHNJbnNlcnRIVE1MIGlz
IHVzZWQgdG8gZGlzYWxsb3cgc2V0dGluZyBpbm5lckhUTUwvb3V0ZXJIVE1MCiAgICAgLy8gb3Ig
Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LiAgSXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgYWxpZ24g
d2l0aAogICAgIC8vIHdoaWNoIGVsZW1lbnRzIHNob3VsZCBiZSBzZXJpYWxpemVkIHcvbyBlbmQg
dGFncy4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+
aWVGb3JiaWRzSW5zZXJ0SFRNTCgpOworICAgIHJldHVybiB0b0hUTUxFbGVtZW50KG5vZGUpLmll
Rm9yYmlkc0luc2VydEhUTUwoKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwg
c2hvdWxkU2VsZkNsb3NlKG5vZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGVsZW1l
bnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKKyAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgp
IHx8IHNob3VsZFNlbGZDbG9zZShub2RlKSB8fCAoIW5vZGUuaGFzQ2hpbGROb2RlcygpICYmIGVs
ZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVz
dWx0LmFwcGVuZCgnPCcpOwogICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICByZXN1bHQuYXBw
ZW5kKHRvRWxlbWVudChub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICByZXN1
bHQuYXBwZW5kKHRvRWxlbWVudChub2RlKS5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwogICAg
IHJlc3VsdC5hcHBlbmQoJz4nKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
YXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw0OCArNjks
NTMgQEAgcHVibGljOgogICAgIE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qLCBFQWJz
b2x1dGVVUkxzLCBjb25zdCBSYW5nZSogPSAwLCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uID0gSFRN
TEZyYWdtZW50U2VyaWFsaXphdGlvbik7CiAgICAgdmlydHVhbCB+TWFya3VwQWNjdW11bGF0b3Io
KTsKIAotICAgIFN0cmluZyBzZXJpYWxpemVOb2RlcyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBu
b2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5KTsKLSAgICBTdHJpbmcgc2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSwgVmVjdG9yPFF1
YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRD
b21tZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgc2VyaWFs
aXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25s
eSk7CisgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5v
ZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNU
b1NraXApOwogCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0
aWVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEVu
dGl0eU1hc2spOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2Vz
KiA9IDApOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRp
YyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAubGVuZ3RoKCk7IH0KKwogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IE5vZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhT
dHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwgY29uc3QgVGV4dCYpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFt
ZXNwYWNlcyopOworCisgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhjb25zdCBOb2RlJiwgTmFtZXNw
YWNlcyogPSAwKTsKKworICAgIHZvaWQgYXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgY29u
c3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CisKKyAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3Vw
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBw
ZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJik7CisKICAgICB2b2lkIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCBib29sKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwg
RWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7Ci0gICAgYm9v
bCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKLSAgICBib29sIHNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7
CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IE5vZGUmLCBj
b25zdCBSYW5nZSosIEVudGl0eU1hc2spOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmLCBib29sIGFsbG93RW1wdHlEZWZhdWx0TlMgPSBm
YWxzZSk7Ci0gICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYsIFRleHQqKTsKLSAgICB2
b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1bWVudCop
OwotICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1
bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXIm
LCBjb25zdCBEb2N1bWVudCYpOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1
aWxkZXImLCBjb25zdCBEb2N1bWVudFR5cGUmKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRl
ciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRPcGVuVGFnKFN0cmlu
Z0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ2xvc2VU
YWcoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShT
dHJpbmdCdWlsZGVyJiwgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYs
IGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2Vj
dGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBhcHBlbmRTdGFy
dE1hcmt1cChTdHJpbmdCdWlsZGVyJiwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKLSAgICBi
b29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7Ci0gICAgYm9vbCBlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhjb25zdCBOb2RlKik7Ci0gICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoU3RyaW5n
QnVpbGRlciYsIGNvbnN0IE5vZGUqKTsKKworICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CisgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1
dGUoY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyYpOworICAgIGJvb2wgc2hvdWxkU2VsZkNs
b3NlKGNvbnN0IE5vZGUmKTsKKyAgICBib29sIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0
IE5vZGUmKTsKKyAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KGNvbnN0IFRleHQmKSBj
b25zdDsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3QgUmFu
Z2UqIGNvbnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIHJlc29sdmVVUkxJZk5l
ZWRlZChjb25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdm9pZCBhcHBl
bmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCos
IGNvbnN0IEF0dHJpYnV0ZSYpOwotICAgIHZvaWQgc2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNl
cyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25z
dCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgU3RyaW5nIHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50JiwgY29uc3QgU3RyaW5n
JikgY29uc3Q7CisgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIGNvbnN0IEF0dHJpYnV0ZSYpOworICAgIHZvaWQgc2Vy
aWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9T
a2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5h
bWU+KiB0YWdOYW1lc1RvU2tpcCk7CiAgICAgYm9vbCBpblhNTEZyYWdtZW50U2VyaWFsaXphdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTZXJpYWxpemF0aW9uID09IFhNTEZyYWdtZW50
U2VyaWFsaXphdGlvbjsgfQogICAgIHZvaWQgZ2VuZXJhdGVVbmlxdWVQcmVmaXgoUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IE5hbWVzcGFjZXMmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMzQgKzExNyw0OCBAQCBzdGF0aWMgdm9pZCBjb21w
bGV0ZVVSTHMoRG9jdW1lbnRGcmFnbWVuCiAgICAgICAgIGNoYW5nZXNbaV0uYXBwbHkoKTsKIH0K
ICAgICAKLWNsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIE1hcmt1cEFjY3Vt
dWxhdG9yIHsKK2NsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIGZpbmFsIDogcHVibGljIE1h
cmt1cEFjY3VtdWxhdG9yIHsKIHB1YmxpYzoKICAgICBlbnVtIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSB7IERvZXNGdWxseVNlbGVjdE5vZGUsIERvZXNOb3RGdWxseVNlbGVjdE5vZGUgfTsKIAogICAg
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVV
UkxzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgY29uc3QgUmFuZ2UqLCBOb2RlKiBoaWdoZXN0
Tm9kZVRvQmVTZXJpYWxpemVkID0gMCk7CisKICAgICBOb2RlKiBzZXJpYWxpemVOb2RlcyhOb2Rl
KiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3Ry
aW5nKHMpOyB9Ci0gICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSosIGJvb2wgY29udmVydEJsb2Nr
c1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxl
Y3ROb2RlKTsKLSAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqLCBE
b2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lkIHdyYXBXaXRoTm9kZShO
b2RlJiwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIFJhbmdlRnVsbHlTZWxl
Y3RzTm9kZSA9IERvZXNGdWxseVNlbGVjdE5vZGUpOworICAgIHZvaWQgd3JhcFdpdGhTdHlsZU5v
ZGUoU3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50JiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwog
ICAgIFN0cmluZyB0YWtlUmVzdWx0cygpOwogCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisKIHByaXZhdGU6Ci0gICAg
dm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5
U2V0KiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1l
bnQmLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHlsZU5vZGVD
bG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRl
eHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7Ci0gICAgU3RyaW5nIHJlbmRlcmVkVGV4dChj
b25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWVGb3JSYW5n
ZShjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1
bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBl
bGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KKworICAgIFN0cmluZyByZW5k
ZXJlZFRleHQoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlRm9yUmFuZ2UoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisKKyAgICB2b2lkIGFwcGVu
ZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiwgYm9vbCBhZGREaXNw
bGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGFwcGVu
ZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7CisgICAg
fQogCiAgICAgZW51bSBOb2RlVHJhdmVyc2FsTW9kZSB7IEVtaXRTdHJpbmcsIERvTm90RW1pdFN0
cmluZyB9OwogICAgIE5vZGUqIHRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0
YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZCwgTm9kZVRyYXZlcnNhbE1vZGUpOwogCi0gICAgYm9vbCBz
aG91bGRBbm5vdGF0ZSgpIHsgcmV0dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZTsgfQotICAgIGJvb2wgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKE5vZGUqIG5v
ZGUpIGNvbnN0CisgICAgYm9vbCBzaG91bGRBbm5vdGF0ZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9oaWdoZXN0Tm9kZVRvQmVTZXJpYWxpemVkICYmIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFs
aXplZC0+cGFyZW50Tm9kZSgpID09IG5vZGUtPnBhcmVudE5vZGUoKQotICAgICAgICAgICAgJiYg
bV93cmFwcGluZ1N0eWxlICYmIG1fd3JhcHBpbmdTdHlsZS0+c3R5bGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTsKKyAgICB9CisK
KyAgICBib29sIHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZShjb25zdCBOb2RlJiBub2RlKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFsaXplZCAmJiBt
X2hpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQtPnBhcmVudE5vZGUoKSA9PSBub2RlLnBhcmVudE5v
ZGUoKSAmJiBtX3dyYXBwaW5nU3R5bGUgJiYgbV93cmFwcGluZ1N0eWxlLT5zdHlsZSgpOwogICAg
IH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXA7CkBAIC0x
NjEsMjAgKzE3NSwyMCBAQCBpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1h
CiB7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZShOb2Rl
KiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3
cmFwV2l0aE5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewogICAgIFN0cmluZ0J1
aWxkZXIgbWFya3VwOwotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIGFw
cGVuZEVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQobm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSksIHJhbmdlRnVsbHlTZWxlY3Rz
Tm9kZSk7CisgICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBhcHBlbmRFbGVt
ZW50KG1hcmt1cCwgdG9FbGVtZW50KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlz
QmxvY2soJm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKICAgICAgICAg
YXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKICAgICBtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwLmFwcGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5v
ZGUpOwogICAgIGlmIChtX25vZGVzKQotICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7Cisg
ICAgICAgIG1fbm9kZXMtPmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1bWVudCYg
ZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAg
ICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1lbnQsIGlzQmxv
Y2spOwpAQCAtMTgyLDcgKzE5Niw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6Ondy
YXBXaXRoU3QKICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNCbG9jaykpOwog
fQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFn
KFN0cmluZ0J1aWxkZXImIG91dCwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBpc0Jsb2NrKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIFN0eWxlUHJvcGVydHlTZXQq
IHN0eWxlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICAvLyB3cmFw
cGluZ1N0eWxlRm9yU2VyaWFsaXphdGlvbiBzaG91bGQgaGF2ZSByZW1vdmVkIC13ZWJraXQtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICBBU1NFUlQocHJvcGVydHlNaXNzaW5nT3JFcXVh
bFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkp
OwpAQCAtMTkwLDcgKzIwNCw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0eWwKICAgICAgICAgb3V0LmFwcGVuZExpdGVyYWwoIjxkaXYgc3R5bGU9XCIiKTsKICAgICBl
bHNlCiAgICAgICAgIG91dC5hcHBlbmRMaXRlcmFsKCI8c3BhbiBzdHlsZT1cIiIpOwotICAgIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmFzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1M
RG9jdW1lbnQoKSk7CisgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+YXNUZXh0
KCksIGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpOwogICAgIG91dC5hcHBlbmRMaXRlcmFsKCJc
Ij4iKTsKIH0KIApAQCAtMjE1LDkgKzIyOSw5IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dGFrZVJlc3UKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZVdpdGhM
aXRlcmFsKCdcMCcsICIiKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCit2b2lkIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYg
dGV4dCkKIHsgICAgCi0gICAgY29uc3QgYm9vbCBwYXJlbnRJc1RleHRhcmVhID0gdGV4dC0+cGFy
ZW50RWxlbWVudCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LT5wYXJlbnRFbGVtZW50
KCkpOworICAgIGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IHRleHQucGFyZW50RWxlbWVu
dCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LnBhcmVudEVsZW1lbnQoKSk7CiAgICAg
Y29uc3QgYm9vbCB3cmFwcGluZ1NwYW4gPSBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUodGV4dCkg
JiYgIXBhcmVudElzVGV4dGFyZWE7CiAgICAgaWYgKHdyYXBwaW5nU3BhbikgewogICAgICAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB3cmFwcGluZ1N0eWxlID0gbV93cmFwcGluZ1N0eWxlLT5jb3B5
KCk7CkBAIC0yMjcsNjUgKzI0MSw2NSBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBpbmNsdWRlZCBpbiBm
b3JjZUlubGluZT8KICAgICAgICAgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlGbG9hdCwgQ1NTVmFsdWVOb25lKTsKIAotICAgICAgICBhcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKSwgJnRleHQtPmRvY3VtZW50KCkp
OworICAgICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5
bGUoKSwgdGV4dC5kb2N1bWVudCgpKTsKICAgICB9CiAKICAgICBpZiAoIXNob3VsZEFubm90YXRl
KCkgfHwgcGFyZW50SXNUZXh0YXJlYSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFRleHQob3V0LCB0ZXh0KTsKICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5k
ZXJlZFRleHQgPSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0
KSwgc2VsZWN0VGFnKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSAhZW5j
bG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb25zdF9jYXN0PFRleHQqPigm
dGV4dCkpLCBzZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVk
VGV4dCA/IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2Uo
dGV4dCwgbV9yYW5nZSk7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgICAgICBh
cHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVyLCBjb250ZW50LCAwLCBjb250
ZW50Lmxlbmd0aCgpLCBFbnRpdHlNYXNrSW5QQ0RBVEEpOwotICAgICAgICBvdXQuYXBwZW5kKGNv
bnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoYnVmZmVyLnRvU3RyaW5nKCksIHRleHQp
KTsKKyAgICAgICAgb3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0
KGJ1ZmZlci50b1N0cmluZygpLCAmdGV4dCkpOwogICAgIH0KIAogICAgIGlmICh3cmFwcGluZ1Nw
YW4pCiAgICAgICAgIG91dC5hcHBlbmQoc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CiB9CiAgICAgCi1T
dHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBu
b2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCitTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlJiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0g
ICAgaWYgKCFub2RlLT5pc1RleHROb2RlKCkpCisgICAgaWYgKCFub2RlLmlzVGV4dE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgY29uc3QgVGV4dCogdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obm9kZSk7CisgICAgY29uc3QgVGV4dCYgdGV4dE5vZGUg
PSB0b1RleHQobm9kZSk7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHVuc2ln
bmVkIGVuZE9mZnNldCA9IHRleHROb2RlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSB0ZXh0Tm9kZS5sZW5ndGgoKTsKIAotICAgIGlmIChyYW5nZSAmJiBub2RlID09IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpKQorICAgIGlmIChyYW5nZSAmJiAmbm9kZSA9PSByYW5nZS0+c3Rh
cnRDb250YWluZXIoKSkKICAgICAgICAgc3RhcnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQo
KTsKLSAgICBpZiAocmFuZ2UgJiYgbm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKCkpCisgICAg
aWYgKHJhbmdlICYmICZub2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAgICAgZW5k
T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwogCi0gICAgUG9zaXRpb24gc3RhcnQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zm
c2V0KTsKLSAgICBQb3NpdGlvbiBlbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29u
c3RfY2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7Ci0gICAgcmV0dXJuIHBsYWluVGV4dChS
YW5nZTo6Y3JlYXRlKCZub2RlLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKS5nZXQoKSk7CisgICAg
UG9zaXRpb24gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxO
b2RlKj4oJm5vZGUpLCBzdGFydE9mZnNldCk7CisgICAgUG9zaXRpb24gZW5kID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSwgZW5kT2Zmc2V0KTsK
KyAgICByZXR1cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUoJm5vZGUuZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCkuZ2V0KCkpOwogfQogCi1TdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnN0
cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQor
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0
IE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBub2RlLm5vZGVW
YWx1ZSgpOwogCi0gICAgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOwotICAgIGlmIChu
b2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKKyAgICBTdHJpbmcgc3RyID0gbm9kZS5ub2Rl
VmFsdWUoKTsKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQogICAgICAg
ICBzdHIudHJ1bmNhdGUocmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBpZiAobm9kZSA9PSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKSkKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkpCiAgICAgICAgIHN0ci5yZW1vdmUoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAg
IHJldHVybiBzdHI7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFkZERpc3Bs
YXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2
b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewotICAgIGNvbnN0IGJv
b2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCk7
CisgICAgY29uc3QgYm9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKIAotICAg
IGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSA/IGVsZW1l
bnQtPmF0dHJpYnV0ZUNvdW50KCkgOiAwOwotICAgIGNvbnN0IGJvb2wgc2hvdWxkQW5ub3RhdGVP
ckZvcmNlSW5saW5lID0gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0
ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOworICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVs
ZW1lbnQuaGFzQXR0cmlidXRlcygpID8gZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpIDogMDsKKyAg
ICBjb25zdCBib29sIHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSA9IGVsZW1lbnQuaXNIVE1M
RWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOwogICAg
IGNvbnN0IGJvb2wgc2hvdWxkT3ZlcnJpZGVTdHlsZUF0dHIgPSBzaG91bGRBbm5vdGF0ZU9yRm9y
Y2VJbmxpbmUgfHwgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQuYXR0cmlidXRlQXQoaSk7CiAgICAgICAgIC8v
IFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmlidXRlIHNlcGFyYXRlbHksIGJlbG93LgogICAg
ICAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzdHlsZUF0dHIgJiYgc2hvdWxkT3ZlcnJpZGVT
dHlsZUF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5NywxNyArMzExLDE3IEBAIHZv
aWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KIAogICAgICAgICBpZiAoc2hv
dWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZSA9IG1fd3JhcHBpbmdTdHlsZS0+Y29weSgpOwotICAgICAgICAgICAgbmV3SW5saW5lU3R5
bGUtPnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoZWxlbWVudCk7Ci0gICAg
ICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9m
Tm9kZShlbGVtZW50KTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0
aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSk7
CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhT
dHlsZU9mTm9kZShjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsK
IAotICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpKQotICAgICAgICAgICAgbmV3
SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxlKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihlbGVtZW50KS0+aW5saW5lU3R5bGUoKSk7CisgICAgICAgIGlmIChlbGVtZW50LmlzU3R5bGVk
RWxlbWVudCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5p
bmxpbmVTdHlsZSgpKQorICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0
eWxlKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5pbmxpbmVTdHls
ZSgpKTsKIAogICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5lKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkKLSAgICAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24odG9IVE1MRWxlbWVudChl
bGVtZW50KSk7CisgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm1lcmdlU3R5bGVGcm9t
UnVsZXNGb3JTZXJpYWxpemF0aW9uKHRvSFRNTEVsZW1lbnQoY29uc3RfY2FzdDxFbGVtZW50Kj4o
JmVsZW1lbnQpKSk7CiAKICAgICAgICAgICAgIGlmIChhZGREaXNwbGF5SW5saW5lKQogICAgICAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5mb3JjZUlubGluZSgpOwpAQCAtMzcxLDEyICszODUs
MTIgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gQWRkIHRoZSBub2RlIHRvIHRoZSBtYXJrdXAgaWYgd2Un
cmUgbm90IHNraXBwaW5nIHRoZSBkZXNjZW5kYW50cwogICAgICAgICAgICAgaWYgKHNob3VsZEVt
aXQpCi0gICAgICAgICAgICAgICAgYXBwZW5kU3RhcnRUYWcobik7CisgICAgICAgICAgICAgICAg
YXBwZW5kU3RhcnRUYWcoKm4pOwogCiAgICAgICAgICAgICAvLyBJZiBub2RlIGhhcyBubyBjaGls
ZHJlbiwgY2xvc2UgdGhlIHRhZyBub3cuCiAgICAgICAgICAgICBpZiAoIW4tPmNoaWxkTm9kZUNv
dW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRW1pdCkKLSAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kRW5kVGFnKG4pOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmRUYWco
Km4pOwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBuOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBvcGVuZWRUYWcgPSB0cnVlOwpAQCAtMzk0LDcgKzQwOCw3IEBA
IE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgLy8gTm90IGF0IHRoZSBlbmQgb2YgdGhlIHJh
bmdlLCBjbG9zZSBhbmNlc3RvcnMgdXAgdG8gc2libGluZyBvZiBuZXh0IG5vZGUuCiAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRh
ZyhhbmNlc3Rvcik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRhZygqYW5jZXN0b3Ip
OwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBhbmNlc3RvcjsKICAgICAgICAgICAgICAg
ICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgIH0KQEAgLTQxMCw3
ICs0MjQsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAg
ICAgICAgICAgICAgICAgIC8vIG9yIGIpIGFuY2VzdG9ycyB0aGF0IHdlIG5ldmVyIGVuY291bnRl
cmVkIGR1cmluZyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgc3RhcnRpbmcgYXQgc3RhcnROb2RlOgog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJl
bnQpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwV2l0aE5vZGUocGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBXaXRoTm9kZSgqcGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9
IHBhcmVudDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDQsMzUgKzU1
OCwzMyBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwCiAKIC8vIEZJ
WE1FOiBTaG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RB
bm5vdGF0ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBh
bmQgc3R5bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1h
cmt1cFN0cmluZygpCi1zdGF0aWMgU3RyaW5nIGNyZWF0ZU1hcmt1cEludGVybmFsKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgUmFuZ2UqIHJhbmdlLCBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdl
LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywKK3N0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJu
YWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFJhbmdlJiB1
cGRhdGVkUmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLAogICAgIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlIHNob3VsZEFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIEVBYnNv
bHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAg
ICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVCh1cGRhdGVkUmFuZ2UpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcsIChBU0NJ
SUxpdGVyYWwoIjxiciBjbGFzcz1cIiIgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUgIlwiPiIpKSk7
CiAKLSAgICBib29sIGNvbGxhcHNlZCA9IHVwZGF0ZWRSYW5nZS0+Y29sbGFwc2VkKEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgIGJvb2wgY29sbGFwc2VkID0gdXBkYXRlZFJhbmdlLmNvbGxhcHNl
ZChBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoY29sbGFwc2VkKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHVwZGF0ZWRSYW5n
ZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgTm9k
ZSogY29tbW9uQW5jZXN0b3IgPSB1cGRhdGVkUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
QVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBOb2RlKiBib2R5ID0gZW5jbG9zaW5nTm9kZVdpdGhU
YWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIGJvZHlUYWcpOwogICAgIE5v
ZGUqIGZ1bGx5U2VsZWN0ZWRSb290ID0gMDsKICAgICAvLyBGSVhNRTogRG8gdGhpcyBmb3IgYWxs
IGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90IGp1c3QgdGhlIGJvZHkuCi0gICAgaWYgKGJvZHkg
JiYgYXJlUmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRz
T2ZOb2RlKGJvZHkpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJhbmdlKSkKKyAgICBpZiAo
Ym9keSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgJnJhbmdlKSkKICAg
ICAgICAgZnVsbHlTZWxlY3RlZFJvb3QgPSBib2R5OwotICAgIE5vZGUqIHNwZWNpYWxDb21tb25B
bmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCh1cGRhdGVkUmFuZ2UsIHNob3Vs
ZEFubm90YXRlKTsKLSAgICBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcihub2Rl
cywgc2hvdWxkUmVzb2x2ZVVSTHMsIHNob3VsZEFubm90YXRlLCB1cGRhdGVkUmFuZ2UsIHNwZWNp
YWxDb21tb25BbmNlc3Rvcik7Ci0gICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS0+cGFz
dExhc3ROb2RlKCk7Ci0KLSAgICBOb2RlKiBzdGFydE5vZGUgPSB1cGRhdGVkUmFuZ2UtPmZpcnN0
Tm9kZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQodXBkYXRlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7CisgICAgTm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9y
VG9XcmFwTWFya3VwKCZ1cGRhdGVkUmFuZ2UsIHNob3VsZEFubm90YXRlKTsKKworICAgIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCBzaG91bGRSZXNvbHZlVVJMcywg
c2hvdWxkQW5ub3RhdGUsICZ1cGRhdGVkUmFuZ2UsIHNwZWNpYWxDb21tb25BbmNlc3Rvcik7Cisg
ICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS5wYXN0TGFzdE5vZGUoKTsKKworICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IHVwZGF0ZWRSYW5nZS5maXJzdE5vZGUoKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVN0YXJ0KHVwZGF0ZWRSYW5nZS5zdGFydFBvc2l0aW9uKCksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5n
ZS5lbmRQb3NpdGlvbigpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAoc2hvdWxkQW5u
b3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSAmJiBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5l
QWZ0ZXIodmlzaWJsZVN0YXJ0KSkgewogICAgICAgICBpZiAodmlzaWJsZVN0YXJ0ID09IHZpc2li
bGVFbmQucHJldmlvdXMoKSkKICAgICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVT
dHJpbmc7CkBAIC02MTEsNyArNjIzLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRl
cm5hbChEb2N1bQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTaW5j
ZSB0aGlzIG5vZGUgYW5kIGFsbCB0aGUgb3RoZXIgYW5jZXN0b3JzIGFyZSBub3QgaW4gdGhlIHNl
bGVjdGlvbiB3ZSB3YW50IHRvIHNldCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgdG8gRG9lc05vdEZ1
bGx5U2VsZWN0Tm9kZQogICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgc3R5bGVzIHRoYXQgYWZm
ZWN0IHRoZSBleHRlcmlvciBvZiB0aGUgbm9kZSBhcmUgbm90IGluY2x1ZGVkLgotICAgICAgICAg
ICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZShhbmNlc3RvciwgY29udmVydEJsb2Nrc1Rv
SW5saW5lcywgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OkRvZXNOb3RGdWxseVNlbGVjdE5vZGUp
OworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZSgqYW5jZXN0b3IsIGNv
bnZlcnRCbG9ja3NUb0lubGluZXMsIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpEb2VzTm90RnVs
bHlTZWxlY3ROb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlcykKICAg
ICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGFuY2VzdG9yKTsKQEAgLTYzMCwxMyArNjQyLDEw
IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJuYWwoRG9jdW0KICAgICByZXR1cm4g
YWNjdW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25z
dCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSBzaG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1
dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5n
ZSYgcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBz
aG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKTsKLSAgICBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdlID0gcmFuZ2U7CisgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpOworICAgIGNvbnN0IFJhbmdl
KiB1cGRhdGVkUmFuZ2UgPSAmcmFuZ2U7CiAKICNpZiBFTkFCTEUoREVMRVRJT05fVUkpCiAgICAg
Ly8gRGlzYWJsZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2Vy
aWFsaXplZCBpbnRvIHRoZSBtYXJrdXAsCkBAIC02NDYsMTI2ICs2NTUsNDMgQEAgU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogCiAgICAgUmVmUHRyPFJhbmdlPiB1cGRh
dGVkUmFuZ2VSZWY7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHVwZGF0ZWRSYW5nZVJlZiA9
IGZyYW1lLT5lZGl0b3IoKS5hdm9pZEludGVyc2VjdGlvbldpdGhEZWxldGVCdXR0b25Db250cm9s
bGVyKHJhbmdlKTsKKyAgICAgICAgdXBkYXRlZFJhbmdlUmVmID0gZnJhbWUtPmVkaXRvcigpLmF2
b2lkSW50ZXJzZWN0aW9uV2l0aERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoJnJhbmdlKTsKICAgICAg
ICAgdXBkYXRlZFJhbmdlID0gdXBkYXRlZFJhbmdlUmVmLmdldCgpOwogICAgICAgICBpZiAoIXVw
ZGF0ZWRSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KICNl
bmRpZgogCi0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFsKCZkb2N1bWVudCwgcmFuZ2Us
IHVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFs
KGRvY3VtZW50LCByYW5nZSwgKnVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBj
b252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CiB9CiAKLVBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFy
c2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQorUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBQYXJzZXJDb250ZW50
UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3kpCiB7CiAgICAgLy8gV2UgdXNlIGEgZmFrZSBib2R5
IGVsZW1lbnQgaGVyZSB0byB0cmljayB0aGUgSFRNTCBwYXJzZXIgdG8gdXNpbmcgdGhlIEluQm9k
eSBpbnNlcnRpb24gbW9kZS4KLSAgICBSZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBmYWtlQm9keSA9
IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7
CisgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKIAogICAgIGZyYWdtZW50LT5w
YXJzZUhUTUwobWFya3VwLCBmYWtlQm9keS5nZXQoKSwgcGFyc2VyQ29udGVudFBvbGljeSk7CiAK
LSAgICBpZiAoIWJhc2VVUkwuaXNFbXB0eSgpICYmIGJhc2VVUkwgIT0gYmxhbmtVUkwoKSAmJiBi
YXNlVVJMICE9IGRvY3VtZW50LT5iYXNlVVJMKCkpCisgICAgaWYgKCFiYXNlVVJMLmlzRW1wdHko
KSAmJiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC5iYXNlVVJM
KCkpCiAgICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7CiAKICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBmcmFn
bWVudE1hcmtlclRhZ1tdID0gIndlYmtpdC1mcmFnbWVudC1tYXJrZXIiOwotCi1zdGF0aWMgYm9v
bCBmaW5kTm9kZXNTdXJyb3VuZGluZ0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBSZWZQdHI8
Tm9kZT4mIG5vZGVCZWZvcmVDb250ZXh0LCBSZWZQdHI8Tm9kZT4mIG5vZGVBZnRlckNvbnRleHQp
Ci17Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFICYmIHN0YXRpY19jYXN0PENoYXJhY3RlckRh
dGEqPihub2RlKS0+ZGF0YSgpID09IGZyYWdtZW50TWFya2VyVGFnKSB7Ci0gICAgICAgICAgICBp
ZiAoIW5vZGVCZWZvcmVDb250ZXh0KQotICAgICAgICAgICAgICAgIG5vZGVCZWZvcmVDb250ZXh0
ID0gbm9kZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5vZGVBZnRlckNv
bnRleHQgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQg
dHJpbUZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBOb2RlKiBub2RlQmVmb3Jl
Q29udGV4dCwgTm9kZSogbm9kZUFmdGVyQ29udGV4dCkKLXsKLSAgICBSZWZQdHI8Tm9kZT4gbmV4
dDsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0LT5pc0Rl
c2NlbmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5n
ZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMobm9kZUFmdGVyQ29udGV4dCkp
OwotICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIEFT
U0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBpZiAobm9kZUJlZm9yZUNvbnRleHQgPT0gbm9k
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChub2RlQWZ0ZXJDb250
ZXh0LT5wYXJlbnROb2RlKCkpOwotICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBub2RlQWZ0
ZXJDb250ZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7Ci0gICAgICAgIG5vZGUtPnBh
cmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBt
YXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLAotICAg
IGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50
UG9saWN5KQotewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGUgbWFya3VwIGFscmVhZHkgY29udGFpbnMgdGhlc2UgbWFya2Vycy4KLQotICAgIFN0cmluZ0J1
aWxkZXIgdGFnZ2VkTWFya3VwOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLmxlZnQo
ZnJhZ21lbnRTdGFydCkpOwotICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KHRh
Z2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQo
bWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdtZW50U3Rh
cnQpKTsKLSAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAs
IGZyYWdtZW50TWFya2VyVGFnKTsKLSAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJz
dHJpbmcoZnJhZ21lbnRFbmQpKTsKLQotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0YWdn
ZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdGFnZ2VkTWFy
a3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwotICAgIFJlZlB0
cjxEb2N1bWVudD4gdGFnZ2VkRG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIFVSTCgpKTsK
LSAgICB0YWdnZWREb2N1bWVudC0+dGFrZUFsbENoaWxkcmVuRnJvbSh0YWdnZWRGcmFnbWVudC5n
ZXQoKSk7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbm9kZUJlZm9yZUNvbnRleHQ7Ci0gICAgUmVmUHRy
PE5vZGU+IG5vZGVBZnRlckNvbnRleHQ7Ci0gICAgaWYgKCFmaW5kTm9kZXNTdXJyb3VuZGluZ0Nv
bnRleHQodGFnZ2VkRG9jdW1lbnQuZ2V0KCksIG5vZGVCZWZvcmVDb250ZXh0LCBub2RlQWZ0ZXJD
b250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQoKSwKLSAgICAgICAgcG9zaXRpb25BZnRl
ck5vZGUobm9kZUJlZm9yZUNvbnRleHQuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
LAotICAgICAgICBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyQ29udGV4dC5nZXQoKSkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBy
YW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAg
Tm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFu
ZEFwcGVhcmFuY2VXaXRoTm9SZW5kZXJlcihjb21tb25BbmNlc3Rvcik7Ci0KLSAgICAvLyBXaGVu
IHRoZXJlJ3MgYSBzcGVjaWFsIGNvbW1vbiBhbmNlc3RvciBvdXRzaWRlIG9mIHRoZSBmcmFnbWVu
dCwgd2UgbXVzdCBpbmNsdWRlIGl0IGFzIHdlbGwgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0aGUgc3Ry
dWN0dXJlIGFuZCBhcHBlYXJhbmNlIG9mIHRoZSBmcmFnbWVudC4gRm9yIGV4YW1wbGUsIGlmIHRo
ZSBmcmFnbWVudCBjb250YWlucwotICAgIC8vIFRELCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGVu
Y2xvc2luZyBUQUJMRSB0YWcgYXMgd2VsbC4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKLSAgICBpZiAo
c3BlY2lhbENvbW1vbkFuY2VzdG9yKQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoc3Bl
Y2lhbENvbW1vbkFuY2VzdG9yLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBlbHNlCi0gICAg
ICAgIGZyYWdtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRvQ29udGFpbmVyTm9kZShjb21tb25B
bmNlc3RvcikpOwotCi0gICAgdHJpbUZyYWdtZW50KGZyYWdtZW50LmdldCgpLCBub2RlQmVmb3Jl
Q29udGV4dC5nZXQoKSwgbm9kZUFmdGVyQ29udGV4dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gZnJh
Z21lbnQ7Ci19Ci0KLVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxk
cmVuT25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lw
LCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKK1N0cmluZyBj
cmVhdGVNYXJrdXAoY29uc3QgTm9kZSYgbm9kZSwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHks
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwLCBFRnJhZ21lbnRTZXJpYWxpemF0
aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKIHsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgSFRNTEVsZW1lbnQqIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSAwOwogI2lmIEVOQUJMRShERUxFVElPTl9VSSkKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLmNv
bnRhaW5lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFudE9mKGRlbGV0
ZUJ1dHRvbkNvbnRhaW5lckVsZW1lbnQpKQorICAgICAgICBpZiAobm9kZS5pc0Rlc2NlbmRhbnRP
ZihkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogICAgIH0KICNlbmRpZgorCiAgICAgTWFya3VwQWNjdW11bGF0b3IgYWNjdW11
bGF0b3Iobm9kZXMsIHNob3VsZFJlc29sdmVVUkxzLCAwLCBmcmFnbWVudFNlcmlhbGl6YXRpb24p
OwotICAgIHJldHVybiBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhjb25zdF9jYXN0PE5vZGUq
Pihub2RlKSwgZGVsZXRlQnV0dG9uQ29udGFpbmVyRWxlbWVudCwgY2hpbGRyZW5Pbmx5LCB0YWdO
YW1lc1RvU2tpcCk7CisgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGNvbnN0
X2Nhc3Q8Tm9kZSY+KG5vZGUpLCBkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50LCBjaGlsZHJl
bk9ubHksIHRhZ05hbWVzVG9Ta2lwKTsKIH0KIAogc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZy
b21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBoLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
QEAgLTg5Niw1NCArODIyLDI5IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ20KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgVmVjdG9yPE5vZGUqPiYgbm9kZXMpCi17Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSNpZiBFTkFCTEUoREVMRVRJT05fVUkpCi0gICAgLy8gZGlzYWJs
ZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2VyaWFsaXplZCBp
bnRvIHRoZSBtYXJrdXAKLSAgICBEZWxldGVCdXR0b25Db250cm9sbGVyRGlzYWJsZVNjb3BlKGRv
Y3VtZW50LT5mcmFtZSgpKTsKLSNlbmRpZgotCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIHNp
emVfdCBzaXplID0gbm9kZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlRGVmYXVs
dFBhcmFncmFwaEVsZW1lbnQoKmRvY3VtZW50KTsKLSAgICAgICAgZWxlbWVudC0+YXBwZW5kQ2hp
bGQobm9kZXNbaV0sIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoZWxlbWVudC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIH0K
LQotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KIFN0cmluZyBkb2N1bWVudFR5
cGVTdHJpbmcoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHJldHVybiBjcmVhdGVN
YXJrdXAoZG9jdW1lbnQuZG9jdHlwZSgpKTsKKyAgICBEb2N1bWVudFR5cGUqIGRvY3VtZW50VHlw
ZSA9IGRvY3VtZW50LmRvY3R5cGUoKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZSkKKyAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqZG9jdW1lbnRU
eXBlKTsKIH0KIAotU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSogbm9kZSkKK1N0
cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZXZl
ciAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8KICAgICBTdHJpbmcgbWFya3VwU3Ry
aW5nID0gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1ZGVOb2RlLCAwKTsKIAotICAgIE5vZGU6Ok5v
ZGVUeXBlIG5vZGVUeXBlID0gbm9kZS0+bm9kZVR5cGUoKTsKKyAgICBOb2RlOjpOb2RlVHlwZSBu
b2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKICAgICBpZiAobm9kZVR5cGUgIT0gTm9kZTo6RE9D
VU1FTlRfTk9ERSAmJiBub2RlVHlwZSAhPSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpCi0gICAg
ICAgIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhub2RlLT5kb2N1bWVudCgpKSAr
IG1hcmt1cFN0cmluZzsKKyAgICAgICAgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5n
KG5vZGUuZG9jdW1lbnQoKSkgKyBtYXJrdXBTdHJpbmc7CiAKICAgICByZXR1cm4gbWFya3VwU3Ry
aW5nOwogfQogCi1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UpCitT
dHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTm9kZSogbm9kZSA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUqIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDcgQEAgZW51bSBF
QWJzb2x1dGVVUkxzIHsgRG9Ob3RSZXNvbHZlVVJMcywgUgogZW51bSBFRnJhZ21lbnRTZXJpYWxp
emF0aW9uIHsgSFRNTEZyYWdtZW50U2VyaWFsaXphdGlvbiwgWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uIH07CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGlj
eSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5k
LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kpOwotUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNv
bnN0IFZlY3RvcjxOb2RlKj4mKTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29u
dGVudCk7CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5u
ZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ks
IEV4Y2VwdGlvbkNvZGUmKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpOwogUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgSFRNTEVs
ZW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5LCBFeGNlcHRpb25Db2RlJik7CkBAIC02NCwxMSAr
NjIsMTEgQEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKik7CiB2b2lkIHJlcGxhY2VDaGls
ZHJlbldpdGhGcmFnbWVudChDb250YWluZXJOb2RlJiwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiwgRXhjZXB0aW9uQ29kZSYpOwogdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChDb250
YWluZXJOb2RlJiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi1TdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmdlKiwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSA9IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgYm9vbCBjb252ZXJ0Qmxv
Y2tzVG9JbmxpbmVzID0gZmFsc2UsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzKTsK
LVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRl
Tm9kZSwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQWJzb2x1dGVVUkxzID0gRG9Ob3RSZXNvbHZlVVJM
cywgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCA9IDAsIEVGcmFnbWVudFNl
cmlhbGl6YXRpb24gPSBIVE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKTsKK1N0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZ2UmLCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlID0gRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBib29sIGNvbnZlcnRCbG9ja3NU
b0lubGluZXMgPSBmYWxzZSwgRUFic29sdXRlVVJMcyA9IERvTm90UmVzb2x2ZVVSTHMpOworU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlJiwgRUNoaWxkcmVuT25seSA9IEluY2x1ZGVOb2Rl
LCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwID0gMCwgRUZyYWdtZW50U2VyaWFs
aXphdGlvbiA9IEhUTUxGcmFnbWVudFNlcmlhbGl6YXRpb24pOwogCi1TdHJpbmcgY3JlYXRlRnVs
bE1hcmt1cChjb25zdCBOb2RlKik7Ci1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5n
ZSopOworU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSYpOworU3RyaW5nIGNyZWF0
ZUZ1bGxNYXJrdXAoY29uc3QgUmFuZ2UmKTsKIAogU3RyaW5nIHVybFRvTWFya3VwKGNvbnN0IFVS
TCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCBi
b29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyCiAgICAgICAgICAgICBsb2Fk
ZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoYXJjaGl2ZS5nZXQoKSk7CiAKICAgICAgICAgU3Ry
aW5nIG1hcmt1cFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobWFpblJlc291cmNlLT5kYXRhKCkt
PmRhdGEoKSwgbWFpblJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7Ci0gICAgICAgIGFkZEZyYWdt
ZW50KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJp
bmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVu
dCkpOworICAgICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1l
LmRvY3VtZW50KCksIG1hcmt1cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dT
Y3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24g
MTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjIsNyArNDYyLDcgQEAgYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFk
ZXI6OnJlYWRXZWJBcgogICAgICAgICAgICAgbG9hZGVyLT5hZGRBbGxBcmNoaXZlUmVzb3VyY2Vz
KGFyY2hpdmUuZ2V0KCkpOwogCiAgICAgICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpOwotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERp
c2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CisgICAgICAgIGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1h
aW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTE0LDcgKzUxNCw3IEBAIGJvb2wgRWRp
dG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRNTCgKICAgICBpZiAoc3RyaW5nT21pdHRpbmdN
aWNyb3NvZnRQcmVmaXguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBzdHJp
bmdPbWl0dGluZ01pY3Jvc29mdFByZWZpeCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRp
bmdBbmRQbHVnaW5Db250ZW50KTsKKyAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgc3RyaW5nT21pdHRpbmdNaWNyb3NvZnRQcmVmaXgsIGVt
cHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAgICAgcmV0
dXJuIGZyYWdtZW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0NSwxMiArMzQ1LDEyIEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFEKIAogU3RyaW5nIEhUTUxFbGVtZW50Ojppbm5lckhUTUwoKSBj
b25zdAogewotICAgIHJldHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAg
ICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiBTdHJpbmcg
SFRNTEVsZW1lbnQ6Om91dGVySFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1
cCh0aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1M
RWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJ
KHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEyICs3NywyNyBAQCBpbmxpbmUgSFRNTEZy
YW1lT3duZXJFbGVtZW50JiB0b0ZyYW1lT3duCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
cmFtZU93bmVyRWxlbWVudCY+KG5vZGUpOwogfQogCitpbmxpbmUgY29uc3QgSFRNTEZyYW1lT3du
ZXJFbGVtZW50JiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0ZyYW1lT3duZXJFbGVtZW50
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQm
Pihub2RlKTsKK30KKwogaW5saW5lIEhUTUxGcmFtZU93bmVyRWxlbWVudCogdG9GcmFtZU93bmVy
RWxlbWVudChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFub2RlIHx8IG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOwogfQogCitpbmxpbmUgY29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50KiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQmKTsKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKKwogY2xhc3MgU3ViZnJhbWVM
b2FkaW5nRGlzYWJsZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN1YmZyYW1lTG9hZGluZ0Rp
c2FibGVyKENvbnRhaW5lck5vZGUmIHJvb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE0
ICs4NSw2IEBAIHZvaWQgSFRNTFRlbXBsYXRlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG8KICAgICBk
b2N1bWVudCgpLmVuc3VyZVRlbXBsYXRlRG9jdW1lbnQoKS0+YWRvcHRJZk5lZWRlZChtX2NvbnRl
bnQuZ2V0KCkpOwogfQogCi0jaWZuZGVmIE5ERUJVRwotY29uc3QgSFRNTFRlbXBsYXRlRWxlbWVu
dCogdG9IVE1MVGVtcGxhdGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSAmJiBub2RlLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50Kj4obm9kZSk7Ci19Ci0jZW5kaWYKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuaAkocmV2aXNp
b24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDIxICs1NCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbV9jb250ZW50OwogfTsKIAotY29uc3QgSFRNTFRlbXBs
YXRlRWxlbWVudCogdG9IVE1MVGVtcGxhdGVFbGVtZW50KGNvbnN0IE5vZGUqKTsKLQotaW5saW5l
IEhUTUxUZW1wbGF0ZUVsZW1lbnQqIHRvSFRNTFRlbXBsYXRlRWxlbWVudChOb2RlKiBub2RlKQot
ewotICAgIHJldHVybiBjb25zdF9jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQqPih0b0hUTUxUZW1w
bGF0ZUVsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZSo+KG5vZGUpKSk7Ci19Ci0KLSNpZmRl
ZiBOREVCVUcKLQotLy8gVGhlIGRlYnVnIHZlcnNpb24gb2YgdGhpcywgd2l0aCBhc3NlcnRpb25z
LCBpcyBub3QgaW5saW5lZC4KLWlubGluZSBjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50KiB0b0hU
TUxUZW1wbGF0ZUVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSFRNTFRlbXBsYXRlRWxlbWVudCo+KG5vZGUpOwotfQotI2VuZGlmIC8vIE5E
RUJVRworRUxFTUVOVF9UWVBFX0NBU1RTKEhUTUxUZW1wbGF0ZUVsZW1lbnQpCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5j
cHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTAgKzIwNiwxMCBAQCBwcml2YXRlOgogY2xh
c3MgRE9NRWRpdG9yOjpTZXRPdXRlckhUTUxBY3Rpb24gOiBwdWJsaWMgSW5zcGVjdG9ySGlzdG9y
eTo6QWN0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXRPdXRlckhUTUxBY3Rpb24p
OwogcHVibGljOgotICAgIFNldE91dGVySFRNTEFjdGlvbihOb2RlKiBub2RlLCBjb25zdCBTdHJp
bmcmIGh0bWwpCisgICAgU2V0T3V0ZXJIVE1MQWN0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmlu
ZyYgaHRtbCkKICAgICAgICAgOiBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24oIlNldE91dGVySFRN
TCIpCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCi0gICAgICAgICwgbV9uZXh0U2libGluZyhub2Rl
LT5uZXh0U2libGluZygpKQorICAgICAgICAsIG1fbmV4dFNpYmxpbmcobm9kZS5uZXh0U2libGlu
ZygpKQogICAgICAgICAsIG1faHRtbChodG1sKQogICAgICAgICAsIG1fbmV3Tm9kZSgwKQogICAg
ICAgICAsIG1faGlzdG9yeShhZG9wdFB0cihuZXcgSW5zcGVjdG9ySGlzdG9yeSgpKSkKQEAgLTI0
MSw3ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxOb2Rl
PiBtX25vZGU7CisgICAgUmVmPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0
U2libGluZzsKICAgICBTdHJpbmcgbV9odG1sOwogICAgIFN0cmluZyBtX29sZEhUTUw7CkBAIC0z
NzQsNyArMzc0LDcgQEAgYm9vbCBET01FZGl0b3I6OnJlbW92ZUF0dHJpYnV0ZShFbGVtZW50Kgog
ICAgIHJldHVybiBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlbW92ZUF0dHJpYnV0
ZUFjdGlvbihlbGVtZW50LCBuYW1lKSksIGVjKTsKIH0KIAotYm9vbCBET01FZGl0b3I6OnNldE91
dGVySFRNTChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5vZGUqKiBuZXdOb2RlLCBF
eGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgRE9NRWRpdG9yOjpzZXRPdXRlckhUTUwoTm9kZSYgbm9k
ZSwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgT3duUHRyPFNldE91dGVySFRNTEFjdGlvbj4gYWN0aW9uID0gYWRvcHRQdHIobmV3
IFNldE91dGVySFRNTEFjdGlvbihub2RlLCBodG1sKSk7CiAgICAgU2V0T3V0ZXJIVE1MQWN0aW9u
KiByYXdBY3Rpb24gPSBhY3Rpb24uZ2V0KCk7CkBAIC00MzksNyArNDM5LDcgQEAgYm9vbCBET01F
ZGl0b3I6OnJlbW92ZUF0dHJpYnV0ZShFbGVtZW50KgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWJvb2wgRE9NRWRpdG9yOjpzZXRPdXRlckhUTUwoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBo
dG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQorYm9vbCBET01F
ZGl0b3I6OnNldE91dGVySFRNTChOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5vZGUq
KiBuZXdOb2RlLCBFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgYm9vbCByZXN1bHQgPSBzZXRPdXRlckhUTUwobm9kZSwgaHRtbCwgbmV3
Tm9kZSwgZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuaAkocmV2aXNp
b24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlbW92ZUNoaWxk
KE5vZGUqIHBhcmVudE5vZGUsIE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBzZXRB
dHRyaWJ1dGUoRWxlbWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgcmVtb3ZlQXR0cmlidXRlKEVsZW1lbnQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldE91dGVySFRN
TChOb2RlKiwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIGJvb2wgc2V0T3V0ZXJIVE1MKE5vZGUmLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5v
ZGUqKiBuZXdOb2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCByZXBsYWNlV2hvbGVUZXh0
KFRleHQqLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHJl
cGxhY2VDaGlsZChOb2RlKiBwYXJlbnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IG5ld05vZGUsIE5v
ZGUqIG9sZE5vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHNldE5vZGVWYWx1ZShOb2Rl
KiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlbW92ZUNoaWxkKE5vZGUqIHBhcmVudE5v
ZGUsIE5vZGUqLCBFcnJvclN0cmluZyopOwogICAgIGJvb2wgc2V0QXR0cmlidXRlKEVsZW1lbnQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEVycm9yU3RyaW5nKik7
CiAgICAgYm9vbCByZW1vdmVBdHRyaWJ1dGUoRWxlbWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXJyb3JTdHJpbmcqKTsKLSAgICBib29sIHNldE91dGVySFRNTChOb2RlKiwgY29uc3QgU3RyaW5n
JiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JTdHJpbmcqKTsKKyAgICBib29sIHNldE91dGVy
SFRNTChOb2RlJiwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JTdHJp
bmcqKTsKICAgICBib29sIHJlcGxhY2VXaG9sZVRleHQoVGV4dCosIGNvbnN0IFN0cmluZyYgdGV4
dCwgRXJyb3JTdHJpbmcqKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCShyZXZpc2lvbiAxNTY5ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE5LDMyICsxMTksMzIgQEAgdm9pZCBET01QYXRjaFN1cHBvcnQ6OnBhdGNoRG9jdW1lbnQoY29u
cwogICAgIH0KIH0KIAotTm9kZSogRE9NUGF0Y2hTdXBwb3J0OjpwYXRjaE5vZGUoTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmIGVjKQorTm9kZSogRE9NUGF0
Y2hTdXBwb3J0OjpwYXRjaE5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIERvbid0IHBhcnNlIDxodG1sPiBhcyBhIGZyYWdt
ZW50LgotICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IChub2RlLT5wYXJlbnROb2Rl
KCkgJiYgbm9kZS0+cGFyZW50Tm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgpKSkgeworICAgIGlmIChu
b2RlLmlzRG9jdW1lbnROb2RlKCkgfHwgKG5vZGUucGFyZW50Tm9kZSgpICYmIG5vZGUucGFyZW50
Tm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgpKSkgewogICAgICAgICBwYXRjaERvY3VtZW50KG1hcmt1
cCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIE5vZGUqIHByZXZpb3VzU2libGlu
ZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIHByZXZpb3VzU2libGluZyA9
IG5vZGUucHJldmlvdXNTaWJsaW5nKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQg
dXNlIG9uZSBvZiBjcmVhdGVGcmFnbWVudCogaW4gbWFya3VwLmgKICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKm1fZG9jdW1l
bnQpOwogICAgIGlmIChtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBmcmFn
bWVudC0+cGFyc2VIVE1MKG1hcmt1cCwgbm9kZS0+cGFyZW50RWxlbWVudCgpID8gbm9kZS0+cGFy
ZW50RWxlbWVudCgpIDogbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpOworICAgICAgICBm
cmFnbWVudC0+cGFyc2VIVE1MKG1hcmt1cCwgbm9kZS5wYXJlbnRFbGVtZW50KCkgPyBub2RlLnBh
cmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKICAgICBlbHNl
Ci0gICAgICAgIGZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAsIG5vZGUtPnBhcmVudEVsZW1lbnQo
KSA/IG5vZGUtPnBhcmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
KTsKKyAgICAgICAgZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgbm9kZS5wYXJlbnRFbGVtZW50
KCkgPyBub2RlLnBhcmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
KTsKIAogICAgIC8vIENvbXBvc2UgdGhlIG9sZCBsaXN0LgotICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+
ID4gb2xkTGlzdDsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRO
b2RlKCk7CisgICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+PiBvbGRMaXN0OwogICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKQogICAgICAgICBvbGRMaXN0LmFwcGVuZChjcmVhdGVEaWdlc3QoY2hp
bGQsIDApKTsKIAogICAgIC8vIENvbXBvc2UgdGhlIG5ldyBsaXN0LgogICAgIFN0cmluZyBtYXJr
dXBDb3B5ID0gbWFya3VwLmxvd2VyKCk7CiAgICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4gbmV3
TGlzdDsKLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZCAhPSBub2RlOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7IGNoaWxkICE9ICZub2RlOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBuZXdMaXN0LmFwcGVuZChjcmVhdGVE
aWdlc3QoY2hpbGQsIDApKTsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gZnJhZ21lbnQtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
aWYgKGNoaWxkLT5oYXNUYWdOYW1lKGhlYWRUYWcpICYmICFjaGlsZC0+Zmlyc3RDaGlsZCgpICYm
IG1hcmt1cENvcHkuZmluZCgiPC9oZWFkPiIpID09IG5vdEZvdW5kKQpAQCAtMTUzLDEzICsxNTMs
MTMgQEAgTm9kZSogRE9NUGF0Y2hTdXBwb3J0OjpwYXRjaE5vZGUoTm9kZSogbgogICAgICAgICAg
ICAgY29udGludWU7IC8vIEhUTUw1IHBhcnNlciBpbnNlcnRzIGVtcHR5IDxib2R5PiB0YWcgd2hl
bmV2ZXIgaXQgcGFyc2VzIDwvaGVhZD4KICAgICAgICAgbmV3TGlzdC5hcHBlbmQoY3JlYXRlRGln
ZXN0KGNoaWxkLCAmbV91bnVzZWROb2Rlc01hcCkpOwogICAgIH0KLSAgICBmb3IgKE5vZGUqIGNo
aWxkID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUubmV4dFNpYmxpbmcoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIG5ld0xpc3QuYXBwZW5kKGNy
ZWF0ZURpZ2VzdChjaGlsZCwgMCkpOwogCiAgICAgaWYgKCFpbm5lclBhdGNoQ2hpbGRyZW4ocGFy
ZW50Tm9kZSwgb2xkTGlzdCwgbmV3TGlzdCwgZWMpKSB7CiAgICAgICAgIC8vIEZhbGwgYmFjayB0
byB0b3RhbCByZXBsYWNlLgogICAgICAgICBlYyA9IDA7Ci0gICAgICAgIGlmICghbV9kb21FZGl0
b3ItPnJlcGxhY2VDaGlsZChwYXJlbnROb2RlLCBmcmFnbWVudC5yZWxlYXNlKCksIG5vZGUsIGVj
KSkKKyAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKHBhcmVudE5vZGUsIGZy
YWdtZW50LnJlbGVhc2UoKSwgJm5vZGUsIGVjKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICByZXR1cm4gcHJldmlvdXNTaWJsaW5nID8gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2li
bGluZygpIDogcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5ET01QYXRjaFN1cHBvcnQoKTsKIAog
ICAgIHZvaWQgcGF0Y2hEb2N1bWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCk7Ci0gICAgTm9kZSog
cGF0Y2hOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIE5vZGUqIHBhdGNoTm9kZShOb2RlJiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlv
bkNvZGUmKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgRGlnZXN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAxNTY5
NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NjgsNyArNzY4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0T3V0ZXJIVE1MKEVycgogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Km91dGVySFRNTCA9IGNyZWF0ZU1hcmt1cChub2RlKTsKKyAgICAqb3V0ZXJIVE1MID0gY3JlYXRl
TWFya3VwKCpub2RlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1M
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRl
ckhUTUwpCkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0
ZXJIVE1MKEVycgogICAgIH0KIAogICAgIE5vZGUqIG5ld05vZGUgPSAwOwotICAgIGlmICghbV9k
b21FZGl0b3ItPnNldE91dGVySFRNTChub2RlLCBvdXRlckhUTUwsICZuZXdOb2RlLCBlcnJvclN0
cmluZykpCisgICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0T3V0ZXJIVE1MKCpub2RlLCBvdXRlckhU
TUwsICZuZXdOb2RlLCBlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
bmV3Tm9kZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5
V2ViQXJjaGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NDEs
NyArNDQyLDcgQEAgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcgogICAg
IH0KICAgICAgICAgCiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFy
a3VwU3RyaW5nID0gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1ZGVOb2RlLCAmbm9kZUxpc3QsIERv
Tm90UmVzb2x2ZVVSTHMsIHRhZ05hbWVzVG9GaWx0ZXIuZ2V0KCkpOworICAgIFN0cmluZyBtYXJr
dXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoKm5vZGUsIEluY2x1ZGVOb2RlLCAmbm9kZUxpc3QsIERv
Tm90UmVzb2x2ZVVSTHMsIHRhZ05hbWVzVG9GaWx0ZXIuZ2V0KCkpOwogICAgIE5vZGU6Ok5vZGVU
eXBlIG5vZGVUeXBlID0gbm9kZS0+bm9kZVR5cGUoKTsKICAgICBpZiAobm9kZVR5cGUgIT0gTm9k
ZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlVHlwZSAhPSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUp
CiAgICAgICAgIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhub2RlLT5kb2N1bWVu
dCgpKSArIG1hcmt1cFN0cmluZzsKQEAgLTQ3NiwyMiArNDc3LDIxIEBAIFBhc3NSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXIKIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4g
TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdl
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
Tm9kZSogc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAgICBpZiAo
IXN0YXJ0Q29udGFpbmVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHN0YXJ0Q29udGFpbmVyLT5k
b2N1bWVudCgpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBWZWN0b3I8Tm9kZSo+IG5v
ZGVMaXN0OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBGSVhNRTogVGhp
cyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUgcHJl
dmlvdXMgbWV0aG9kLgotICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJp
bmcoZG9jdW1lbnQpICsgY3JlYXRlTWFya3VwKHJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UpOworICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7CisgICAgU3RyaW5nIG1h
cmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhkb2N1bWVudCkgKyBjcmVhdGVNYXJrdXAo
KnJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOwogCiAgICAgcmV0dXJu
IGNyZWF0ZShtYXJrdXBTdHJpbmcsIGZyYW1lLCBub2RlTGlzdCwgMCk7CiB9CkBAIC01ODUsMTYg
KzU4NSwyMSBAQCBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyCiBQYXNz
UmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxl
Y3Rpb24oRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLmFwcGVuZChkb2N1bWVudFR5cGVTdHJpbmcoKmRvY3VtZW50KSk7CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFy
a3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKCpkb2N1bWVudCkgKyBjcmVhdGVNYXJrdXAo
c2VsZWN0aW9uUmFuZ2UuZ2V0KCksICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7
CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmIChzZWxlY3Rpb25SYW5nZSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoY3JlYXRlTWFya3VwKCpzZWxlY3Rpb25SYW5nZSwgJm5vZGVMaXN0LCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlKSk7CiAKKyAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gYnVpbGRl
ci50b1N0cmluZygpOwogICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gY3Jl
YXRlKG1hcmt1cFN0cmluZywgZnJhbWUsIG5vZGVMaXN0LCAwKTsKICAgICAKICAgICBpZiAoIWRv
Y3VtZW50LT5pc0ZyYW1lU2V0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw3
ICszNjAsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAKICAg
ICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwogICAgICAg
ICAgICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKmRv
Y3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCks
ICIiKSwgcmVwbGFjZU9wdGlvbnMpOworICAgICAgICAgICAgUmVmUHRyPFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kPiBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqZG9j
dW1lbnQsIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCks
ICIiKSwgcmVwbGFjZU9wdGlvbnMpOwogICAgICAgICAgICAgYXBwbHlDb21tYW5kKGNvbW1hbmQp
OwogICAgICAgICAgICAgZnJhbWVTZWxlY3Rpb24ucmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTggKzY0
LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNDaGFyc2V0U3Bl
Y2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3N0YXRpYyBib29sIGlzQ2hhcnNldFNwZWNpZnlpbmdO
b2RlKGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkp
CisgICAgaWYgKCFub2RlLmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUpOwotICAgIGlm
ICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKQorICAgIGNvbnN0IEhU
TUxFbGVtZW50JiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKKyAgICBpZiAoIWVsZW1l
bnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0g
ICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOwor
ICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAg
IGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gZWxlbWVudC5hdHRyaWJ1dGVBdChpKTsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGVhbCBhcHByb3ByaWF0ZWx5IHdpdGggdGhl
IGF0dHJpYnV0ZSBpZiB0aGV5IGhhdmUgYSBuYW1lc3BhY2UuCiAgICAgICAgICAgICBhdHRyaWJ1
dGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCksIGF0
dHJpYnV0ZS52YWx1ZSgpLnN0cmluZygpKSk7CiAgICAgICAgIH0KQEAgLTg0LDkgKzg0LDkgQEAg
c3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoTm9kZQogICAgIHJldHVybiB0ZXh0
RW5jb2RpbmcuaXNWYWxpZCgpOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVFbGVtZW50KGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzY3JpcHRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpub3Nj
cmlwdFRhZykgfHwgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoZWxlbWVudCk7CisgICAgcmV0dXJu
IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6bm9zY3JpcHRUYWcpIHx8IGlzQ2hhcnNldFNwZWNpZnlpbmdOb2Rl
KGVsZW1lbnQpOwogfQogCiBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZnJhbWVPd25lclVS
TEF0dHJpYnV0ZU5hbWUoY29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBmcmFtZU93bmVyKQpA
QCAtOTUsNjQgKzk1LDYzIEBAIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBmcmFtZU93bmVy
VVIKICAgICByZXR1cm4gaXNIVE1MT2JqZWN0RWxlbWVudChmcmFtZU93bmVyKSA/IEhUTUxOYW1l
czo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7CiB9CiAKLWNsYXNzIFNlcmlhbGl6ZXJN
YXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7Citj
bGFzcyBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3IgewogcHVibGljOgotICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVs
YXRvcihQYWdlU2VyaWFsaXplciosIERvY3VtZW50KiwgVmVjdG9yPE5vZGUqPiopOworICAgIFNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciYsIERvY3VtZW50JiwgVmVj
dG9yPE5vZGUqPiopOwogICAgIHZpcnR1YWwgflNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcigp
OwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRl
ciYgb3V0LCBUZXh0Kik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVp
bGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFj
ZXMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKLQogcHJpdmF0ZToK
LSAgICBQYWdlU2VyaWFsaXplciogbV9zZXJpYWxpemVyOwotICAgIERvY3VtZW50KiBtX2RvY3Vt
ZW50OworICAgIFBhZ2VTZXJpYWxpemVyJiBtX3NlcmlhbGl6ZXI7CisgICAgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgVGV4dCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25z
dCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRFbmRUYWcoY29uc3QgTm9kZSYpIG92ZXJyaWRlOwogfTsKIAotU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXIqIHNl
cmlhbGl6ZXIsIERvY3VtZW50KiBkb2N1bWVudCwgVmVjdG9yPE5vZGUqPiogbm9kZXMpCitTZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdl
U2VyaWFsaXplciYgc2VyaWFsaXplciwgRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+
KiBub2RlcykKICAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBSZXNvbHZlQWxsVVJMcykK
ICAgICAsIG1fc2VyaWFsaXplcihzZXJpYWxpemVyKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVu
dCkKIHsKICAgICAvLyBNYXJrdXBBY2N1bXVsYXRvciBkb2VzIG5vdCBzZXJpYWxpemUgdGhlIDw/
eG1sIC4uLiBsaW5lLCBzbyB3ZSBhZGQgaXQgZXhwbGljaXRlbHkgdG8gZW5zdXJlIHRoZSByaWdo
dCBlbmNvZGluZyBpcyBzcGVjaWZpZWQuCi0gICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1
bWVudCgpIHx8IG1fZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSB8fCBtX2RvY3VtZW50LT5pc1NW
R0RvY3VtZW50KCkpCi0gICAgICAgIGFwcGVuZFN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIgKyBt
X2RvY3VtZW50LT54bWxWZXJzaW9uKCkgKyAiXCIgZW5jb2Rpbmc9XCIiICsgbV9kb2N1bWVudC0+
Y2hhcnNldCgpICsgIlwiPz4iKTsKKyAgICBpZiAobV9kb2N1bWVudC5pc1hIVE1MRG9jdW1lbnQo
KSB8fCBtX2RvY3VtZW50LnhtbFN0YW5kYWxvbmUoKSB8fCBtX2RvY3VtZW50LmlzU1ZHRG9jdW1l
bnQoKSkKKyAgICAgICAgYXBwZW5kU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiIiArIG1fZG9jdW1l
bnQueG1sVmVyc2lvbigpICsgIlwiIGVuY29kaW5nPVwiIiArIG1fZG9jdW1lbnQuY2hhcnNldCgp
ICsgIlwiPz4iKTsKIH0KIAogU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yKCkKIHsKIH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQordm9pZCBT
ZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0
LCBjb25zdCBUZXh0JiB0ZXh0KQogewotICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBhcmVu
dEVsZW1lbnQoKTsKLSAgICBpZiAocGFyZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBhcmVu
dCkpCisgICAgRWxlbWVudCogcGFyZW50ID0gdGV4dC5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYg
KHBhcmVudCAmJiAhc2hvdWxkSWdub3JlRWxlbWVudCgqcGFyZW50KSkKICAgICAgICAgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFRleHQob3V0LCB0ZXh0KTsKIH0KIAotdm9pZCBTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBTZXJpYWxpemVyTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBF
bGVtZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmICghc2hv
dWxkSWdub3JlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIAotICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpIHsKKyAgICBpZiAoZWxlbWVudC5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpIHsKICAgICAgICAgb3V0LmFwcGVuZCgiPG1ldGEg
Y2hhcnNldD1cIiIpOwotICAgICAgICBvdXQuYXBwZW5kKG1fZG9jdW1lbnQtPmNoYXJzZXQoKSk7
CisgICAgICAgIG91dC5hcHBlbmQobV9kb2N1bWVudC5jaGFyc2V0KCkpOwogICAgICAgICBvdXQu
YXBwZW5kKCJcIj4iKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogRm9yIG9iamVjdCAocGx1Z2lu
cykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBv
ZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgogfQogCi12b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1l
bnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIFNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiBvdXQs
IGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7Ci0gICAg
aWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAgaWYgKCFlbGVtZW50Lmlz
RnJhbWVPd25lckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBmcmFtZU93bmVyID0gdG9GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KTsKLSAg
ICBGcmFtZSogZnJhbWUgPSBmcmFtZU93bmVyLT5jb250ZW50RnJhbWUoKTsKKyAgICBjb25zdCBI
VE1MRnJhbWVPd25lckVsZW1lbnQmIGZyYW1lT3duZXIgPSB0b0ZyYW1lT3duZXJFbGVtZW50KGVs
ZW1lbnQpOworICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXIuY29udGVudEZyYW1lKCk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNjEsMTMgKzE2MCwxMyBAQCB2
b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFdlIG5lZWQgdG8gZ2l2ZSBhIGZha2UgbG9jYXRpb24gdG8gYmxhbmsgZnJhbWVz
IHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHNlcmlhbGl6ZWQgZnJhbWUuCi0gICAg
dXJsID0gbV9zZXJpYWxpemVyLT51cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKLSAgICBhcHBlbmRB
dHRyaWJ1dGUob3V0LCBlbGVtZW50LCBBdHRyaWJ1dGUoZnJhbWVPd25lclVSTEF0dHJpYnV0ZU5h
bWUoKmZyYW1lT3duZXIpLCB1cmwuc3RyaW5nKCkpLCBuYW1lc3BhY2VzKTsKKyAgICB1cmwgPSBt
X3NlcmlhbGl6ZXIudXJsRm9yQmxhbmtGcmFtZShmcmFtZSk7CisgICAgYXBwZW5kQXR0cmlidXRl
KG91dCwgZWxlbWVudCwgQXR0cmlidXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGZyYW1l
T3duZXIpLCB1cmwuc3RyaW5nKCkpLCBuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQordm9pZCBTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhjb25zdCBOb2RlJiBub2RlKQogewot
ICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZElnbm9yZUVsZW1lbnQodG9F
bGVtZW50KG5vZGUpKSkKKyAgICBpZiAobm9kZS5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZEln
bm9yZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVuZFRhZyhub2RlKTsKIH0KIApAQCAtMjEwLDE0ICsyMDksMTQgQEAgdm9pZCBQYWdl
U2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbQogICAgIH0KIAogICAgIFZlY3RvcjxOb2Rl
Kj4gbm9kZXM7Ci0gICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKHRo
aXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciBh
Y2N1bXVsYXRvcigqdGhpcywgKmRvY3VtZW50LCAmbm9kZXMpOwogICAgIFRleHRFbmNvZGluZyB0
ZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNoYXJzZXQoKSk7CiAgICAgQ1N0cmluZyBkYXRhOwogICAg
IGlmICghdGV4dEVuY29kaW5nLmlzVmFsaWQoKSkgewogICAgICAgICAvLyBGSVhNRTogaWZyYW1l
cyB1c2VkIGFzIGltYWdlcyB0cmlnZ2VyIHRoaXMuIFdlIHNob3VsZCBkZWFsIHdpdGggdGhlbSBj
b3JyZWN0bHkuCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgU3RyaW5nIHRleHQgPSBhY2N1
bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIElu
Y2x1ZGVOb2RlKTsKKyAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVz
KCpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKICAgICBDU3Ry
aW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRl
eHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBtX3Jlc291cmNlcy0+
YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkpKTsK
ICAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
MzYxLDcgKzM2MSw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gZnJh
bWUtPmxvYWRlcigpLmRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbG9hZGVyLT5hZGRBbGxBcmNoaXZlUmVzb3VyY2VzKGNvcmVBcmNoaXZlLmdldCgpKTsKIAot
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cFN0cmluZy5nZXQoKSwgbWFpblJlc291cmNlLT51
cmwoKSwgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS0+ZG9jdW1lbnQoKSwg
bWFya3VwU3RyaW5nLmdldCgpLCBtYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGlu
Z0NvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGlmIChmcmFnbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEh0
dHBSZXF1ZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEzLDcgKzYxMyw3IEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6OnNlbmQoRG9jdW1lbnQqIGRvY3UKIAogICAgICAgICAvLyBGSVhNRTogQWNj
b3JkaW5nIHRvIFhNTEh0dHBSZXF1ZXN0IExldmVsIDIsIHRoaXMgc2hvdWxkIHVzZSB0aGUgRG9j
dW1lbnQuaW5uZXJIVE1MIGFsZ29yaXRobQogICAgICAgICAvLyBmcm9tIHRoZSBIVE1MNSBzcGVj
aWZpY2F0aW9uIHRvIHNlcmlhbGl6ZSB0aGUgZG9jdW1lbnQuCi0gICAgICAgIFN0cmluZyBib2R5
ID0gY3JlYXRlTWFya3VwKGRvY3VtZW50KTsKKyAgICAgICAgU3RyaW5nIGJvZHkgPSBjcmVhdGVN
YXJrdXAoKmRvY3VtZW50KTsKIAogICAgICAgICAvLyBGSVhNRTogdGhpcyBzaG91bGQgdXNlIHZh
bHVlIG9mIGRvY3VtZW50LmlucHV0RW5jb2RpbmcgdG8gZGV0ZXJtaW5lIHRoZSBlbmNvZGluZyB0
byB1c2UuCiAgICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9IFVURjhFbmNvZGluZygpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAkocmV2aXNpb24gMTU2OTc3KQor
KysgU291cmNlL1dlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw3IEBAIFN0cmluZyBYTUxTZXJpYWxpemVyOjpzZXJpYWxpemVUb1N0cmluZygK
ICAgICAgICAgZWMgPSBUeXBlRXJyb3I7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKICAgICB9
Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cChub2RlLCBJbmNsdWRlTm9kZSwgMCwgRG9Ob3RSZXNv
bHZlVVJMcywgMCwgWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKTsKKyAgICByZXR1cm4gY3JlYXRl
TWFya3VwKCpub2RlLCBJbmNsdWRlTm9kZSwgMCwgRG9Ob3RSZXNvbHZlVVJMcywgMCwgWE1MRnJh
Z21lbnRTZXJpYWxpemF0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291
cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYs
NyArMTE2LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gWFNMVFByb2Nlc3Nvcjo6dHJhbgogICAg
IFN0cmluZyByZXN1bHRNSU1FVHlwZTsKICAgICBTdHJpbmcgcmVzdWx0U3RyaW5nOwogICAgIFN0
cmluZyByZXN1bHRFbmNvZGluZzsKLSAgICBpZiAoIXRyYW5zZm9ybVRvU3RyaW5nKHNvdXJjZU5v
ZGUsIHJlc3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKKyAgICBp
ZiAoIXRyYW5zZm9ybVRvU3RyaW5nKCpzb3VyY2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVzdWx0
U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBj
cmVhdGVEb2N1bWVudEZyb21Tb3VyY2UocmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZywgcmVz
dWx0TUlNRVR5cGUsIHNvdXJjZU5vZGUsIDApOwogfQpAQCAtMTM0LDcgKzEzNCw3IEBAIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gWFNMVFByb2Nlc3MKICAgICBpZiAob3V0cHV0RG9jLT5p
c0hUTUxEb2N1bWVudCgpKQogICAgICAgICByZXN1bHRNSU1FVHlwZSA9ICJ0ZXh0L2h0bWwiOwog
Ci0gICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmluZyhzb3VyY2VOb2RlLCByZXN1bHRNSU1FVHlwZSwg
cmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCisgICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmlu
Zygqc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2Rp
bmcpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGb3JUcmFu
c2Zvcm1Ub0ZyYWdtZW50KHJlc3VsdFN0cmluZywgcmVzdWx0TUlNRVR5cGUsIG91dHB1dERvYyk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgJKHJldmlzaW9uIDE1Njk3NykK
KysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIH5YU0xUUHJvY2Vzc29yKCk7CiAKICAgICB2b2lk
IHNldFhTTFN0eWxlU2hlZXQoUGFzc1JlZlB0cjxYU0xTdHlsZVNoZWV0PiBzdHlsZVNoZWV0KSB7
IG1fc3R5bGVzaGVldCA9IHN0eWxlU2hlZXQ7IH0KLSAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5n
KE5vZGUqIHNvdXJjZSwgU3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJp
bmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpOworICAgIGJvb2wgdHJhbnNmb3JtVG9TdHJpbmco
Tm9kZSYgc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmlu
ZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7CiAgICAgUGFzc1JlZlB0cjxEb2N1bWVudD4gY3Jl
YXRlRG9jdW1lbnRGcm9tU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlLCBjb25zdCBTdHJpbmcm
IHNvdXJjZUVuY29kaW5nLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBOb2RlKiBzb3Vy
Y2VOb2RlLCBGcmFtZSogZnJhbWUpOwogICAgIAogICAgIC8vIERPTSBtZXRob2RzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHJldmlzaW9uIDE1
Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNsdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI1Niw3ICsyNTYsNyBAQCBzdGF0aWMgeHNsdFN0eWxlc2hlZXRQdHIg
eHNsdFN0eWxlc2hlZXRQCiAKICAgICAgICAgLy8gQWNjb3JkaW5nIHRvIE1vemlsbGEgZG9jdW1l
bnRhdGlvbiwgdGhlIG5vZGUgbXVzdCBiZSBhIERvY3VtZW50IG5vZGUsIGFuIHhzbDpzdHlsZXNo
ZWV0IG9yIHhzbDp0cmFuc2Zvcm0gZWxlbWVudC4KICAgICAgICAgLy8gQnV0IHdlIGp1c3QgdXNl
IHRleHQgY29udGVudCByZWdhcmRsZXNzIG9mIG5vZGUgdHlwZS4KLSAgICAgICAgY2FjaGVkU3R5
bGVzaGVldC0+cGFyc2VTdHJpbmcoY3JlYXRlTWFya3VwKHN0eWxlc2hlZXRSb290Tm9kZSkpOwor
ICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5wYXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoKnN0eWxl
c2hlZXRSb290Tm9kZSkpOwogICAgIH0KIAogICAgIGlmICghY2FjaGVkU3R5bGVzaGVldCB8fCAh
Y2FjaGVkU3R5bGVzaGVldC0+ZG9jdW1lbnQoKSkKQEAgLTI2NSwxMCArMjY1LDEwIEBAIHN0YXRp
YyB4c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFAKICAgICByZXR1cm4gY2FjaGVkU3R5
bGVzaGVldC0+Y29tcGlsZVN0eWxlU2hlZXQoKTsKIH0KIAotc3RhdGljIGlubGluZSB4bWxEb2NQ
dHIgeG1sRG9jUHRyRnJvbU5vZGUoTm9kZSogc291cmNlTm9kZSwgYm9vbCYgc2hvdWxkRGVsZXRl
KQorc3RhdGljIGlubGluZSB4bWxEb2NQdHIgeG1sRG9jUHRyRnJvbU5vZGUoTm9kZSYgc291cmNl
Tm9kZSwgYm9vbCYgc2hvdWxkRGVsZXRlKQogewotICAgIFJlZjxEb2N1bWVudD4gb3duZXJEb2N1
bWVudChzb3VyY2VOb2RlLT5kb2N1bWVudCgpKTsKLSAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQg
PSAoc291cmNlTm9kZSA9PSAmb3duZXJEb2N1bWVudC5nZXQoKSk7CisgICAgUmVmPERvY3VtZW50
PiBvd25lckRvY3VtZW50KHNvdXJjZU5vZGUuZG9jdW1lbnQoKSk7CisgICAgYm9vbCBzb3VyY2VJ
c0RvY3VtZW50ID0gKCZzb3VyY2VOb2RlID09ICZvd25lckRvY3VtZW50LmdldCgpKTsKIAogICAg
IHhtbERvY1B0ciBzb3VyY2VEb2MgPSAwOwogICAgIGlmIChzb3VyY2VJc0RvY3VtZW50ICYmIG93
bmVyRG9jdW1lbnQtPnRyYW5zZm9ybVNvdXJjZSgpKQpAQCAtMzAwLDkgKzMwMCw5IEBAIHN0YXRp
YyBpbmxpbmUgU3RyaW5nIHJlc3VsdE1JTUVUeXBlKHhtbEQKICAgICByZXR1cm4gImFwcGxpY2F0
aW9uL3htbCI7CiB9CiAKLWJvb2wgWFNMVFByb2Nlc3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9k
ZSogc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0
cmluZyYgcmVzdWx0RW5jb2RpbmcpCitib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3Ry
aW5nKE5vZGUmIHNvdXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmluZyYgcmVzdWx0U3Ry
aW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKQogewotICAgIFJlZjxEb2N1bWVudD4gb3duZXJE
b2N1bWVudChzb3VyY2VOb2RlLT5kb2N1bWVudCgpKTsKKyAgICBSZWY8RG9jdW1lbnQ+IG93bmVy
RG9jdW1lbnQoc291cmNlTm9kZS5kb2N1bWVudCgpKTsKIAogICAgIHNldFhTTFRMb2FkQ2FsbEJh
Y2soZG9jTG9hZGVyRnVuYywgdGhpcywgb3duZXJEb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2Fk
ZXIoKSk7CiAgICAgeHNsdFN0eWxlc2hlZXRQdHIgc2hlZXQgPSB4c2x0U3R5bGVzaGVldFBvaW50
ZXIobV9zdHlsZXNoZWV0LCBtX3N0eWxlc2hlZXRSb290Tm9kZS5nZXQoKSk7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxNTY5ODMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0xMC0wNSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgorCisgICAgICAgIENUVEU6IFRocmVhZCByZWZlcmVuY2VzIHRo
cm91Z2ggbWFya3VwLmgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyMjQwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogRE9NL1dlYkRPTU9wZXJhdGlvbnMubW06CisgICAgICAgICgtW0RPTU5vZGUgbWFy
a3VwU3RyaW5nXSk6CisgICAgICAgICgtW0RPTVJhbmdlIG1hcmt1cFN0cmluZ10pOgorICAgICAg
ICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZy
YWdtZW50V2l0aE1hcmt1cFN0cmluZzpiYXNlVVJMU3RyaW5nOl0pOgorICAgICAgICAoLVtXZWJG
cmFtZSBfZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczpdKToKKwogMjAxMy0x
MC0wNSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIENUVEU6IFBhc3Mg
RG9jdW1lbnRXcml0ZXIgYXJvdW5kIGFzIGEgcmVmZXJlbmNlCkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNl
L1dlYktpdC9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEy
Miw3ICsxMjIsNyBAQCAtIChXZWJBcmNoaXZlICopd2ViQXJjaGl2ZUJ5RmlsdGVyaW5nU3ViCiAK
IC0gKE5TU3RyaW5nICopbWFya3VwU3RyaW5nCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZ1bGxNYXJr
dXAoY29yZShzZWxmKSk7CisgICAgcmV0dXJuIGNyZWF0ZUZ1bGxNYXJrdXAoKmNvcmUoc2VsZikp
OwogfQogCiAtIChOU1JlY3QpX3JlbmRlclJlY3Q6KGJvb2wgKilpc1JlcGxhY2VkCkBAIC0xNzIs
NyArMTcyLDcgQEAgLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKIAogLSAoTlNTdHJpbmcgKilt
YXJrdXBTdHJpbmcKIHsKLSAgICByZXR1cm4gY3JlYXRlRnVsbE1hcmt1cChjb3JlKHNlbGYpKTsK
KyAgICByZXR1cm4gY3JlYXRlRnVsbE1hcmt1cCgqY29yZShzZWxmKSk7CiB9CiAKIEBlbmQKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTU2OTc4KQor
KysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5KQpA
QCAtNzIxLDI0ICs3MjEsNDIgQEAgLSAoRE9NUmFuZ2UgKilfc21hcnREZWxldGVSYW5nZUZvclBy
b3BvcwogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFy
a3VwU3RyaW5nOihOU1N0cmluZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMU3RyaW5nOihOU1N0cmlu
ZyAqKWJhc2VVUkxTdHJpbmcgCiB7Ci0gICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8ICFf
cHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgIEZyYW1lKiBmcmFtZSA9IF9wcml2
YXRlLT5jb3JlRnJhbWU7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwor
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIGlmICghZG9j
dW1lbnQpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cChfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJp
bmcsIGJhc2VVUkxTdHJpbmcsIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCkuZ2V0KCkpOworICAg
IHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpkb2N1bWVudCwgbWFya3VwU3Ry
aW5nLCBiYXNlVVJMU3RyaW5nLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpLmdldCgpKTsKIH0K
IAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQ
YXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXMKIHsKLSAgICBpZiAoIV9wcml2YXRlLT5jb3JlRnJh
bWUgfHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAgRnJhbWUqIGZyYW1l
ID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4g
bmlsOwotICAgIAorCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7
CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKwogICAgIE5TRW51bWVy
YXRvciAqbm9kZUVudW0gPSBbbm9kZXMgb2JqZWN0RW51bWVyYXRvcl07CiAgICAgVmVjdG9yPE5v
ZGUqPiBub2Rlc1ZlY3RvcjsKICAgICBET01Ob2RlICpub2RlOwogICAgIHdoaWxlICgobm9kZSA9
IFtub2RlRW51bSBuZXh0T2JqZWN0XSkpCiAgICAgICAgIG5vZGVzVmVjdG9yLmFwcGVuZChjb3Jl
KG5vZGUpKTsKLSAgICAKLSAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKF9w
cml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCksIG5vZGVzVmVjdG9yKS5nZXQoKSk7CisKKyAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRG9j
dW1lbnRGcmFnbWVudCgpOworCisgICAgZm9yIChhdXRvIG5vZGUgOiBub2Rlc1ZlY3Rvcikgewor
ICAgICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhF
bGVtZW50KCpkb2N1bWVudCk7CisgICAgICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKG5vZGUsIEFT
U0VSVF9OT19FWENFUFRJT04pOworICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoZWxlbWVu
dC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIH0KKworICAgIHJldHVybiBr
aXQoZnJhZ21lbnQucmVsZWFzZSgpLmdldCgpKTsKIH0KIAogLSAodm9pZClfcmVwbGFjZVNlbGVj
dGlvbldpdGhOb2RlOihET01Ob2RlICopbm9kZSBzZWxlY3RSZXBsYWNlbWVudDooQk9PTClzZWxl
Y3RSZXBsYWNlbWVudCBzbWFydFJlcGxhY2U6KEJPT0wpc21hcnRSZXBsYWNlIG1hdGNoU3R5bGU6
KEJPT0wpbWF0Y2hTdHlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213495</attachid>
            <date>2013-10-05 22:33:57 -0700</date>
            <delta_ts>2013-10-06 00:35:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122403-20131005223355.patch</filename>
            <type>text/plain</type>
            <size>104005</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTA1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVGhyZWFkIHJlZmVyZW5jZXMg
dGhyb3VnaCBtYXJrdXAuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNDAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSGlnaGxpZ2h0czoKKyAgICAgICAgLSBSZW1vdmVkIGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cFdpdGhDb250ZXh0KCksIGl0IHdhcyB1bnVzZWQuCisgICAgICAgIC0gTW92ZWQgY3Jl
YXRlRnJhZ21lbnRGcm9tTm9kZXMoKSBpbnRvIGl0cyBvbmUgY2FsbGVyIChpbiBXZWJLaXQvbWFj
KQorICAgICAgICAtIEFkZCBhIGJ1bmNoIG1vcmUgdG9Gb28oKSBvdmVybG9hZHMuCisKIDIwMTMt
MTAtMDUgIEFuZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEZyYW1l
U2VsZWN0aW9uOiBSZW1vdmUgdHdvIHVudXNlZCBtZW1iZXIgZnVuY3Rpb25zLgpJbmRleDogU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0yMzIsNyArMjMyLDYgQEAgX19aTjdXZWJDb3Jl
MTJUZXh0SXRlcmF0b3JDMUVQS05TXzVSYW5nZQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3JE
MUV2CiBfX1pON1dlYkNvcmUxMlVURjhFbmNvZGluZ0V2CiBfX1pON1dlYkNvcmUxMmNhY2hlU3Rv
cmFnZUV2Ci1fX1pON1dlYkNvcmUxMmNyZWF0ZU1hcmt1cEVQS05TXzVSYW5nZUVQTjNXVEY2VmVj
dG9ySVBOU180Tm9kZUVMbTBFTlMzXzE1Q3Jhc2hPbk92ZXJmbG93RUVFTlNfMjNFQW5ub3RhdGVG
b3JJbnRlcmNoYW5nZUViTlNfMTNFQWJzb2x1dGVVUkxzRQogX19aTjdXZWJDb3JlMTJkZWxldGVD
b29raWVFUktOU18yMU5ldHdvcmtTdG9yYWdlU2Vzc2lvbkVSS05TXzNVUkxFUktOM1dURjZTdHJp
bmdFCiBfX1pON1dlYkNvcmUxMmdjQ29udHJvbGxlckV2CiBfX1pON1dlYkNvcmUxMmljb25EYXRh
YmFzZUV2CkBAIC01ODEsOCArNTgwLDggQEAgX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9u
MjJleHBhbmRVcwogX19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUEtOU181UmFuZ2VF
TlNfOUVBZmZpbml0eUViCiBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1
VmlzaWJsZVBvc2l0aW9uRVMzX2IKIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVJL
TlNfMTVWaXNpYmxlUG9zaXRpb25FYgotX19aTjdXZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBL
TlNfNE5vZGVFCi1fX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUEtOU181UmFuZ2VFCitf
X1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBFUktOU180Tm9kZUUKK19fWk43V2ViQ29yZTE2
Y3JlYXRlRnVsbE1hcmt1cEVSS05TXzVSYW5nZUUKIF9fWk43V2ViQ29yZTE2ZGVsZXRlQWxsQ29v
a2llc0VSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRQogX19aTjdXZWJDb3JlMTZlbmNsb3Np
bmdJbnRSZWN0RVJLNkNHUmVjdAogX19aTjdXZWJDb3JlMTZlbmNsb3NpbmdJbnRSZWN0RVJLTlNf
OUZsb2F0UmVjdEUKQEAgLTc2NSw3ICs3NjQsNiBAQCBfX1pON1dlYkNvcmUyM0F1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlQzFFCiBfX1pON1dlYkNvcmUyM011dGFibGVTdHlsZVByb3BlcnR5U2V0MjVl
bnN1cmVDU1NTdHlsZURlY2xhcmF0aW9uRXYKIF9fWk43V2ViQ29yZTIzTXV0YWJsZVN0eWxlUHJv
cGVydHlTZXREMUV2CiBfX1pON1dlYkNvcmUyM1N5bmNocm9ub3VzTG9hZGVyQ2xpZW50MjRwbGF0
Zm9ybUJhZFJlc3BvbnNlRXJyb3JFdgotX19aTjdXZWJDb3JlMjNjcmVhdGVGcmFnbWVudEZyb21O
b2Rlc0VQTlNfOERvY3VtZW50RVJLTjNXVEY2VmVjdG9ySVBOU180Tm9kZUVMbTBFTlMyXzE1Q3Jh
c2hPbk92ZXJmbG93RUVFCiBfX1pON1dlYkNvcmUyM2RhdGFGb3JVUkxDb21wb25lbnRUeXBlRVA1
TlNVUkxsCiBfX1pON1dlYkNvcmUyM2RlY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4
X05TUmFuZ2UKIF9fWk43V2ViQ29yZTIzZW5jb2RlSG9zdE5hbWVXaXRoUmFuZ2VFUDhOU1N0cmlu
ZzhfTlNSYW5nZQpAQCAtNzgxLDcgKzc3OSw3IEBAIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVj
dGlvbk9ic2VydmVyMTQKIF9fWk43V2ViQ29yZTI0RnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyMTR3
aWxsRGV0YWNoUGFnZUV2CiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckMy
RVBOU181RnJhbWVFCiBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyRXYK
LV9fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBOU184RG9jdW1lbnRFUktO
M1dURjZTdHJpbmdFUzVfTlNfMTlQYXJzZXJDb250ZW50UG9saWN5RQorX19aTjdXZWJDb3JlMjRj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXBFUk5TXzhEb2N1bWVudEVSS04zV1RGNlN0cmluZ0VTNV9O
U18xOVBhcnNlckNvbnRlbnRQb2xpY3lFCiBfX1pON1dlYkNvcmUyNGRlY29kZVVSTEVzY2FwZVNl
cXVlbmNlc0VSS04zV1RGNlN0cmluZ0UKIF9fWk43V2ViQ29yZTI0ZGVsZXRlQ29va2llc0Zvckhv
c3RuYW1lRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOM1dURjZTdHJpbmdFCiBfX1pO
N1dlYkNvcmUyNGZpbGVTeXN0ZW1SZXByZXNlbnRhdGlvbkVSS04zV1RGNlN0cmluZ0UKQEAgLTgx
MSw2ICs4MDksNyBAQCBfX1pON1dlYkNvcmUyOERvY3VtZW50U3R5bGVTaGVldENvbGxlY3RpCiBf
X1pON1dlYkNvcmUyOGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdF
CiBfX1pON1dlYkNvcmUyOHJlbW92ZUxhbmd1YWdlQ2hhbmdlT2JzZXJ2ZXJFUHYKIF9fWk43V2Vi
Q29yZTI5Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWVFUktOU18yMU5ldHdvcmtTdG9yYWdl
U2Vzc2lvbkVSS05TXzNVUkxFUzVfCitfX1pON1dlYkNvcmUyOWNyZWF0ZURlZmF1bHRQYXJhZ3Jh
cGhFbGVtZW50RVJOU184RG9jdW1lbnRFCiBfX1pON1dlYkNvcmUyOWlzQ2hhcmFjdGVyU21hcnRS
ZXBsYWNlRXhlbXB0RWliCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNEZWNvZGluZ1dpdGhS
YW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dlYkNvcmUzMGhvc3ROYW1lTmVlZHNFbmNv
ZGluZ1dpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTY5Nzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdv
cmtpbmcgY29weSkKQEAgLTc5Niw3ICs3OTYsNyBAQAogCQkxQzExQ0NDODBBQTYwOTM3MDBEQURC
MjAgLyogRE9NSFRNTEVsZW1lbnQuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg1REYyRUVCMEFBMzg3Q0IwMEFENjRDNSAvKiBE
T01IVE1MRWxlbWVudC5oICovOyB9OwogCQkxQzI2NDk3QTBEN0UyNDhBMDBCRDEwRjIgLyogRG9j
dW1lbnRMb2FkZXJNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUMyNjQ5NzkwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNw
cCAqLzsgfTsKIAkJMUMyNjQ5N0MwRDdFMjRFQzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMyNjQ5N0IwRDdFMjRF
QzAwQkQxMEYyIC8qIFBhZ2VNYWMuY3BwICovOyB9OwotCQkxQzRDOEYwMjBBRDg1RDg3MDA5NDc1
Q0UgLyogRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGMDAwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERlbGV0ZUJ1
dHRvbkNvbnRyb2xsZXIuaCAqLzsgfTsKKwkJMUM0QzhGMDIwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERl
bGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFDNEM4RjAwMEFEODVEODcwMDk0NzVDRSAvKiBEZWxldGVCdXR0b25Db250
cm9sbGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMUM0QzhGNjYwQUQ4NjU1RDAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM0QzhGNjQwQUQ4NjU1RDAwOTQ3
NUNFIC8qIERlbGV0ZUJ1dHRvbi5oICovOyB9OwogCQkxQzVGQUVEMTBEQ0ZEOTAxMDBENThGNzgg
LyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNUZBRUNGMERDRkQ5MDEwMEQ1OEY3OCAvKiBKU0phdmFTY3Jp
cHRDYWxsRnJhbWUuY3BwICovOyB9OwogCQkxQzVGQUVEMjBEQ0ZEOTAxMDBENThGNzggLyogSlNK
YXZhU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzVGQUVEMDBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZy
YW1lLmggKi87IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhUTUwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1t
CShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUhU
TUwubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAKIAogLSAoRE9NRG9jdW1lbnRG
cmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOihOU1N0cmlu
ZyAqKW1hcmt1cFN0cmluZyBiYXNlVVJMOihOU1VSTCAqKWJhc2VVUkwKIHsKLSAgICByZXR1cm4g
a2l0KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFti
YXNlVVJMIGFic29sdXRlU3RyaW5nXSkuZ2V0KCkpOworICAgIHJldHVybiBraXQoY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKCpjb3JlKHNlbGYpLCBtYXJrdXBTdHJpbmcsIFtiYXNlVVJMIGFic29s
dXRlU3RyaW5nXSkuZ2V0KCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopY3JlYXRl
RG9jdW1lbnRGcmFnbWVudFdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9DREFUQVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ0RBVEFTZWN0aW9uLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9DREFUQVNlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMzMgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8VGV4dD4gdmlydHVhbENyZWF0ZShjb25zdCBTdHJp
bmcmKTsKIH07CiAKK2lubGluZSBDREFUQVNlY3Rpb24mIHRvQ0RBVEFTZWN0aW9uKE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENEQVRBU2VjdGlvbiY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9uJiB0
b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpDREFUQV9TRUNUSU9OX05P
REUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24mPihub2RlKTsK
K30KKworaW5saW5lIENEQVRBU2VjdGlvbiogdG9DREFUQVNlY3Rpb24oTm9kZSogbm9kZSkKK3sK
KyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2Rl
VHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENEQVRBU2VjdGlvbio+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgQ0RBVEFTZWN0aW9u
KiB0b0NEQVRBU2VjdGlvbihjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RB
VEFfU0VDVElPTl9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ0RBVEFTZWN0
aW9uKj4obm9kZSk7Cit9CisKK3ZvaWQgdG9DREFUQVNlY3Rpb24oY29uc3QgQ0RBVEFTZWN0aW9u
Jik7Cit2b2lkIHRvQ0RBVEFTZWN0aW9uKGNvbnN0IENEQVRBU2VjdGlvbiopOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDREFUQVNlY3Rpb25faApJbmRleDogU291cmNl
L1dlYkNvcmUvZG9tL0NvbW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
Q29tbWVudC5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29tbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwzMyBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdDsKIH07CiAKK2lubGluZSBD
b21tZW50JiB0b0NvbW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
Q29tbWVudCYgdG9Db21tZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9E
RSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQmPihub2RlKTsKK30KKwor
aW5saW5lIENvbW1lbnQqIHRvQ29tbWVudChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
Q09NTUVOVF9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q29tbWVudCo+KG5vZGUpOwor
fQorCitpbmxpbmUgY29uc3QgQ29tbWVudCogdG9Db21tZW50KGNvbnN0IE5vZGUqIG5vZGUpCit7
CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+bm9k
ZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBDb21tZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQm
KTsKK3ZvaWQgdG9Db21tZW50KGNvbnN0IENvbW1lbnQqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gQ29tbWVudF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHJldmlzaW9uIDE1Njk4MCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyNjcsNyArNDI2Nyw3IEBAIHZvaWQgRG9jdW1lbnQ6OmFwcGx5WFNM
VHJhbnNmb3JtKFByb2Nlc3MKICAgICBTdHJpbmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5n
IG5ld1NvdXJjZTsKICAgICBTdHJpbmcgcmVzdWx0RW5jb2Rpbmc7Ci0gICAgaWYgKCFwcm9jZXNz
b3ItPnRyYW5zZm9ybVRvU3RyaW5nKHRoaXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJl
c3VsdEVuY29kaW5nKSkKKyAgICBpZiAoIXByb2Nlc3Nvci0+dHJhbnNmb3JtVG9TdHJpbmcoKnRo
aXMsIHJlc3VsdE1JTUVUeXBlLCBuZXdTb3VyY2UsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAg
cmV0dXJuOwogICAgIC8vIEZJWE1FOiBJZiB0aGUgdHJhbnNmb3JtIGZhaWxlZCB3ZSBzaG91bGQg
cHJvYmFibHkgcmVwb3J0IGFuIGVycm9yIChsaWtlIE1vemlsbGEgZG9lcykuCiAgICAgRnJhbWUq
IG93bmVyRnJhbWUgPSBmcmFtZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNjE5LDggKzE2MTksMjEgQEAgaW5saW5lIGNvbnN0IERvY3VtZW50KiB0b0RvY3VtZW50
KGNvbnN0IAogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCo+KG5vZGUpOwog
fQogCitpbmxpbmUgRG9jdW1lbnQmIHRvRG9jdW1lbnQoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxEb2N1bWVudCY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
RG9jdW1lbnQmIHRvRG9jdW1lbnQoY29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLmlzRG9jdW1lbnROb2RlKCkpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudCY+KG5vZGUpOworfQorCiAvLyBUaGlzIHdpbGwg
Y2F0Y2ggYW55b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCiB2b2lkIHRvRG9jdW1lbnQo
Y29uc3QgRG9jdW1lbnQqKTsKK3ZvaWQgdG9Eb2N1bWVudChjb25zdCBEb2N1bWVudCYpOwogCiAv
LyBQdXQgdGhlc2UgbWV0aG9kcyBoZXJlLCBiZWNhdXNlIHRoZXkgcmVxdWlyZSB0aGUgRG9jdW1l
bnQgZGVmaW5pdGlvbiwgYnV0IHdlIHJlYWxseSB3YW50IHRvIGlubGluZSB0aGVtLgogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50VHlwZS5oCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDMz
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fc3Vic2V0OwogfTsKIAoraW5saW5lIERvY3VtZW50
VHlwZSYgdG9Eb2N1bWVudFR5cGUoTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9O
T0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlJj4obm9kZSk7Cit9CisK
K2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUmIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUmIG5v
ZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlw
ZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IERvY3VtZW50VHlwZSY+KG5vZGUpOworfQorCitpbmxpbmUgRG9jdW1lbnRUeXBlKiB0
b0RvY3VtZW50VHlwZShOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6RE9DVU1FTlRfVFlQ
RV9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4obm9kZSk7Cit9
CisKK2lubGluZSBjb25zdCBEb2N1bWVudFR5cGUqIHRvRG9jdW1lbnRUeXBlKGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpOworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudFR5cGUqPihub2RlKTsKK30KKwordm9pZCB0b0Rv
Y3VtZW50VHlwZShjb25zdCBEb2N1bWVudFR5cGUmKTsKK3ZvaWQgdG9Eb2N1bWVudFR5cGUoY29u
c3QgRG9jdW1lbnRUeXBlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCShyZXZpc2lv
biAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkxLDEyICs5MSwzMyBAQCBwcml2YXRlOgogI2VuZGlmCiB9Owog
CitpbmxpbmUgUHJvY2Vzc2luZ0luc3RydWN0aW9uJiB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihO
b2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUu
bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREUpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24mPihub2RlKTsKK30KKworaW5s
aW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tihub2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsK
KyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uJj4obm9k
ZSk7Cit9CisKIGlubGluZSBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRvUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uKE5vZGUqIG5vZGUpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREUpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24q
Pihub2RlKTsKIH0KIAoraW5saW5lIGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiogdG9Qcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OlBS
T0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0
IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpOworfQorCit2b2lkIHRvUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiYpOwordm9pZCB0b1Byb2Nlc3Np
bmdJbnN0cnVjdGlvbihjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qKTsKKwogfSAvL25hbWVz
cGFjZQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkocmV2aXNpb24gMTU2OTc3KQor
KysgU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Myw3
ICsxMDgzLDcgQEAgU3RyaW5nIFJhbmdlOjp0b1N0cmluZyhFeGNlcHRpb25Db2RlJiBlYwogCiBT
dHJpbmcgUmFuZ2U6OnRvSFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCh0
aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogU3RyaW5nIFJhbmdl
Ojp0ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTQsNyArOTQsNyBAQCBQYXNzUmVmUHRyPE5vZGU+IFNoYWRvd1Jvb3Q6OmNsb25l
Tm9kZShiCiAKIFN0cmluZyBTaGFkb3dSb290Ojppbm5lckhUTUwoKSBjb25zdAogewotICAgIHJl
dHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAgICByZXR1cm4gY3JlYXRl
TWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiB2b2lkIFNoYWRvd1Jvb3Q6OnNldElu
bmVySFRNTChjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYgZWMpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9UZXh0LmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UZXh0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDEyIEBAIGlubGluZSBUZXh0JiB0b1RleHQoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dCY+KG5vZGUpOwogfQogCitpbmxp
bmUgY29uc3QgVGV4dCYgdG9UZXh0KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJ
VEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc1RleHROb2RlKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Jj4obm9kZSk7Cit9CisKIGlubGluZSBUZXh0KiB0b1RleHQo
Tm9kZSogbm9kZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9k
ZSB8fCBub2RlLT5pc1RleHROb2RlKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9D
b21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTk4LDcgKzExOTgsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFy
YWdyYXBoCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIC8vIFRo
aXMgdXNlZCB0byB1c2UgYSB0ZXJuYXJ5IGZvciBpbml0aWFsaXphdGlvbiwgYnV0IHRoYXQgY29u
ZnVzZWQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MsIHNlZSBidWcgMzc5MTIKICAgICBpZiAoc3RhcnRP
ZlBhcmFncmFwaFRvTW92ZSAhPSBlbmRPZlBhcmFncmFwaFRvTW92ZSkKLSAgICAgICAgZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoJmRvY3VtZW50KCksIGNyZWF0ZU1hcmt1cChy
YW5nZS5nZXQoKSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCB0cnVlKSwgIiIpOwor
ICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCgpLCBj
cmVhdGVNYXJrdXAoKnJhbmdlLCAwLCBEb05vdEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIHRydWUp
LCAiIik7CiAKICAgICAvLyBBIG5vbi1lbXB0eSBwYXJhZ3JhcGgncyBzdHlsZSBpcyBtb3ZlZCB3
aGVuIHdlIGNvcHkgYW5kIG1vdmUgaXQuICBXZSBkb24ndCBtb3ZlIAogICAgIC8vIGFueXRoaW5n
IGlmIHdlJ3JlIGdpdmVuIGFuIGVtcHR5IHBhcmFncmFwaCwgYnV0IGFuIGVtcHR5IHBhcmFncmFw
aCBjYW4gaGF2ZSBzdHlsZQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1h
bmQuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ckNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDEsNyArNTAxLDcgQEAgc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEhvcml6b250YWxSdWxlKAogCiBzdGF0aWMgYm9vbCBleGVjdXRlSW5z
ZXJ0SFRNTChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gZXhlY3V0ZUluc2VydEZyYWdtZW50KGZyYW1l
LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgdmFsdWUsICIiKSk7
CisgICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChmcmFtZSwgY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCB2YWx1ZSwgIiIpKTsKIH0KIAogc3RhdGljIGJv
b2wgZXhlY3V0ZUluc2VydEltYWdlKEZyYW1lJiBmcmFtZSwgRXZlbnQqLCBFZGl0b3JDb21tYW5k
U291cmNlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTMsMjUgKzExMywyNSBAQCBNYXJrdXBBY2N1bXVsYXRvcjo6fk1hcmt1cEFjY3VtdWxhdG9yKCkK
IHsKIH0KIAotU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2RlcyhOb2RlKiB0
YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSkK
K1N0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpCiB7CiAgICAg
cmV0dXJuIHNlcmlhbGl6ZU5vZGVzKHRhcmdldE5vZGUsIG5vZGVUb1NraXAsIGNoaWxkcmVuT25s
eSwgMCk7CiB9CiAKLVN0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9u
bHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCitTdHJpbmcgTWFya3Vw
QWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5vZGVU
b1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4q
IHRhZ05hbWVzVG9Ta2lwKQogewogICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXModGFy
Z2V0Tm9kZSwgbm9kZVRvU2tpcCwgY2hpbGRyZW5Pbmx5LCAwLCB0YWdOYW1lc1RvU2tpcCk7CiAg
ICAgcmV0dXJuIG1fbWFya3VwLnRvU3RyaW5nKCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OnNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogdGFyZ2V0Tm9kZSwgTm9kZSog
bm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHksIGNvbnN0IE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMsIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApCit2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKE5vZGUmIHRh
cmdldE5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBj
b25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05h
bWVzVG9Ta2lwKQogewotICAgIGlmICh0YXJnZXROb2RlID09IG5vZGVUb1NraXApCisgICAgaWYg
KCZ0YXJnZXROb2RlID09IG5vZGVUb1NraXApCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBp
ZiAodGFnTmFtZXNUb1NraXApIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YWdO
YW1lc1RvU2tpcC0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh0YXJnZXROb2RlLT5o
YXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCisgICAgICAgICAgICBpZiAodGFyZ2V0
Tm9kZS5oYXNUYWdOYW1lKHRhZ05hbWVzVG9Ta2lwLT5hdChpKSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ4LDI5ICsxNDgsMjkgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaQogICAgIGlmICghY2hpbGRyZW5Pbmx5KQog
ICAgICAgICBhcHBlbmRTdGFydFRhZyh0YXJnZXROb2RlLCAmbmFtZXNwYWNlSGFzaCk7CiAKLSAg
ICBpZiAoISh0YXJnZXROb2RlLT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVu
dENhbm5vdEhhdmVFbmRUYWcodGFyZ2V0Tm9kZSkpKSB7CisgICAgaWYgKCEodGFyZ2V0Tm9kZS5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcodGFy
Z2V0Tm9kZSkpKSB7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIE5vZGUq
IGN1cnJlbnQgPSB0YXJnZXROb2RlLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSA/IHRvSFRNTFRl
bXBsYXRlRWxlbWVudCh0YXJnZXROb2RlKS0+Y29udGVudCgpLT5maXJzdENoaWxkKCkgOiB0YXJn
ZXROb2RlLT5maXJzdENoaWxkKCk7CisgICAgICAgIE5vZGUqIGN1cnJlbnQgPSB0YXJnZXROb2Rl
Lmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpID8gdG9IVE1MVGVtcGxhdGVFbGVtZW50KHRhcmdldE5v
ZGUpLmNvbnRlbnQoKS0+Zmlyc3RDaGlsZCgpIDogdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAj
ZWxzZQotICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS0+Zmlyc3RDaGlsZCgpOwor
ICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS5maXJzdENoaWxkKCk7CiAjZW5kaWYK
ICAgICAgICAgZm9yICggOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxpbmco
KSkKLSAgICAgICAgICAgIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoY3VycmVudCwgbm9k
ZVRvU2tpcCwgSW5jbHVkZU5vZGUsICZuYW1lc3BhY2VIYXNoLCB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgICAgICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKCpjdXJyZW50LCBub2RlVG9T
a2lwLCBJbmNsdWRlTm9kZSwgJm5hbWVzcGFjZUhhc2gsIHRhZ05hbWVzVG9Ta2lwKTsKICAgICB9
CiAKICAgICBpZiAoIWNoaWxkcmVuT25seSkKICAgICAgICAgYXBwZW5kRW5kVGFnKHRhcmdldE5v
ZGUpOwogfQogCi1TdHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnJlc29sdmVVUkxJZk5lZWRlZChj
b25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKK1N0
cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6cmVzb2x2ZVVSTElmTmVlZGVkKGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKSBjb25zdAogewogICAgIHN3aXRjaCAo
bV9yZXNvbHZlVVJMc01ldGhvZCkgewogICAgIGNhc2UgUmVzb2x2ZUFsbFVSTHM6Ci0gICAgICAg
IHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybFN0cmluZykuc3RyaW5n
KCk7CisgICAgICAgIHJldHVybiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsU3Ry
aW5nKS5zdHJpbmcoKTsKIAogICAgIGNhc2UgUmVzb2x2ZU5vbkxvY2FsVVJMczoKLSAgICAgICAg
aWYgKCFlbGVtZW50LT5kb2N1bWVudCgpLnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAg
ICByZXR1cm4gZWxlbWVudC0+ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLnN0cmlu
ZygpOworICAgICAgICBpZiAoIWVsZW1lbnQuZG9jdW1lbnQoKS51cmwoKS5pc0xvY2FsRmlsZSgp
KQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxT
dHJpbmcpLnN0cmluZygpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRG9Ob3RSZXNvbHZl
VVJMczoKQEAgLTE4NCwxNCArMTg0LDE0IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0cmluZyhjb24KICAgICBtX21hcmt1cC5hcHBlbmQoc3RyaW5nKTsKIH0KIAotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoTm9kZSogbm9kZSwgTmFtZXNwYWNlcyogbmFt
ZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKGNvbnN0IE5v
ZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kU3RhcnRNYXJr
dXAobV9tYXJrdXAsIG5vZGUsIG5hbWVzcGFjZXMpOwogICAgIGlmIChtX25vZGVzKQotICAgICAg
ICBtX25vZGVzLT5hcHBlbmQobm9kZSk7CisgICAgICAgIG1fbm9kZXMtPmFwcGVuZChjb25zdF9j
YXN0PE5vZGUqPigmbm9kZSkpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRF
bmRUYWcoTm9kZSogbm9kZSkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhj
b25zdCBOb2RlJiBub2RlKQogewogICAgIGFwcGVuZEVuZE1hcmt1cChtX21hcmt1cCwgbm9kZSk7
CiB9CkBAIC0yMTUsMTMgKzIxNSwxMyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRB
dHRyaWJ1dGVWCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJp
YnV0ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBFbGVt
ZW50KiwgTmFtZXNwYWNlcyopCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopCiB7
CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZh
bHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
QXR0cmlidXRlJiBhdHRyaWJ1dGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90
ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIEFTU0VSVChlbGVt
ZW50LT5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKKyAgICBBU1NFUlQoZWxlbWVudC5pc1VS
TEF0dHJpYnV0ZShhdHRyaWJ1dGUpKTsKICAgICBjb25zdCBTdHJpbmcgcmVzb2x2ZWRVUkxTdHJp
bmcgPSByZXNvbHZlVVJMSWZOZWVkZWQoZWxlbWVudCwgYXR0cmlidXRlLnZhbHVlKCkpOwogICAg
IFVDaGFyIHF1b3RlQ2hhciA9ICciJzsKICAgICBTdHJpbmcgc3RyaXBwZWRVUkxTdHJpbmcgPSBy
ZXNvbHZlZFVSTFN0cmluZy5zdHJpcFdoaXRlU3BhY2UoKTsKQEAgLTI0NSwxNiArMjQ1LDE2IEBA
IHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1b3RlZFVSTEEKICAgICByZXN1bHQuYXBw
ZW5kKHF1b3RlQ2hhcik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVW
YWx1ZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdl
KiByYW5nZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kTm9kZVZhbHVlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kZSwg
Y29uc3QgUmFuZ2UqIHJhbmdlLCBFbnRpdHlNYXNrIGVudGl0eU1hc2spCiB7Ci0gICAgY29uc3Qg
U3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOworICAgIGNvbnN0IFN0cmluZyBzdHIgPSBu
b2RlLm5vZGVWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0ci5sZW5ndGgoKTsKICAg
ICB1bnNpZ25lZCBzdGFydCA9IDA7CiAKICAgICBpZiAocmFuZ2UpIHsKLSAgICAgICAgaWYgKG5v
ZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQorICAgICAgICBpZiAoJm5vZGUgPT0gcmFuZ2Ut
PmVuZENvbnRhaW5lcigpKQogICAgICAgICAgICAgbGVuZ3RoID0gcmFuZ2UtPmVuZE9mZnNldCgp
OwotICAgICAgICBpZiAobm9kZSA9PSByYW5nZS0+c3RhcnRDb250YWluZXIoKSkgeworICAgICAg
ICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpIHsKICAgICAgICAgICAgIHN0
YXJ0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgICAgICBsZW5ndGggLT0gc3RhcnQ7
CiAgICAgICAgIH0KQEAgLTI2MywxNSArMjYzLDE1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZE5vZGVWYWx1ZSgKICAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMo
cmVzdWx0LCBzdHIsIHN0YXJ0LCBsZW5ndGgsIGVudGl0eU1hc2spOwogfQogCi1ib29sIE1hcmt1
cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVs
ZW1lbnQpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50
KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gRG9uJ3QgYWRkIG5hbWVzcGFjZSBh
dHRyaWJ1dGUgaWYgaXQgaXMgYWxyZWFkeSBkZWZpbmVkIGZvciB0aGlzIGVsZW0uCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBwcmVmaXggPSBlbGVtZW50LT5wcmVmaXgoKTsKKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCA9IGVsZW1lbnQucHJlZml4KCk7CiAgICAgaWYgKHByZWZpeC5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAhZWxlbWVudC0+aGFzQXR0cmlidXRlKHhtbG5zQXRv
bSk7CisgICAgICAgIHJldHVybiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoeG1sbnNBdG9tKTsKIAog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB4bWxuc1dpdGhDb2xvbiwgKEFTQ0lJTGl0
ZXJhbCgieG1sbnM6IikpKTsKLSAgICByZXR1cm4gIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh4bWxu
c1dpdGhDb2xvbiArIHByZWZpeCk7CisgICAgcmV0dXJuICFlbGVtZW50Lmhhc0F0dHJpYnV0ZSh4
bWxuc1dpdGhDb2xvbiArIHByZWZpeCk7CiB9CiAKIGJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFt
ZXNwYWNlcyYgbmFtZXNwYWNlcykKQEAgLTMzMywyNCArMzMzLDI0IEBAIHZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZE5hbWVzcGFjZSgKICAgICB9CiB9CiAKLUVudGl0eU1hc2sgTWFya3Vw
QWNjdW11bGF0b3I6OmVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQpIGNvbnN0CitFbnRpdHlN
YXNrIE1hcmt1cEFjY3VtdWxhdG9yOjplbnRpdHlNYXNrRm9yVGV4dChjb25zdCBUZXh0JiB0ZXh0
KSBjb25zdAogewogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIHBhcmVudE5hbWUgPSAwOwotICAg
IGlmICh0ZXh0LT5wYXJlbnRFbGVtZW50KCkpCi0gICAgICAgIHBhcmVudE5hbWUgPSAmKHRleHQt
PnBhcmVudEVsZW1lbnQoKSktPnRhZ1FOYW1lKCk7CisgICAgaWYgKHRleHQucGFyZW50RWxlbWVu
dCgpKQorICAgICAgICBwYXJlbnROYW1lID0gJih0ZXh0LnBhcmVudEVsZW1lbnQoKSktPnRhZ1FO
YW1lKCk7CiAKICAgICBpZiAocGFyZW50TmFtZSAmJiAoKnBhcmVudE5hbWUgPT0gc2NyaXB0VGFn
IHx8ICpwYXJlbnROYW1lID09IHN0eWxlVGFnIHx8ICpwYXJlbnROYW1lID09IHhtcFRhZykpCiAg
ICAgICAgIHJldHVybiBFbnRpdHlNYXNrSW5DREFUQTsKIAotICAgIHJldHVybiB0ZXh0LT5kb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBFbnRpdHlNYXNrSW5IVE1MUENEQVRBIDogRW50aXR5
TWFza0luUENEQVRBOworICAgIHJldHVybiB0ZXh0LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSA/IEVudGl0eU1hc2tJbkhUTUxQQ0RBVEEgOiBFbnRpdHlNYXNrSW5QQ0RBVEE7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBU
ZXh0KiB0ZXh0KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChTdHJpbmdCdWls
ZGVyJiByZXN1bHQsIGNvbnN0IFRleHQmIHRleHQpCiB7CiAgICAgYXBwZW5kTm9kZVZhbHVlKHJl
c3VsdCwgdGV4dCwgbV9yYW5nZSwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOwogfQogCi12b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50KQorc3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdC
dWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgY29tbWVudCkKIHsKICAgICAvLyBGSVhNRTog
Q29tbWVudCBjb250ZW50IGlzIG5vdCBlc2NhcGVkLCBidXQgWE1MU2VyaWFsaXplciAoYW5kIHBv
c3NpYmx5IG90aGVyIGNhbGxlcnMpIHNob3VsZCByYWlzZSBhbiBleGNlcHRpb24gaWYgaXQgaW5j
bHVkZXMgIi0tPiIuCiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhLS0iKTsKQEAgLTM1OCwy
MSArMzU4LDIxIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQoU3QKICAg
ICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiLS0+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kWE1MRGVjbGFy
YXRpb24oU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQpCiB7
Ci0gICAgaWYgKCFkb2N1bWVudC0+aGFzWE1MRGVjbGFyYXRpb24oKSkKKyAgICBpZiAoIWRvY3Vt
ZW50Lmhhc1hNTERlY2xhcmF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCI8P3htbCB2ZXJzaW9uPVwiIik7Ci0gICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudC0+eG1sVmVyc2lvbigpKTsKLSAgICBjb25zdCBTdHJpbmcmIGVuY29kaW5nID0gZG9jdW1l
bnQtPnhtbEVuY29kaW5nKCk7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudC54bWxWZXJzaW9u
KCkpOworICAgIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcgPSBkb2N1bWVudC54bWxFbmNvZGluZygp
OwogICAgIGlmICghZW5jb2RpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmRM
aXRlcmFsKCJcIiBlbmNvZGluZz1cIiIpOwogICAgICAgICByZXN1bHQuYXBwZW5kKGVuY29kaW5n
KTsKICAgICB9Ci0gICAgaWYgKGRvY3VtZW50LT54bWxTdGFuZGFsb25lU3RhdHVzKCkgIT0gRG9j
dW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgeworICAgIGlmIChkb2N1bWVudC54bWxTdGFu
ZGFsb25lU3RhdHVzKCkgIT0gRG9jdW1lbnQ6OlN0YW5kYWxvbmVVbnNwZWNpZmllZCkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXCIgc3RhbmRhbG9uZT1cIiIpOwotICAgICAgICBp
ZiAoZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSkKKyAgICAgICAgaWYgKGRvY3VtZW50LnhtbFN0
YW5kYWxvbmUoKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJ5ZXMiKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5vIik7CkBAIC0z
ODEsMzIgKzM4MSwzMiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxEZWNsYXJh
CiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIlwiPz4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
RG9jdW1lbnRUeXBlKiBuKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRG9jdW1lbnRU
eXBlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlJiBkb2N1bWVudFR5
cGUpCiB7Ci0gICAgaWYgKG4tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgaWYgKGRvY3VtZW50VHlw
ZS5uYW1lKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5k
TGl0ZXJhbCgiPCFET0NUWVBFICIpOwotICAgIHJlc3VsdC5hcHBlbmQobi0+bmFtZSgpKTsKLSAg
ICBpZiAoIW4tPnB1YmxpY0lkKCkuaXNFbXB0eSgpKSB7CisgICAgcmVzdWx0LmFwcGVuZChkb2N1
bWVudFR5cGUubmFtZSgpKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZS5wdWJsaWNJZCgpLmlzRW1w
dHkoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFBVQkxJQyBcIiIpOwotICAg
ICAgICByZXN1bHQuYXBwZW5kKG4tPnB1YmxpY0lkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KGRvY3VtZW50VHlwZS5wdWJsaWNJZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwot
ICAgICAgICBpZiAoIW4tPnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmICghZG9j
dW1lbnRUeXBlLnN5c3RlbUlkKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcgJyk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7Ci0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChk
b2N1bWVudFR5cGUuc3lzdGVtSWQoKSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCciJyk7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFuLT5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewor
ICAgIH0gZWxzZSBpZiAoIWRvY3VtZW50VHlwZS5zeXN0ZW1JZCgpLmlzRW1wdHkoKSkgewogICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIFNZU1RFTSBcIiIpOwotICAgICAgICByZXN1bHQu
YXBwZW5kKG4tPnN5c3RlbUlkKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50VHlw
ZS5zeXN0ZW1JZCgpKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwogICAgIH0KLSAgICBp
ZiAoIW4tPmludGVybmFsU3Vic2V0KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFkb2N1bWVudFR5
cGUuaW50ZXJuYWxTdWJzZXQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgn
ICcpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCdbJyk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
bi0+aW50ZXJuYWxTdWJzZXQoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBl
LmludGVybmFsU3Vic2V0KCkpOwogICAgICAgICByZXN1bHQuYXBwZW5kKCddJyk7CiAgICAgfQog
ICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKQEAgLTQyNCwxNCArNDI0LDE0IEBAIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmcKICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9
CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYg
cmVzdWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBw
ZW5kT3BlblRhZyhyZXN1bHQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCi0gICAgaWYgKGVsZW1l
bnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50
LT5hdHRyaWJ1dGVDb3VudCgpOworICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgewor
ICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50LmF0dHJpYnV0ZUNvdW50KCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0gICAgICAgICAg
ICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVtZW50LCBlbGVtZW50LT5hdHRyaWJ1dGVBdChp
KSwgbmFtZXNwYWNlcyk7CisgICAgICAgICAgICBhcHBlbmRBdHRyaWJ1dGUocmVzdWx0LCBlbGVt
ZW50LCBlbGVtZW50LmF0dHJpYnV0ZUF0KGkpLCBuYW1lc3BhY2VzKTsKICAgICB9CiAKICAgICAv
LyBHaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMgdG8gYWRkIHRoZWlyIG93biBhdHRy
aWJ1dGVzLgpAQCAtNDQwLDI3ICs0NDAsMjcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudChTdAogICAgIGFwcGVuZENsb3NlVGFnKHJlc3VsdCwgZWxlbWVudCk7CiB9CiAK
LXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgcmVzdWx0
LmFwcGVuZCgnPCcpOwotICAgIGlmIChpblhNTEZyYWdtZW50U2VyaWFsaXphdGlvbigpICYmIG5h
bWVzcGFjZXMgJiYgZWxlbWVudC0+cHJlZml4KCkuaXNFbXB0eSgpKSB7CisgICAgaWYgKGluWE1M
RnJhZ21lbnRTZXJpYWxpemF0aW9uKCkgJiYgbmFtZXNwYWNlcyAmJiBlbGVtZW50LnByZWZpeCgp
LmlzRW1wdHkoKSkgewogICAgICAgICAvLyBBY2NvcmRpbmcgdG8gaHR0cDovL3d3dy53My5vcmcv
VFIvRE9NLUxldmVsLTMtQ29yZS9uYW1lc3BhY2VzLWFsZ29yaXRobXMuaHRtbCNub3JtYWxpemVE
b2N1bWVudEFsZ28gd2Ugbm93IHNob3VsZCBjcmVhdGUKICAgICAgICAgLy8gYSBkZWZhdWx0IG5h
bWVzcGFjZSBkZWNsYXJhdGlvbiB0byBtYWtlIHRoaXMgbmFtZXNwYWNlIHdlbGwtZm9ybWVkLiBI
b3dldmVyLCBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwtbmFtZXMxMS8jeG1sUmVzZXJ2ZWQgc3Rh
dGVzCiAgICAgICAgIC8vICJUaGUgcHJlZml4IHhtbCBNVVNUIE5PVCBiZSBkZWNsYXJlZCBhcyB0
aGUgZGVmYXVsdCBuYW1lc3BhY2UuIiwgc28gdXNlIHRoZSB4bWwgcHJlZml4IGV4cGxpY2l0bHku
Ci0gICAgICAgIGlmIChlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSA9PSBYTUxOYW1lczo6eG1sTmFt
ZXNwYWNlVVJJKSB7CisgICAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSgpID09IFhNTE5h
bWVzOjp4bWxOYW1lc3BhY2VVUkkpIHsKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoeG1sQXRv
bSk7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCc6Jyk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgcmVzdWx0LmFwcGVuZChlbGVtZW50LT5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwotICAg
IGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSB8fCAhZWxlbWVudC0+ZG9jdW1lbnQo
KS5pc0hUTUxEb2N1bWVudCgpKSAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVzcGFjZUVs
ZW1lbnQoZWxlbWVudCkpCi0gICAgICAgIGFwcGVuZE5hbWVzcGFjZShyZXN1bHQsIGVsZW1lbnQt
PnByZWZpeCgpLCBlbGVtZW50LT5uYW1lc3BhY2VVUkkoKSwgKm5hbWVzcGFjZXMsIGluWE1MRnJh
Z21lbnRTZXJpYWxpemF0aW9uKCkpOworICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudC5ub2RlTmFt
ZVByZXNlcnZpbmdDYXNlKCkpOworICAgIGlmICgoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24o
KSB8fCAhZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpICYmIG5hbWVzcGFjZXMg
JiYgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgYXBwZW5kTmFt
ZXNwYWNlKHJlc3VsdCwgZWxlbWVudC5wcmVmaXgoKSwgZWxlbWVudC5uYW1lc3BhY2VVUkkoKSwg
Km5hbWVzcGFjZXMsIGluWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKCkpOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIEVs
ZW1lbnQqIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDbG9zZVRhZyhT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYg
KHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgewotICAgICAgICBpZiAoZWxlbWVudC0+aXNIVE1M
RWxlbWVudCgpKQorICAgICAgICBpZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAg
ICAgICByZXN1bHQuYXBwZW5kKCcgJyk7IC8vIFhIVE1MIDEuMCA8LT4gSFRNTCBjb21wYXRpYmls
aXR5LgogICAgICAgICByZXN1bHQuYXBwZW5kKCcvJyk7CiAgICAgfQpAQCAtNDkyLDkgKzQ5Miw5
IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmdlbmVyYXRlVW5pcXVlUHIKICAgICB9IHdoaWxl
ICh0cnVlKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFN0
cmluZ0J1aWxkZXImIHJlc3VsdCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKIHsKLSAgICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOworICAgIGJvb2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LmRvY3VtZW50
KCkuaXNIVE1MRG9jdW1lbnQoKTsKIAogICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKIApAQCAtNTIw
LDcgKzUyMCw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZSgKIAog
ICAgIHJlc3VsdC5hcHBlbmQoJz0nKTsKIAotICAgIGlmIChlbGVtZW50LT5pc1VSTEF0dHJpYnV0
ZShhdHRyaWJ1dGUpKQorICAgIGlmIChlbGVtZW50LmlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkp
CiAgICAgICAgIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKHJlc3VsdCwgZWxlbWVudCwg
YXR0cmlidXRlKTsKICAgICBlbHNlIHsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwpAQCAt
NTQwLDE3ICs1NDAsMTcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ0RBVEFTZWN0
aQogICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJdXT4iKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBO
b2RlKiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlJiBu
b2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1lc3BhY2VzKQogICAg
ICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CiAKLSAgICBzd2l0Y2ggKG5vZGUt
Pm5vZGVUeXBlKCkpIHsKKyAgICBzd2l0Y2ggKG5vZGUubm9kZVR5cGUoKSkgewogICAgIGNhc2Ug
Tm9kZTo6VEVYVF9OT0RFOgotICAgICAgICBhcHBlbmRUZXh0KHJlc3VsdCwgdG9UZXh0KGNvbnN0
X2Nhc3Q8Tm9kZSo+KG5vZGUpKSk7CisgICAgICAgIGFwcGVuZFRleHQocmVzdWx0LCB0b1RleHQo
bm9kZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNPTU1FTlRfTk9ERToKLSAg
ICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IENvbW1lbnQqPihu
b2RlKS0+ZGF0YSgpKTsKKyAgICAgICAgYXBwZW5kQ29tbWVudChyZXN1bHQsIHRvQ29tbWVudChu
b2RlKS5kYXRhKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05P
REU6CiAgICAgICAgIGFwcGVuZFhNTERlY2xhcmF0aW9uKHJlc3VsdCwgdG9Eb2N1bWVudChub2Rl
KSk7CkBAIC01NTgsMTYgKzU1OCwxNiBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dGFydE1hcmt1CiAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERToKLSAgICAgICAgYXBw
ZW5kRG9jdW1lbnRUeXBlKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnRUeXBlKj4o
bm9kZSkpOworICAgICAgICBhcHBlbmREb2N1bWVudFR5cGUocmVzdWx0LCB0b0RvY3VtZW50VHlw
ZShub2RlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6UFJPQ0VTU0lOR19JTlNU
UlVDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0
LCBzdGF0aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKS0+dGFyZ2V0
KCksIHN0YXRpY19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KG5vZGUpLT5kYXRh
KCkpOworICAgICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0LCB0b1Byb2Nl
c3NpbmdJbnN0cnVjdGlvbihub2RlKS50YXJnZXQoKSwgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
bm9kZSkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05P
REU6Ci0gICAgICAgIGFwcGVuZEVsZW1lbnQocmVzdWx0LCB0b0VsZW1lbnQoY29uc3RfY2FzdDxO
b2RlKj4obm9kZSkpLCBuYW1lc3BhY2VzKTsKKyAgICAgICAgYXBwZW5kRWxlbWVudChyZXN1bHQs
IHRvRWxlbWVudChub2RlKSwgbmFtZXNwYWNlcyk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
Tm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgotICAgICAgICBhcHBlbmRDREFUQVNlY3Rpb24ocmVz
dWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDREFUQVNlY3Rpb24qPihub2RlKS0+ZGF0YSgpKTsKKyAg
ICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgdG9DREFUQVNlY3Rpb24obm9kZSkuZGF0
YSgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpBVFRSSUJVVEVfTk9ERToKICAg
ICBjYXNlIE5vZGU6OkVOVElUWV9OT0RFOgpAQCAtNTg0LDM3ICs1ODQsMzcgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdQogLy8gMi4gRWxlbWVudHMgdy8gY2hpbGRy
ZW4gbmV2ZXIgc2VsZi1jbG9zZSBiZWNhdXNlIHRoZXkgdXNlIGEgc2VwYXJhdGUgZW5kIHRhZy4K
IC8vIDMuIEhUTUwgZWxlbWVudHMgd2hpY2ggZG8gbm90IGhhdmUgYSAiZm9yYmlkZGVuIiBlbmQg
dGFnIHdpbGwgY2xvc2Ugd2l0aCBhIHNlcGFyYXRlIGVuZCB0YWcuCiAvLyA0LiBPdGhlciBlbGVt
ZW50cyBzZWxmLWNsb3NlLgotYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkU2VsZkNsb3Nl
KGNvbnN0IE5vZGUqIG5vZGUpCitib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRTZWxmQ2xv
c2UoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIWluWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uKCkgJiYgbm9kZS0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKQorICAgIGlmICghaW5Y
TUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiBub2RlLmRvY3VtZW50KCkuaXNIVE1MRG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChub2RlLT5oYXNDaGlsZE5vZGVz
KCkpCisgICAgaWYgKG5vZGUuaGFzQ2hpbGROb2RlcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudENhbm5vdEhhdmVFbmRU
YWcobm9kZSkpCisgICAgaWYgKG5vZGUuaXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhub2RlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIE1hcmt1cEFjY3VtdWxhdG9yOjplbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhj
b25zdCBOb2RlKiBub2RlKQorYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6ZWxlbWVudENhbm5vdEhh
dmVFbmRUYWcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkKKyAgICBpZiAoIW5vZGUuaXNIVE1MRWxlbWVudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICAvLyBGSVhNRTogaWVGb3JiaWRzSW5zZXJ0SFRNTCBtYXkgbm90IGJlIHRoZSBy
aWdodCBmdW5jdGlvbiB0byBjYWxsIGhlcmUKICAgICAvLyBpZUZvcmJpZHNJbnNlcnRIVE1MIGlz
IHVzZWQgdG8gZGlzYWxsb3cgc2V0dGluZyBpbm5lckhUTUwvb3V0ZXJIVE1MCiAgICAgLy8gb3Ig
Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LiAgSXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgYWxpZ24g
d2l0aAogICAgIC8vIHdoaWNoIGVsZW1lbnRzIHNob3VsZCBiZSBzZXJpYWxpemVkIHcvbyBlbmQg
dGFncy4KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKS0+
aWVGb3JiaWRzSW5zZXJ0SFRNTCgpOworICAgIHJldHVybiB0b0hUTUxFbGVtZW50KG5vZGUpLmll
Rm9yYmlkc0luc2VydEhUTUwoKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
RW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSkKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQs
IGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkgfHwg
c2hvdWxkU2VsZkNsb3NlKG5vZGUpIHx8ICghbm9kZS0+aGFzQ2hpbGROb2RlcygpICYmIGVsZW1l
bnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKKyAgICBpZiAoIW5vZGUuaXNFbGVtZW50Tm9kZSgp
IHx8IHNob3VsZFNlbGZDbG9zZShub2RlKSB8fCAoIW5vZGUuaGFzQ2hpbGROb2RlcygpICYmIGVs
ZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVz
dWx0LmFwcGVuZCgnPCcpOwogICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICByZXN1bHQuYXBw
ZW5kKHRvRWxlbWVudChub2RlKS0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKKyAgICByZXN1
bHQuYXBwZW5kKHRvRWxlbWVudChub2RlKS5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOwogICAg
IHJlc3VsdC5hcHBlbmQoJz4nKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9N
YXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSw0OCArNjks
NTMgQEAgcHVibGljOgogICAgIE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qLCBFQWJz
b2x1dGVVUkxzLCBjb25zdCBSYW5nZSogPSAwLCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uID0gSFRN
TEZyYWdtZW50U2VyaWFsaXphdGlvbik7CiAgICAgdmlydHVhbCB+TWFya3VwQWNjdW11bGF0b3Io
KTsKIAotICAgIFN0cmluZyBzZXJpYWxpemVOb2RlcyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBu
b2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5KTsKLSAgICBTdHJpbmcgc2VyaWFsaXplTm9kZXMoTm9k
ZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSwgVmVjdG9yPFF1
YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBhcHBlbmRD
b21tZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmKTsKKyAgICBTdHJpbmcgc2VyaWFs
aXplTm9kZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25s
eSk7CisgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5v
ZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNU
b1NraXApOwogCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0
aWVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCwgdW5zaWduZWQsIEVu
dGl0eU1hc2spOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmluZyhj
b25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBOYW1lc3BhY2Vz
KiA9IDApOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRp
YyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3Qg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9tYXJrdXAubGVuZ3RoKCk7IH0KKwogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KGNvbnN0IE5vZGUmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhT
dHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwgY29uc3QgVGV4dCYpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFt
ZXNwYWNlcyopOworCisgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhjb25zdCBOb2RlJiwgTmFtZXNw
YWNlcyogPSAwKTsKKworICAgIHZvaWQgYXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgY29u
c3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CisKKyAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3Vw
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBw
ZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJik7CisKICAgICB2b2lkIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBTdHJpbmcmLCBib29sKTsK
LSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwg
RWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7Ci0gICAgYm9v
bCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKLSAgICBib29sIHNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7
CisgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IE5vZGUmLCBj
b25zdCBSYW5nZSosIEVudGl0eU1hc2spOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lc3BhY2VVUkksIE5hbWVzcGFjZXMmLCBib29sIGFsbG93RW1wdHlEZWZhdWx0TlMgPSBm
YWxzZSk7Ci0gICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7Ci0g
ICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYsIFRleHQqKTsKLSAgICB2
b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1bWVudCop
OwotICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBEb2N1
bWVudFR5cGUqKTsKKyAgICB2b2lkIGFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxkZXIm
LCBjb25zdCBEb2N1bWVudCYpOworICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFN0cmluZ0J1
aWxkZXImLCBjb25zdCBEb2N1bWVudFR5cGUmKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJ
bnN0cnVjdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0
cmluZyYgZGF0YSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRl
ciYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRPcGVuVGFnKFN0cmlu
Z0J1aWxkZXImLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ2xvc2VU
YWcoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqKTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShT
dHJpbmdCdWlsZGVyJiwgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYs
IGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2Vj
dGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBhcHBlbmRTdGFy
dE1hcmt1cChTdHJpbmdCdWlsZGVyJiwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKLSAgICBi
b29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7Ci0gICAgYm9vbCBlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhjb25zdCBOb2RlKik7Ci0gICAgdm9pZCBhcHBlbmRFbmRNYXJrdXAoU3RyaW5n
QnVpbGRlciYsIGNvbnN0IE5vZGUqKTsKKworICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CisgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1
dGUoY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyYpOworICAgIGJvb2wgc2hvdWxkU2VsZkNs
b3NlKGNvbnN0IE5vZGUmKTsKKyAgICBib29sIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0
IE5vZGUmKTsKKyAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KGNvbnN0IFRleHQmKSBj
b25zdDsKIAogICAgIFZlY3RvcjxOb2RlKj4qIGNvbnN0IG1fbm9kZXM7CiAgICAgY29uc3QgUmFu
Z2UqIGNvbnN0IG1fcmFuZ2U7CiAKIHByaXZhdGU6Ci0gICAgU3RyaW5nIHJlc29sdmVVUkxJZk5l
ZWRlZChjb25zdCBFbGVtZW50KiwgY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgdm9pZCBhcHBl
bmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCos
IGNvbnN0IEF0dHJpYnV0ZSYpOwotICAgIHZvaWQgc2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNl
cyhOb2RlKiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25z
dCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCk7Cisg
ICAgU3RyaW5nIHJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50JiwgY29uc3QgU3RyaW5n
JikgY29uc3Q7CisgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdC
dWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIGNvbnN0IEF0dHJpYnV0ZSYpOworICAgIHZvaWQgc2Vy
aWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9T
a2lwLCBFQ2hpbGRyZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKiwgVmVjdG9yPFF1YWxpZmllZE5h
bWU+KiB0YWdOYW1lc1RvU2tpcCk7CiAgICAgYm9vbCBpblhNTEZyYWdtZW50U2VyaWFsaXphdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZnJhZ21lbnRTZXJpYWxpemF0aW9uID09IFhNTEZyYWdtZW50
U2VyaWFsaXphdGlvbjsgfQogICAgIHZvaWQgZ2VuZXJhdGVVbmlxdWVQcmVmaXgoUXVhbGlmaWVk
TmFtZSYsIGNvbnN0IE5hbWVzcGFjZXMmKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsMzQgKzExNyw0OCBAQCBzdGF0aWMgdm9pZCBjb21w
bGV0ZVVSTHMoRG9jdW1lbnRGcmFnbWVuCiAgICAgICAgIGNoYW5nZXNbaV0uYXBwbHkoKTsKIH0K
ICAgICAKLWNsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIE1hcmt1cEFjY3Vt
dWxhdG9yIHsKK2NsYXNzIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yIGZpbmFsIDogcHVibGljIE1h
cmt1cEFjY3VtdWxhdG9yIHsKIHB1YmxpYzoKICAgICBlbnVtIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSB7IERvZXNGdWxseVNlbGVjdE5vZGUsIERvZXNOb3RGdWxseVNlbGVjdE5vZGUgfTsKIAogICAg
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yKFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVV
UkxzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgY29uc3QgUmFuZ2UqLCBOb2RlKiBoaWdoZXN0
Tm9kZVRvQmVTZXJpYWxpemVkID0gMCk7CisKICAgICBOb2RlKiBzZXJpYWxpemVOb2RlcyhOb2Rl
KiBzdGFydE5vZGUsIE5vZGUqIHBhc3RFbmQpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJp
bmcoY29uc3QgU3RyaW5nJiBzKSB7IHJldHVybiBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3Ry
aW5nKHMpOyB9Ci0gICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSosIGJvb2wgY29udmVydEJsb2Nr
c1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVsbHlTZWxl
Y3ROb2RlKTsKLSAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqLCBE
b2N1bWVudCosIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKKyAgICB2b2lkIHdyYXBXaXRoTm9kZShO
b2RlJiwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2UsIFJhbmdlRnVsbHlTZWxl
Y3RzTm9kZSA9IERvZXNGdWxseVNlbGVjdE5vZGUpOworICAgIHZvaWQgd3JhcFdpdGhTdHlsZU5v
ZGUoU3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50JiwgYm9vbCBpc0Jsb2NrID0gZmFsc2UpOwog
ICAgIFN0cmluZyB0YWtlUmVzdWx0cygpOwogCisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHN0cmluZykgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoc3RyaW5nKTsKKyAgICB9CisKIHByaXZhdGU6Ci0gICAg
dm9pZCBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5
U2V0KiwgRG9jdW1lbnQqLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CisgICAgdm9pZCBhcHBlbmRT
dHlsZU5vZGVPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1l
bnQmLCBib29sIGlzQmxvY2sgPSBmYWxzZSk7CiAgICAgY29uc3QgU3RyaW5nJiBzdHlsZU5vZGVD
bG9zZVRhZyhib29sIGlzQmxvY2sgPSBmYWxzZSk7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRl
eHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0Kik7Ci0gICAgU3RyaW5nIHJlbmRlcmVkVGV4dChj
b25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICBTdHJpbmcgc3RyaW5nVmFsdWVGb3JSYW5n
ZShjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqKTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1
bGx5U2VsZWN0c05vZGUpOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSB7IGFwcGVuZEVsZW1lbnQob3V0LCBl
bGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7IH0KKworICAgIFN0cmluZyByZW5k
ZXJlZFRleHQoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisgICAgU3RyaW5nIHN0cmluZ1Zh
bHVlRm9yUmFuZ2UoY29uc3QgTm9kZSYsIGNvbnN0IFJhbmdlKik7CisKKyAgICB2b2lkIGFwcGVu
ZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiwgYm9vbCBhZGREaXNw
bGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworCisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBUZXh0Jikgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGFwcGVu
ZEVsZW1lbnQob3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7CisgICAg
fQogCiAgICAgZW51bSBOb2RlVHJhdmVyc2FsTW9kZSB7IEVtaXRTdHJpbmcsIERvTm90RW1pdFN0
cmluZyB9OwogICAgIE5vZGUqIHRyYXZlcnNlTm9kZXNGb3JTZXJpYWxpemF0aW9uKE5vZGUqIHN0
YXJ0Tm9kZSwgTm9kZSogcGFzdEVuZCwgTm9kZVRyYXZlcnNhbE1vZGUpOwogCi0gICAgYm9vbCBz
aG91bGRBbm5vdGF0ZSgpIHsgcmV0dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZTsgfQotICAgIGJvb2wgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKE5vZGUqIG5v
ZGUpIGNvbnN0CisgICAgYm9vbCBzaG91bGRBbm5vdGF0ZSgpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9oaWdoZXN0Tm9kZVRvQmVTZXJpYWxpemVkICYmIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFs
aXplZC0+cGFyZW50Tm9kZSgpID09IG5vZGUtPnBhcmVudE5vZGUoKQotICAgICAgICAgICAgJiYg
bV93cmFwcGluZ1N0eWxlICYmIG1fd3JhcHBpbmdTdHlsZS0+c3R5bGUoKTsKKyAgICAgICAgcmV0
dXJuIG1fc2hvdWxkQW5ub3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTsKKyAgICB9CisK
KyAgICBib29sIHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZShjb25zdCBOb2RlJiBub2RlKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faGlnaGVzdE5vZGVUb0JlU2VyaWFsaXplZCAmJiBt
X2hpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQtPnBhcmVudE5vZGUoKSA9PSBub2RlLnBhcmVudE5v
ZGUoKSAmJiBtX3dyYXBwaW5nU3R5bGUgJiYgbV93cmFwcGluZ1N0eWxlLT5zdHlsZSgpOwogICAg
IH0KIAogICAgIFZlY3RvcjxTdHJpbmc+IG1fcmV2ZXJzZWRQcmVjZWRpbmdNYXJrdXA7CkBAIC0x
NjEsMjAgKzE3NSwyMCBAQCBpbmxpbmUgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OlN0eWxlZE1h
CiB7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm9kZShOb2Rl
KiBub2RlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3
cmFwV2l0aE5vZGUoTm9kZSYgbm9kZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewogICAgIFN0cmluZ0J1
aWxkZXIgbWFya3VwOwotICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkpCi0gICAgICAgIGFw
cGVuZEVsZW1lbnQobWFya3VwLCB0b0VsZW1lbnQobm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGlu
ZXMgJiYgaXNCbG9jayhjb25zdF9jYXN0PE5vZGUqPihub2RlKSksIHJhbmdlRnVsbHlTZWxlY3Rz
Tm9kZSk7CisgICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBhcHBlbmRFbGVt
ZW50KG1hcmt1cCwgdG9FbGVtZW50KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlz
QmxvY2soJm5vZGUpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOwogICAgIGVsc2UKICAgICAgICAg
YXBwZW5kU3RhcnRNYXJrdXAobWFya3VwLCBub2RlLCAwKTsKICAgICBtX3JldmVyc2VkUHJlY2Vk
aW5nTWFya3VwLmFwcGVuZChtYXJrdXAudG9TdHJpbmcoKSk7CiAgICAgYXBwZW5kRW5kVGFnKG5v
ZGUpOwogICAgIGlmIChtX25vZGVzKQotICAgICAgICBtX25vZGVzLT5hcHBlbmQobm9kZSk7Cisg
ICAgICAgIG1fbm9kZXMtPmFwcGVuZCgmbm9kZSk7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNj
dW11bGF0b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1
bWVudCogZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OndyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1bWVudCYg
ZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICBTdHJpbmdCdWlsZGVyIG9wZW5UYWc7CiAg
ICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvcGVuVGFnLCBzdHlsZSwgZG9jdW1lbnQsIGlzQmxv
Y2spOwpAQCAtMTgyLDcgKzE5Niw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6Ondy
YXBXaXRoU3QKICAgICBhcHBlbmRTdHJpbmcoc3R5bGVOb2RlQ2xvc2VUYWcoaXNCbG9jaykpOwog
fQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsZU5vZGVPcGVuVGFn
KFN0cmluZ0J1aWxkZXImIG91dCwgU3R5bGVQcm9wZXJ0eVNldCogc3R5bGUsIERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCBpc0Jsb2NrKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIFN0eWxlUHJvcGVydHlTZXQq
IHN0eWxlLCBEb2N1bWVudCYgZG9jdW1lbnQsIGJvb2wgaXNCbG9jaykKIHsKICAgICAvLyB3cmFw
cGluZ1N0eWxlRm9yU2VyaWFsaXphdGlvbiBzaG91bGQgaGF2ZSByZW1vdmVkIC13ZWJraXQtdGV4
dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QKICAgICBBU1NFUlQocHJvcGVydHlNaXNzaW5nT3JFcXVh
bFRvTm9uZShzdHlsZSwgQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkp
OwpAQCAtMTkwLDcgKzIwNCw3IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0eWwKICAgICAgICAgb3V0LmFwcGVuZExpdGVyYWwoIjxkaXYgc3R5bGU9XCIiKTsKICAgICBl
bHNlCiAgICAgICAgIG91dC5hcHBlbmRMaXRlcmFsKCI8c3BhbiBzdHlsZT1cIiIpOwotICAgIGFw
cGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmFzVGV4dCgpLCBkb2N1bWVudC0+aXNIVE1M
RG9jdW1lbnQoKSk7CisgICAgYXBwZW5kQXR0cmlidXRlVmFsdWUob3V0LCBzdHlsZS0+YXNUZXh0
KCksIGRvY3VtZW50LmlzSFRNTERvY3VtZW50KCkpOwogICAgIG91dC5hcHBlbmRMaXRlcmFsKCJc
Ij4iKTsKIH0KIApAQCAtMjE1LDkgKzIyOSw5IEBAIFN0cmluZyBTdHlsZWRNYXJrdXBBY2N1bXVs
YXRvcjo6dGFrZVJlc3UKICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCkucmVwbGFjZVdpdGhM
aXRlcmFsKCdcMCcsICIiKTsKIH0KIAotdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIFRleHQqIHRleHQpCit2b2lkIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYg
dGV4dCkKIHsgICAgCi0gICAgY29uc3QgYm9vbCBwYXJlbnRJc1RleHRhcmVhID0gdGV4dC0+cGFy
ZW50RWxlbWVudCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LT5wYXJlbnRFbGVtZW50
KCkpOworICAgIGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IHRleHQucGFyZW50RWxlbWVu
dCgpICYmIGlzSFRNTFRleHRBcmVhRWxlbWVudCh0ZXh0LnBhcmVudEVsZW1lbnQoKSk7CiAgICAg
Y29uc3QgYm9vbCB3cmFwcGluZ1NwYW4gPSBzaG91bGRBcHBseVdyYXBwaW5nU3R5bGUodGV4dCkg
JiYgIXBhcmVudElzVGV4dGFyZWE7CiAgICAgaWYgKHdyYXBwaW5nU3BhbikgewogICAgICAgICBS
ZWZQdHI8RWRpdGluZ1N0eWxlPiB3cmFwcGluZ1N0eWxlID0gbV93cmFwcGluZ1N0eWxlLT5jb3B5
KCk7CkBAIC0yMjcsNjUgKzI0MSw2NSBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0CiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBiZSBpbmNsdWRlZCBpbiBm
b3JjZUlubGluZT8KICAgICAgICAgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHko
Q1NTUHJvcGVydHlGbG9hdCwgQ1NTVmFsdWVOb25lKTsKIAotICAgICAgICBhcHBlbmRTdHlsZU5v
ZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5bGUoKSwgJnRleHQtPmRvY3VtZW50KCkp
OworICAgICAgICBhcHBlbmRTdHlsZU5vZGVPcGVuVGFnKG91dCwgd3JhcHBpbmdTdHlsZS0+c3R5
bGUoKSwgdGV4dC5kb2N1bWVudCgpKTsKICAgICB9CiAKICAgICBpZiAoIXNob3VsZEFubm90YXRl
KCkgfHwgcGFyZW50SXNUZXh0YXJlYSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFRleHQob3V0LCB0ZXh0KTsKICAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5k
ZXJlZFRleHQgPSAhZW5jbG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZSh0ZXh0
KSwgc2VsZWN0VGFnKTsKKyAgICAgICAgY29uc3QgYm9vbCB1c2VSZW5kZXJlZFRleHQgPSAhZW5j
bG9zaW5nTm9kZVdpdGhUYWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb25zdF9jYXN0PFRleHQqPigm
dGV4dCkpLCBzZWxlY3RUYWcpOwogICAgICAgICBTdHJpbmcgY29udGVudCA9IHVzZVJlbmRlcmVk
VGV4dCA/IHJlbmRlcmVkVGV4dCh0ZXh0LCBtX3JhbmdlKSA6IHN0cmluZ1ZhbHVlRm9yUmFuZ2Uo
dGV4dCwgbV9yYW5nZSk7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVmZmVyOwogICAgICAgICBh
cHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMoYnVmZmVyLCBjb250ZW50LCAwLCBjb250
ZW50Lmxlbmd0aCgpLCBFbnRpdHlNYXNrSW5QQ0RBVEEpOwotICAgICAgICBvdXQuYXBwZW5kKGNv
bnZlcnRIVE1MVGV4dFRvSW50ZXJjaGFuZ2VGb3JtYXQoYnVmZmVyLnRvU3RyaW5nKCksIHRleHQp
KTsKKyAgICAgICAgb3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0ludGVyY2hhbmdlRm9ybWF0
KGJ1ZmZlci50b1N0cmluZygpLCAmdGV4dCkpOwogICAgIH0KIAogICAgIGlmICh3cmFwcGluZ1Nw
YW4pCiAgICAgICAgIG91dC5hcHBlbmQoc3R5bGVOb2RlQ2xvc2VUYWcoKSk7CiB9CiAgICAgCi1T
dHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlKiBu
b2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCitTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnJlbmRlcmVkVGV4dChjb25zdCBOb2RlJiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UpCiB7Ci0g
ICAgaWYgKCFub2RlLT5pc1RleHROb2RlKCkpCisgICAgaWYgKCFub2RlLmlzVGV4dE5vZGUoKSkK
ICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgY29uc3QgVGV4dCogdGV4dE5vZGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBUZXh0Kj4obm9kZSk7CisgICAgY29uc3QgVGV4dCYgdGV4dE5vZGUg
PSB0b1RleHQobm9kZSk7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwOwotICAgIHVuc2ln
bmVkIGVuZE9mZnNldCA9IHRleHROb2RlLT5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBlbmRPZmZz
ZXQgPSB0ZXh0Tm9kZS5sZW5ndGgoKTsKIAotICAgIGlmIChyYW5nZSAmJiBub2RlID09IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpKQorICAgIGlmIChyYW5nZSAmJiAmbm9kZSA9PSByYW5nZS0+c3Rh
cnRDb250YWluZXIoKSkKICAgICAgICAgc3RhcnRPZmZzZXQgPSByYW5nZS0+c3RhcnRPZmZzZXQo
KTsKLSAgICBpZiAocmFuZ2UgJiYgbm9kZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKCkpCisgICAg
aWYgKHJhbmdlICYmICZub2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAgICAgZW5k
T2Zmc2V0ID0gcmFuZ2UtPmVuZE9mZnNldCgpOwogCi0gICAgUG9zaXRpb24gc3RhcnQgPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIHN0YXJ0T2Zm
c2V0KTsKLSAgICBQb3NpdGlvbiBlbmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29u
c3RfY2FzdDxOb2RlKj4obm9kZSksIGVuZE9mZnNldCk7Ci0gICAgcmV0dXJuIHBsYWluVGV4dChS
YW5nZTo6Y3JlYXRlKCZub2RlLT5kb2N1bWVudCgpLCBzdGFydCwgZW5kKS5nZXQoKSk7CisgICAg
UG9zaXRpb24gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29uc3RfY2FzdDxO
b2RlKj4oJm5vZGUpLCBzdGFydE9mZnNldCk7CisgICAgUG9zaXRpb24gZW5kID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSwgZW5kT2Zmc2V0KTsK
KyAgICByZXR1cm4gcGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUoJm5vZGUuZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCkuZ2V0KCkpOwogfQogCi1TdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnN0
cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQor
U3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0
IE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdlKQotICAg
ICAgICByZXR1cm4gbm9kZS0+bm9kZVZhbHVlKCk7CisgICAgICAgIHJldHVybiBub2RlLm5vZGVW
YWx1ZSgpOwogCi0gICAgU3RyaW5nIHN0ciA9IG5vZGUtPm5vZGVWYWx1ZSgpOwotICAgIGlmIChu
b2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKKyAgICBTdHJpbmcgc3RyID0gbm9kZS5ub2Rl
VmFsdWUoKTsKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQogICAgICAg
ICBzdHIudHJ1bmNhdGUocmFuZ2UtPmVuZE9mZnNldCgpKTsKLSAgICBpZiAobm9kZSA9PSByYW5n
ZS0+c3RhcnRDb250YWluZXIoKSkKKyAgICBpZiAoJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkpCiAgICAgICAgIHN0ci5yZW1vdmUoMCwgcmFuZ2UtPnN0YXJ0T2Zmc2V0KCkpOwogICAg
IHJldHVybiBzdHI7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBib29sIGFkZERpc3Bs
YXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2
b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5n
ZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQogewotICAgIGNvbnN0IGJv
b2wgZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LT5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCk7
CisgICAgY29uc3QgYm9vbCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc0hU
TUxEb2N1bWVudCgpOwogICAgIGFwcGVuZE9wZW5UYWcob3V0LCBlbGVtZW50LCAwKTsKIAotICAg
IGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSA/IGVsZW1l
bnQtPmF0dHJpYnV0ZUNvdW50KCkgOiAwOwotICAgIGNvbnN0IGJvb2wgc2hvdWxkQW5ub3RhdGVP
ckZvcmNlSW5saW5lID0gZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0
ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOworICAgIGNvbnN0IHVuc2lnbmVkIGxlbmd0aCA9IGVs
ZW1lbnQuaGFzQXR0cmlidXRlcygpID8gZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpIDogMDsKKyAg
ICBjb25zdCBib29sIHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSA9IGVsZW1lbnQuaXNIVE1M
RWxlbWVudCgpICYmIChzaG91bGRBbm5vdGF0ZSgpIHx8IGFkZERpc3BsYXlJbmxpbmUpOwogICAg
IGNvbnN0IGJvb2wgc2hvdWxkT3ZlcnJpZGVTdHlsZUF0dHIgPSBzaG91bGRBbm5vdGF0ZU9yRm9y
Y2VJbmxpbmUgfHwgc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBjb25zdCBBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQuYXR0cmlidXRlQXQoaSk7CiAgICAgICAgIC8v
IFdlJ2xsIGhhbmRsZSB0aGUgc3R5bGUgYXR0cmlidXRlIHNlcGFyYXRlbHksIGJlbG93LgogICAg
ICAgICBpZiAoYXR0cmlidXRlLm5hbWUoKSA9PSBzdHlsZUF0dHIgJiYgc2hvdWxkT3ZlcnJpZGVT
dHlsZUF0dHIpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI5NywxNyArMzExLDE3IEBAIHZv
aWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KIAogICAgICAgICBpZiAoc2hv
dWxkQXBwbHlXcmFwcGluZ1N0eWxlKGVsZW1lbnQpKSB7CiAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZSA9IG1fd3JhcHBpbmdTdHlsZS0+Y29weSgpOwotICAgICAgICAgICAgbmV3SW5saW5lU3R5
bGUtPnJlbW92ZVByb3BlcnRpZXNJbkVsZW1lbnREZWZhdWx0U3R5bGUoZWxlbWVudCk7Ci0gICAg
ICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9m
Tm9kZShlbGVtZW50KTsKKyAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0
aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSk7
CisgICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhT
dHlsZU9mTm9kZShjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG5ld0lubGluZVN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUoKTsK
IAotICAgICAgICBpZiAoZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkgJiYgc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KGVsZW1lbnQpLT5pbmxpbmVTdHlsZSgpKQotICAgICAgICAgICAgbmV3
SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0eWxlKHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQq
PihlbGVtZW50KS0+aW5saW5lU3R5bGUoKSk7CisgICAgICAgIGlmIChlbGVtZW50LmlzU3R5bGVk
RWxlbWVudCgpICYmIHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5p
bmxpbmVTdHlsZSgpKQorICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm92ZXJyaWRlV2l0aFN0
eWxlKHN0YXRpY19jYXN0PGNvbnN0IFN0eWxlZEVsZW1lbnQmPihlbGVtZW50KS5pbmxpbmVTdHls
ZSgpKTsKIAogICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5lKSB7CiAgICAg
ICAgICAgICBpZiAoc2hvdWxkQW5ub3RhdGUoKSkKLSAgICAgICAgICAgICAgICBuZXdJbmxpbmVT
dHlsZS0+bWVyZ2VTdHlsZUZyb21SdWxlc0ZvclNlcmlhbGl6YXRpb24odG9IVE1MRWxlbWVudChl
bGVtZW50KSk7CisgICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm1lcmdlU3R5bGVGcm9t
UnVsZXNGb3JTZXJpYWxpemF0aW9uKHRvSFRNTEVsZW1lbnQoY29uc3RfY2FzdDxFbGVtZW50Kj4o
JmVsZW1lbnQpKSk7CiAKICAgICAgICAgICAgIGlmIChhZGREaXNwbGF5SW5saW5lKQogICAgICAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5mb3JjZUlubGluZSgpOwpAQCAtMzcxLDEyICszODUs
MTIgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gQWRkIHRoZSBub2RlIHRvIHRoZSBtYXJrdXAgaWYgd2Un
cmUgbm90IHNraXBwaW5nIHRoZSBkZXNjZW5kYW50cwogICAgICAgICAgICAgaWYgKHNob3VsZEVt
aXQpCi0gICAgICAgICAgICAgICAgYXBwZW5kU3RhcnRUYWcobik7CisgICAgICAgICAgICAgICAg
YXBwZW5kU3RhcnRUYWcoKm4pOwogCiAgICAgICAgICAgICAvLyBJZiBub2RlIGhhcyBubyBjaGls
ZHJlbiwgY2xvc2UgdGhlIHRhZyBub3cuCiAgICAgICAgICAgICBpZiAoIW4tPmNoaWxkTm9kZUNv
dW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRW1pdCkKLSAgICAgICAgICAgICAg
ICAgICAgYXBwZW5kRW5kVGFnKG4pOworICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmRUYWco
Km4pOwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBuOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBvcGVuZWRUYWcgPSB0cnVlOwpAQCAtMzk0LDcgKzQwOCw3IEBA
IE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgLy8gTm90IGF0IHRoZSBlbmQgb2YgdGhlIHJh
bmdlLCBjbG9zZSBhbmNlc3RvcnMgdXAgdG8gc2libGluZyBvZiBuZXh0IG5vZGUuCiAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRh
ZyhhbmNlc3Rvcik7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRhZygqYW5jZXN0b3Ip
OwogICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBhbmNlc3RvcjsKICAgICAgICAgICAgICAg
ICBhbmNlc3RvcnNUb0Nsb3NlLnJlbW92ZUxhc3QoKTsKICAgICAgICAgICAgIH0KQEAgLTQxMCw3
ICs0MjQsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAg
ICAgICAgICAgICAgICAgIC8vIG9yIGIpIGFuY2VzdG9ycyB0aGF0IHdlIG5ldmVyIGVuY291bnRl
cmVkIGR1cmluZyBhIHByZS1vcmRlciB0cmF2ZXJzYWwgc3RhcnRpbmcgYXQgc3RhcnROb2RlOgog
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnROb2RlLT5pc0Rlc2NlbmRhbnRPZihwYXJl
bnQpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB3cmFwV2l0aE5vZGUocGFyZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHdyYXBXaXRoTm9kZSgqcGFyZW50KTsKICAgICAgICAgICAgICAgICAgICAgbGFzdENsb3NlZCA9
IHBhcmVudDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC01NDQsMzUgKzU1
OCwzMyBAQCBzdGF0aWMgTm9kZSogaGlnaGVzdEFuY2VzdG9yVG9XcmFwTWFya3VwCiAKIC8vIEZJ
WE1FOiBTaG91bGRuJ3Qgd2Ugb21pdCBzdHlsZSBpbmZvIHdoZW4gYW5ub3RhdGUgPT0gRG9Ob3RB
bm5vdGF0ZUZvckludGVyY2hhbmdlPyAKIC8vIEZJWE1FOiBBdCBsZWFzdCwgYW5ub3RhdGlvbiBh
bmQgc3R5bGUgaW5mbyBzaG91bGQgcHJvYmFibHkgbm90IGJlIGluY2x1ZGVkIGluIHJhbmdlLm1h
cmt1cFN0cmluZygpCi1zdGF0aWMgU3RyaW5nIGNyZWF0ZU1hcmt1cEludGVybmFsKERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgUmFuZ2UqIHJhbmdlLCBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdl
LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywKK3N0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJu
YWwoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IFJhbmdlJiB1
cGRhdGVkUmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLAogICAgIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlIHNob3VsZEFubm90YXRlLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIEVBYnNv
bHV0ZVVSTHMgc2hvdWxkUmVzb2x2ZVVSTHMpCiB7Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAg
ICBBU1NFUlQocmFuZ2UpOwotICAgIEFTU0VSVCh1cGRhdGVkUmFuZ2UpOwogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoY29uc3QgU3RyaW5nLCBpbnRlcmNoYW5nZU5ld2xpbmVTdHJpbmcsIChBU0NJ
SUxpdGVyYWwoIjxiciBjbGFzcz1cIiIgQXBwbGVJbnRlcmNoYW5nZU5ld2xpbmUgIlwiPiIpKSk7
CiAKLSAgICBib29sIGNvbGxhcHNlZCA9IHVwZGF0ZWRSYW5nZS0+Y29sbGFwc2VkKEFTU0VSVF9O
T19FWENFUFRJT04pOworICAgIGJvb2wgY29sbGFwc2VkID0gdXBkYXRlZFJhbmdlLmNvbGxhcHNl
ZChBU1NFUlRfTk9fRVhDRVBUSU9OKTsKICAgICBpZiAoY29sbGFwc2VkKQogICAgICAgICByZXR1
cm4gZW1wdHlTdHJpbmcoKTsKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvciA9IHVwZGF0ZWRSYW5n
ZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgTm9k
ZSogY29tbW9uQW5jZXN0b3IgPSB1cGRhdGVkUmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIo
QVNTRVJUX05PX0VYQ0VQVElPTik7CiAgICAgaWYgKCFjb21tb25BbmNlc3RvcikKICAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CiAKLSAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3Jl
UGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgZG9jdW1lbnQudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7CiAKICAgICBOb2RlKiBib2R5ID0gZW5jbG9zaW5nTm9kZVdpdGhU
YWcoZmlyc3RQb3NpdGlvbkluTm9kZShjb21tb25BbmNlc3RvciksIGJvZHlUYWcpOwogICAgIE5v
ZGUqIGZ1bGx5U2VsZWN0ZWRSb290ID0gMDsKICAgICAvLyBGSVhNRTogRG8gdGhpcyBmb3IgYWxs
IGZ1bGx5IHNlbGVjdGVkIGJsb2Nrcywgbm90IGp1c3QgdGhlIGJvZHkuCi0gICAgaWYgKGJvZHkg
JiYgYXJlUmFuZ2VzRXF1YWwoVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRz
T2ZOb2RlKGJvZHkpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHJhbmdlKSkKKyAgICBpZiAo
Ym9keSAmJiBhcmVSYW5nZXNFcXVhbChWaXNpYmxlU2VsZWN0aW9uOjpzZWxlY3Rpb25Gcm9tQ29u
dGVudHNPZk5vZGUoYm9keSkudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgJnJhbmdlKSkKICAg
ICAgICAgZnVsbHlTZWxlY3RlZFJvb3QgPSBib2R5OwotICAgIE5vZGUqIHNwZWNpYWxDb21tb25B
bmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCh1cGRhdGVkUmFuZ2UsIHNob3Vs
ZEFubm90YXRlKTsKLSAgICBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcihub2Rl
cywgc2hvdWxkUmVzb2x2ZVVSTHMsIHNob3VsZEFubm90YXRlLCB1cGRhdGVkUmFuZ2UsIHNwZWNp
YWxDb21tb25BbmNlc3Rvcik7Ci0gICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS0+cGFz
dExhc3ROb2RlKCk7Ci0KLSAgICBOb2RlKiBzdGFydE5vZGUgPSB1cGRhdGVkUmFuZ2UtPmZpcnN0
Tm9kZSgpOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlU3RhcnQodXBkYXRlZFJhbmdlLT5z
dGFydFBvc2l0aW9uKCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSwgVlBfREVGQVVMVF9BRkZJ
TklUWSk7CisgICAgTm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gaGlnaGVzdEFuY2VzdG9y
VG9XcmFwTWFya3VwKCZ1cGRhdGVkUmFuZ2UsIHNob3VsZEFubm90YXRlKTsKKworICAgIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCBzaG91bGRSZXNvbHZlVVJMcywg
c2hvdWxkQW5ub3RhdGUsICZ1cGRhdGVkUmFuZ2UsIHNwZWNpYWxDb21tb25BbmNlc3Rvcik7Cisg
ICAgTm9kZSogcGFzdEVuZCA9IHVwZGF0ZWRSYW5nZS5wYXN0TGFzdE5vZGUoKTsKKworICAgIE5v
ZGUqIHN0YXJ0Tm9kZSA9IHVwZGF0ZWRSYW5nZS5maXJzdE5vZGUoKTsKKyAgICBWaXNpYmxlUG9z
aXRpb24gdmlzaWJsZVN0YXJ0KHVwZGF0ZWRSYW5nZS5zdGFydFBvc2l0aW9uKCksIFZQX0RFRkFV
TFRfQUZGSU5JVFkpOworICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKHVwZGF0ZWRSYW5n
ZS5lbmRQb3NpdGlvbigpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICBpZiAoc2hvdWxkQW5u
b3RhdGUgPT0gQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSAmJiBuZWVkSW50ZXJjaGFuZ2VOZXdsaW5l
QWZ0ZXIodmlzaWJsZVN0YXJ0KSkgewogICAgICAgICBpZiAodmlzaWJsZVN0YXJ0ID09IHZpc2li
bGVFbmQucHJldmlvdXMoKSkKICAgICAgICAgICAgIHJldHVybiBpbnRlcmNoYW5nZU5ld2xpbmVT
dHJpbmc7CkBAIC02MTEsNyArNjIzLDcgQEAgc3RhdGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRl
cm5hbChEb2N1bQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTaW5j
ZSB0aGlzIG5vZGUgYW5kIGFsbCB0aGUgb3RoZXIgYW5jZXN0b3JzIGFyZSBub3QgaW4gdGhlIHNl
bGVjdGlvbiB3ZSB3YW50IHRvIHNldCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgdG8gRG9lc05vdEZ1
bGx5U2VsZWN0Tm9kZQogICAgICAgICAgICAgICAgIC8vIHNvIHRoYXQgc3R5bGVzIHRoYXQgYWZm
ZWN0IHRoZSBleHRlcmlvciBvZiB0aGUgbm9kZSBhcmUgbm90IGluY2x1ZGVkLgotICAgICAgICAg
ICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZShhbmNlc3RvciwgY29udmVydEJsb2Nrc1Rv
SW5saW5lcywgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OkRvZXNOb3RGdWxseVNlbGVjdE5vZGUp
OworICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yLndyYXBXaXRoTm9kZSgqYW5jZXN0b3IsIGNv
bnZlcnRCbG9ja3NUb0lubGluZXMsIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpEb2VzTm90RnVs
bHlTZWxlY3ROb2RlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChub2RlcykKICAg
ICAgICAgICAgICAgICBub2Rlcy0+YXBwZW5kKGFuY2VzdG9yKTsKQEAgLTYzMCwxMyArNjQyLDEw
IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJuYWwoRG9jdW0KICAgICByZXR1cm4g
YWNjdW11bGF0b3IudGFrZVJlc3VsdHMoKTsKIH0KIAotU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25z
dCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNo
YW5nZSBzaG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1
dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzKQorU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5n
ZSYgcmFuZ2UsIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBz
aG91bGRBbm5vdGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBl
bXB0eVN0cmluZygpOwotCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKTsKLSAgICBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdlID0gcmFuZ2U7CisgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpOworICAgIGNvbnN0IFJhbmdl
KiB1cGRhdGVkUmFuZ2UgPSAmcmFuZ2U7CiAKICNpZiBFTkFCTEUoREVMRVRJT05fVUkpCiAgICAg
Ly8gRGlzYWJsZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2Vy
aWFsaXplZCBpbnRvIHRoZSBtYXJrdXAsCkBAIC02NDYsMTI2ICs2NTUsNDMgQEAgU3RyaW5nIGNy
ZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIAogCiAgICAgUmVmUHRyPFJhbmdlPiB1cGRh
dGVkUmFuZ2VSZWY7CiAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgIHVwZGF0ZWRSYW5nZVJlZiA9
IGZyYW1lLT5lZGl0b3IoKS5hdm9pZEludGVyc2VjdGlvbldpdGhEZWxldGVCdXR0b25Db250cm9s
bGVyKHJhbmdlKTsKKyAgICAgICAgdXBkYXRlZFJhbmdlUmVmID0gZnJhbWUtPmVkaXRvcigpLmF2
b2lkSW50ZXJzZWN0aW9uV2l0aERlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoJnJhbmdlKTsKICAgICAg
ICAgdXBkYXRlZFJhbmdlID0gdXBkYXRlZFJhbmdlUmVmLmdldCgpOwogICAgICAgICBpZiAoIXVw
ZGF0ZWRSYW5nZSkKICAgICAgICAgICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogICAgIH0KICNl
bmRpZgogCi0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFsKCZkb2N1bWVudCwgcmFuZ2Us
IHVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cEludGVybmFs
KGRvY3VtZW50LCByYW5nZSwgKnVwZGF0ZWRSYW5nZSwgbm9kZXMsIHNob3VsZEFubm90YXRlLCBj
b252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBzaG91bGRSZXNvbHZlVVJMcyk7CiB9CiAKLVBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFy
c2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQorUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5nJiBiYXNlVVJMLCBQYXJzZXJDb250ZW50
UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3kpCiB7CiAgICAgLy8gV2UgdXNlIGEgZmFrZSBib2R5
IGVsZW1lbnQgaGVyZSB0byB0cmljayB0aGUgSFRNTCBwYXJzZXIgdG8gdXNpbmcgdGhlIEluQm9k
eSBpbnNlcnRpb24gbW9kZS4KLSAgICBSZWZQdHI8SFRNTEJvZHlFbGVtZW50PiBmYWtlQm9keSA9
IEhUTUxCb2R5RWxlbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7Ci0gICAgUmVmUHRyPERvY3VtZW50
RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7
CisgICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6
OmNyZWF0ZShkb2N1bWVudCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50
ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKIAogICAgIGZyYWdtZW50LT5w
YXJzZUhUTUwobWFya3VwLCBmYWtlQm9keS5nZXQoKSwgcGFyc2VyQ29udGVudFBvbGljeSk7CiAK
LSAgICBpZiAoIWJhc2VVUkwuaXNFbXB0eSgpICYmIGJhc2VVUkwgIT0gYmxhbmtVUkwoKSAmJiBi
YXNlVVJMICE9IGRvY3VtZW50LT5iYXNlVVJMKCkpCisgICAgaWYgKCFiYXNlVVJMLmlzRW1wdHko
KSAmJiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVudC5iYXNlVVJM
KCkpCiAgICAgICAgIGNvbXBsZXRlVVJMcyhmcmFnbWVudC5nZXQoKSwgYmFzZVVSTCk7CiAKICAg
ICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgY29uc3QgY2hhciBmcmFn
bWVudE1hcmtlclRhZ1tdID0gIndlYmtpdC1mcmFnbWVudC1tYXJrZXIiOwotCi1zdGF0aWMgYm9v
bCBmaW5kTm9kZXNTdXJyb3VuZGluZ0NvbnRleHQoRG9jdW1lbnQqIGRvY3VtZW50LCBSZWZQdHI8
Tm9kZT4mIG5vZGVCZWZvcmVDb250ZXh0LCBSZWZQdHI8Tm9kZT4mIG5vZGVBZnRlckNvbnRleHQp
Ci17Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZG9jdW1lbnQtPmZpcnN0Q2hpbGQoKTsgbm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQobm9kZSkpIHsKLSAgICAgICAgaWYgKG5vZGUtPm5v
ZGVUeXBlKCkgPT0gTm9kZTo6Q09NTUVOVF9OT0RFICYmIHN0YXRpY19jYXN0PENoYXJhY3RlckRh
dGEqPihub2RlKS0+ZGF0YSgpID09IGZyYWdtZW50TWFya2VyVGFnKSB7Ci0gICAgICAgICAgICBp
ZiAoIW5vZGVCZWZvcmVDb250ZXh0KQotICAgICAgICAgICAgICAgIG5vZGVCZWZvcmVDb250ZXh0
ID0gbm9kZTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG5vZGVBZnRlckNv
bnRleHQgPSBub2RlOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIHZvaWQg
dHJpbUZyYWdtZW50KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBOb2RlKiBub2RlQmVmb3Jl
Q29udGV4dCwgTm9kZSogbm9kZUFmdGVyQ29udGV4dCkKLXsKLSAgICBSZWZQdHI8Tm9kZT4gbmV4
dDsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gZnJhZ21lbnQtPmZpcnN0Q2hpbGQoKTsg
bm9kZTsgbm9kZSA9IG5leHQpIHsKLSAgICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0LT5pc0Rl
c2NlbmRhbnRPZihub2RlLmdldCgpKSkgewotICAgICAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQobm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQot
ICAgICAgICBuZXh0ID0gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5n
ZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghbm9kZS0+Y29udGFpbnMobm9kZUFmdGVyQ29udGV4dCkp
OwotICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKG5vZGUuZ2V0KCksIEFT
U0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBpZiAobm9kZUJlZm9yZUNvbnRleHQgPT0gbm9k
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEFTU0VSVChub2RlQWZ0ZXJDb250
ZXh0LT5wYXJlbnROb2RlKCkpOwotICAgIGZvciAoUmVmUHRyPE5vZGU+IG5vZGUgPSBub2RlQWZ0
ZXJDb250ZXh0OyBub2RlOyBub2RlID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gTm9kZVRyYXZl
cnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obm9kZS5nZXQoKSk7Ci0gICAgICAgIG5vZGUtPnBh
cmVudE5vZGUoKS0+cmVtb3ZlQ2hpbGQobm9kZS5nZXQoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7
Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBt
YXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLAotICAg
IGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50
UG9saWN5KQotewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0
aGUgbWFya3VwIGFscmVhZHkgY29udGFpbnMgdGhlc2UgbWFya2Vycy4KLQotICAgIFN0cmluZ0J1
aWxkZXIgdGFnZ2VkTWFya3VwOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQobWFya3VwLmxlZnQo
ZnJhZ21lbnRTdGFydCkpOwotICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KHRh
Z2dlZE1hcmt1cCwgZnJhZ21lbnRNYXJrZXJUYWcpOwotICAgIHRhZ2dlZE1hcmt1cC5hcHBlbmQo
bWFya3VwLnN1YnN0cmluZyhmcmFnbWVudFN0YXJ0LCBmcmFnbWVudEVuZCAtIGZyYWdtZW50U3Rh
cnQpKTsKLSAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAs
IGZyYWdtZW50TWFya2VyVGFnKTsKLSAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJz
dHJpbmcoZnJhZ21lbnRFbmQpKTsKLQotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0YWdn
ZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdGFnZ2VkTWFy
a3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwotICAgIFJlZlB0
cjxEb2N1bWVudD4gdGFnZ2VkRG9jdW1lbnQgPSBEb2N1bWVudDo6Y3JlYXRlKDAsIFVSTCgpKTsK
LSAgICB0YWdnZWREb2N1bWVudC0+dGFrZUFsbENoaWxkcmVuRnJvbSh0YWdnZWRGcmFnbWVudC5n
ZXQoKSk7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbm9kZUJlZm9yZUNvbnRleHQ7Ci0gICAgUmVmUHRy
PE5vZGU+IG5vZGVBZnRlckNvbnRleHQ7Ci0gICAgaWYgKCFmaW5kTm9kZXNTdXJyb3VuZGluZ0Nv
bnRleHQodGFnZ2VkRG9jdW1lbnQuZ2V0KCksIG5vZGVCZWZvcmVDb250ZXh0LCBub2RlQWZ0ZXJD
b250ZXh0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSh0YWdnZWREb2N1bWVudC5nZXQoKSwKLSAgICAgICAgcG9zaXRpb25BZnRl
ck5vZGUobm9kZUJlZm9yZUNvbnRleHQuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
LAotICAgICAgICBwb3NpdGlvbkJlZm9yZU5vZGUobm9kZUFmdGVyQ29udGV4dC5nZXQoKSkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSBy
YW5nZS0+Y29tbW9uQW5jZXN0b3JDb250YWluZXIoQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAg
Tm9kZSogc3BlY2lhbENvbW1vbkFuY2VzdG9yID0gYW5jZXN0b3JUb1JldGFpblN0cnVjdHVyZUFu
ZEFwcGVhcmFuY2VXaXRoTm9SZW5kZXJlcihjb21tb25BbmNlc3Rvcik7Ci0KLSAgICAvLyBXaGVu
IHRoZXJlJ3MgYSBzcGVjaWFsIGNvbW1vbiBhbmNlc3RvciBvdXRzaWRlIG9mIHRoZSBmcmFnbWVu
dCwgd2UgbXVzdCBpbmNsdWRlIGl0IGFzIHdlbGwgdG8KLSAgICAvLyBwcmVzZXJ2ZSB0aGUgc3Ry
dWN0dXJlIGFuZCBhcHBlYXJhbmNlIG9mIHRoZSBmcmFnbWVudC4gRm9yIGV4YW1wbGUsIGlmIHRo
ZSBmcmFnbWVudCBjb250YWlucwotICAgIC8vIFRELCB3ZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGVu
Y2xvc2luZyBUQUJMRSB0YWcgYXMgd2VsbC4KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
ZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKmRvY3VtZW50KTsKLSAgICBpZiAo
c3BlY2lhbENvbW1vbkFuY2VzdG9yKQotICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoc3Bl
Y2lhbENvbW1vbkFuY2VzdG9yLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICBlbHNlCi0gICAg
ICAgIGZyYWdtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRvQ29udGFpbmVyTm9kZShjb21tb25B
bmNlc3RvcikpOwotCi0gICAgdHJpbUZyYWdtZW50KGZyYWdtZW50LmdldCgpLCBub2RlQmVmb3Jl
Q29udGV4dC5nZXQoKSwgbm9kZUFmdGVyQ29udGV4dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gZnJh
Z21lbnQ7Ci19Ci0KLVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSogbm9kZSwgRUNoaWxk
cmVuT25seSBjaGlsZHJlbk9ubHksIFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxz
IHNob3VsZFJlc29sdmVVUkxzLCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lw
LCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKK1N0cmluZyBj
cmVhdGVNYXJrdXAoY29uc3QgTm9kZSYgbm9kZSwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHks
IFZlY3RvcjxOb2RlKj4qIG5vZGVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwLCBFRnJhZ21lbnRTZXJpYWxpemF0
aW9uIGZyYWdtZW50U2VyaWFsaXphdGlvbikKIHsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl
dHVybiBlbXB0eVN0cmluZygpOwotCiAgICAgSFRNTEVsZW1lbnQqIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSAwOwogI2lmIEVOQUJMRShERUxFVElPTl9VSSkKLSAgICBpZiAoRnJhbWUq
IGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG5vZGUuZG9jdW1lbnQoKS5mcmFtZSgpKSB7CiAgICAgICAgIGRlbGV0ZUJ1dHRvbkNvbnRh
aW5lckVsZW1lbnQgPSBmcmFtZS0+ZWRpdG9yKCkuZGVsZXRlQnV0dG9uQ29udHJvbGxlcigpLmNv
bnRhaW5lckVsZW1lbnQoKTsKLSAgICAgICAgaWYgKG5vZGUtPmlzRGVzY2VuZGFudE9mKGRlbGV0
ZUJ1dHRvbkNvbnRhaW5lckVsZW1lbnQpKQorICAgICAgICBpZiAobm9kZS5pc0Rlc2NlbmRhbnRP
ZihkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50KSkKICAgICAgICAgICAgIHJldHVybiBlbXB0
eVN0cmluZygpOwogICAgIH0KICNlbmRpZgorCiAgICAgTWFya3VwQWNjdW11bGF0b3IgYWNjdW11
bGF0b3Iobm9kZXMsIHNob3VsZFJlc29sdmVVUkxzLCAwLCBmcmFnbWVudFNlcmlhbGl6YXRpb24p
OwotICAgIHJldHVybiBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhjb25zdF9jYXN0PE5vZGUq
Pihub2RlKSwgZGVsZXRlQnV0dG9uQ29udGFpbmVyRWxlbWVudCwgY2hpbGRyZW5Pbmx5LCB0YWdO
YW1lc1RvU2tpcCk7CisgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGNvbnN0
X2Nhc3Q8Tm9kZSY+KG5vZGUpLCBkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50LCBjaGlsZHJl
bk9ubHksIHRhZ05hbWVzVG9Ta2lwKTsKIH0KIAogc3RhdGljIHZvaWQgZmlsbENvbnRhaW5lckZy
b21TdHJpbmcoQ29udGFpbmVyTm9kZSogcGFyYWdyYXBoLCBjb25zdCBTdHJpbmcmIHN0cmluZykK
QEAgLTg5Niw1NCArODIyLDI5IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ20KICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU5vZGVzKERvY3VtZW50KiBkb2N1bWVu
dCwgY29uc3QgVmVjdG9yPE5vZGUqPiYgbm9kZXMpCi17Ci0gICAgaWYgKCFkb2N1bWVudCkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSNpZiBFTkFCTEUoREVMRVRJT05fVUkpCi0gICAgLy8gZGlzYWJs
ZSB0aGUgZGVsZXRlIGJ1dHRvbiBzbyBpdCdzIGVsZW1lbnRzIGFyZSBub3Qgc2VyaWFsaXplZCBp
bnRvIHRoZSBtYXJrdXAKLSAgICBEZWxldGVCdXR0b25Db250cm9sbGVyRGlzYWJsZVNjb3BlKGRv
Y3VtZW50LT5mcmFtZSgpKTsKLSNlbmRpZgotCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKLQotICAgIHNp
emVfdCBzaXplID0gbm9kZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3JlYXRlRGVmYXVs
dFBhcmFncmFwaEVsZW1lbnQoKmRvY3VtZW50KTsKLSAgICAgICAgZWxlbWVudC0+YXBwZW5kQ2hp
bGQobm9kZXNbaV0sIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgICAgICBmcmFnbWVudC0+YXBw
ZW5kQ2hpbGQoZWxlbWVudC5yZWxlYXNlKCksIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIH0K
LQotICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7Ci19Ci0KIFN0cmluZyBkb2N1bWVudFR5
cGVTdHJpbmcoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIHJldHVybiBjcmVhdGVN
YXJrdXAoZG9jdW1lbnQuZG9jdHlwZSgpKTsKKyAgICBEb2N1bWVudFR5cGUqIGRvY3VtZW50VHlw
ZSA9IGRvY3VtZW50LmRvY3R5cGUoKTsKKyAgICBpZiAoIWRvY3VtZW50VHlwZSkKKyAgICAgICAg
cmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqZG9jdW1lbnRU
eXBlKTsKIH0KIAotU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSogbm9kZSkKK1N0
cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2Rl
KQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBpcyBuZXZl
ciAiZm9yIGludGVyY2hhbmdlIi4gSXMgdGhhdCByaWdodD8KICAgICBTdHJpbmcgbWFya3VwU3Ry
aW5nID0gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1ZGVOb2RlLCAwKTsKIAotICAgIE5vZGU6Ok5v
ZGVUeXBlIG5vZGVUeXBlID0gbm9kZS0+bm9kZVR5cGUoKTsKKyAgICBOb2RlOjpOb2RlVHlwZSBu
b2RlVHlwZSA9IG5vZGUubm9kZVR5cGUoKTsKICAgICBpZiAobm9kZVR5cGUgIT0gTm9kZTo6RE9D
VU1FTlRfTk9ERSAmJiBub2RlVHlwZSAhPSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUpCi0gICAg
ICAgIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhub2RlLT5kb2N1bWVudCgpKSAr
IG1hcmt1cFN0cmluZzsKKyAgICAgICAgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5n
KG5vZGUuZG9jdW1lbnQoKSkgKyBtYXJrdXBTdHJpbmc7CiAKICAgICByZXR1cm4gbWFya3VwU3Ry
aW5nOwogfQogCi1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UpCitT
dHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotCi0gICAgTm9kZSogbm9kZSA9IHJhbmdl
LT5zdGFydENvbnRhaW5lcigpOworICAgIE5vZGUqIG5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmgJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDkgKzUwLDcgQEAgZW51bSBF
QWJzb2x1dGVVUkxzIHsgRG9Ob3RSZXNvbHZlVVJMcywgUgogZW51bSBFRnJhZ21lbnRTZXJpYWxp
emF0aW9uIHsgSFRNTEZyYWdtZW50U2VyaWFsaXphdGlvbiwgWE1MRnJhZ21lbnRTZXJpYWxpemF0
aW9uIH07CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9t
VGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKLVBhc3NSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3Qg
U3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGlj
eSA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIHVuc2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5k
LCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kpOwotUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNv
bnN0IFZlY3RvcjxOb2RlKj4mKTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0
IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29u
dGVudCk7CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5u
ZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ks
IEV4Y2VwdGlvbkNvZGUmKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYg
c291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpOwogUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgSFRNTEVs
ZW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5LCBFeGNlcHRpb25Db2RlJik7CkBAIC02NCwxMSAr
NjIsMTEgQEAgYm9vbCBpc1BsYWluVGV4dE1hcmt1cChOb2RlKik7CiB2b2lkIHJlcGxhY2VDaGls
ZHJlbldpdGhGcmFnbWVudChDb250YWluZXJOb2RlJiwgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiwgRXhjZXB0aW9uQ29kZSYpOwogdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoVGV4dChDb250
YWluZXJOb2RlJiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCi1TdHJpbmcgY3Jl
YXRlTWFya3VwKGNvbnN0IFJhbmdlKiwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJ
bnRlcmNoYW5nZSA9IERvTm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgYm9vbCBjb252ZXJ0Qmxv
Y2tzVG9JbmxpbmVzID0gZmFsc2UsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzKTsK
LVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgTm9kZSosIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRl
Tm9kZSwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQWJzb2x1dGVVUkxzID0gRG9Ob3RSZXNvbHZlVVJM
cywgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCA9IDAsIEVGcmFnbWVudFNl
cmlhbGl6YXRpb24gPSBIVE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKTsKK1N0cmluZyBjcmVhdGVN
YXJrdXAoY29uc3QgUmFuZ2UmLCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBbm5vdGF0ZUZvckludGVy
Y2hhbmdlID0gRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBib29sIGNvbnZlcnRCbG9ja3NU
b0lubGluZXMgPSBmYWxzZSwgRUFic29sdXRlVVJMcyA9IERvTm90UmVzb2x2ZVVSTHMpOworU3Ry
aW5nIGNyZWF0ZU1hcmt1cChjb25zdCBOb2RlJiwgRUNoaWxkcmVuT25seSA9IEluY2x1ZGVOb2Rl
LCBWZWN0b3I8Tm9kZSo+KiA9IDAsIEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzLCBW
ZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwID0gMCwgRUZyYWdtZW50U2VyaWFs
aXphdGlvbiA9IEhUTUxGcmFnbWVudFNlcmlhbGl6YXRpb24pOwogCi1TdHJpbmcgY3JlYXRlRnVs
bE1hcmt1cChjb25zdCBOb2RlKik7Ci1TdHJpbmcgY3JlYXRlRnVsbE1hcmt1cChjb25zdCBSYW5n
ZSopOworU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9kZSYpOworU3RyaW5nIGNyZWF0
ZUZ1bGxNYXJrdXAoY29uc3QgUmFuZ2UmKTsKIAogU3RyaW5nIHVybFRvTWFya3VwKGNvbnN0IFVS
TCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9FZGl0b3JJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9FZGl0b3JJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTQzOSw3ICs0MzksNyBAQCBi
b29sIEVkaXRvcjo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFdlYkFyCiAgICAgICAgICAgICBsb2Fk
ZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoYXJjaGl2ZS5nZXQoKSk7CiAKICAgICAgICAgU3Ry
aW5nIG1hcmt1cFN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobWFpblJlc291cmNlLT5kYXRhKCkt
PmRhdGEoKSwgbWFpblJlc291cmNlLT5kYXRhKCktPnNpemUoKSk7Ci0gICAgICAgIGFkZEZyYWdt
ZW50KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJp
bmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVu
dCkpOworICAgICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1l
LmRvY3VtZW50KCksIG1hcmt1cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dT
Y3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkocmV2aXNpb24g
MTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NjIsNyArNDYyLDcgQEAgYm9vbCBFZGl0b3I6OldlYkNvbnRlbnRSZWFk
ZXI6OnJlYWRXZWJBcgogICAgICAgICAgICAgbG9hZGVyLT5hZGRBbGxBcmNoaXZlUmVzb3VyY2Vz
KGFyY2hpdmUuZ2V0KCkpOwogCiAgICAgICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBTdHJpbmc6
OmZyb21VVEY4KG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIG1haW5SZXNvdXJjZS0+ZGF0
YSgpLT5zaXplKCkpOwotICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERp
c2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CisgICAgICAgIGZyYWdtZW50ID0gY3Jl
YXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1h
aW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtNTE0LDcgKzUxNCw3IEBAIGJvb2wgRWRp
dG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkSFRNTCgKICAgICBpZiAoc3RyaW5nT21pdHRpbmdN
aWNyb3NvZnRQcmVmaXguaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBm
cmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS5kb2N1bWVudCgpLCBzdHJp
bmdPbWl0dGluZ01pY3Jvc29mdFByZWZpeCwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRp
bmdBbmRQbHVnaW5Db250ZW50KTsKKyAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgc3RyaW5nT21pdHRpbmdNaWNyb3NvZnRQcmVmaXgsIGVt
cHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAgICAgcmV0
dXJuIGZyYWdtZW50OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0NSwxMiArMzQ1LDEyIEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFEKIAogU3RyaW5nIEhUTUxFbGVtZW50Ojppbm5lckhUTUwoKSBj
b25zdAogewotICAgIHJldHVybiBjcmVhdGVNYXJrdXAodGhpcywgQ2hpbGRyZW5Pbmx5KTsKKyAg
ICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzLCBDaGlsZHJlbk9ubHkpOwogfQogCiBTdHJpbmcg
SFRNTEVsZW1lbnQ6Om91dGVySFRNTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0ZU1hcmt1
cCh0aGlzKTsKKyAgICByZXR1cm4gY3JlYXRlTWFya3VwKCp0aGlzKTsKIH0KIAogdm9pZCBIVE1M
RWxlbWVudDo6c2V0SW5uZXJIVE1MKGNvbnN0IFN0cmluZyYgaHRtbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJ
KHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDEyICs3NywyNyBAQCBpbmxpbmUgSFRNTEZy
YW1lT3duZXJFbGVtZW50JiB0b0ZyYW1lT3duCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEhUTUxG
cmFtZU93bmVyRWxlbWVudCY+KG5vZGUpOwogfQogCitpbmxpbmUgY29uc3QgSFRNTEZyYW1lT3du
ZXJFbGVtZW50JiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5pc0ZyYW1lT3duZXJFbGVtZW50
KCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQm
Pihub2RlKTsKK30KKwogaW5saW5lIEhUTUxGcmFtZU93bmVyRWxlbWVudCogdG9GcmFtZU93bmVy
RWxlbWVudChOb2RlKiBub2RlKQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKCFub2RlIHx8IG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KG5vZGUpOwogfQogCitpbmxpbmUgY29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50KiB0b0ZyYW1lT3duZXJFbGVtZW50KGNvbnN0IE5vZGUq
IG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwg
bm9kZS0+aXNGcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7Cit9CisKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQmKTsKK3ZvaWQgdG9GcmFtZU93bmVy
RWxlbWVudChjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqKTsKKwogY2xhc3MgU3ViZnJhbWVM
b2FkaW5nRGlzYWJsZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IFN1YmZyYW1lTG9hZGluZ0Rp
c2FibGVyKENvbnRhaW5lck5vZGUmIHJvb3QpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE0
ICs4NSw2IEBAIHZvaWQgSFRNTFRlbXBsYXRlRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG8KICAgICBk
b2N1bWVudCgpLmVuc3VyZVRlbXBsYXRlRG9jdW1lbnQoKS0+YWRvcHRJZk5lZWRlZChtX2NvbnRl
bnQuZ2V0KCkpOwogfQogCi0jaWZuZGVmIE5ERUJVRwotY29uc3QgSFRNTFRlbXBsYXRlRWxlbWVu
dCogdG9IVE1MVGVtcGxhdGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJU
X1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgKG5vZGUtPmlzSFRNTEVsZW1lbnQo
KSAmJiBub2RlLT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkpOwotICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50Kj4obm9kZSk7Ci19Ci0jZW5kaWYKLQogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1lbnQuaAkocmV2aXNp
b24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDIxICs1NCw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gbV9jb250ZW50OwogfTsKIAotY29uc3QgSFRNTFRlbXBs
YXRlRWxlbWVudCogdG9IVE1MVGVtcGxhdGVFbGVtZW50KGNvbnN0IE5vZGUqKTsKLQotaW5saW5l
IEhUTUxUZW1wbGF0ZUVsZW1lbnQqIHRvSFRNTFRlbXBsYXRlRWxlbWVudChOb2RlKiBub2RlKQot
ewotICAgIHJldHVybiBjb25zdF9jYXN0PEhUTUxUZW1wbGF0ZUVsZW1lbnQqPih0b0hUTUxUZW1w
bGF0ZUVsZW1lbnQoc3RhdGljX2Nhc3Q8Y29uc3QgTm9kZSo+KG5vZGUpKSk7Ci19Ci0KLSNpZmRl
ZiBOREVCVUcKLQotLy8gVGhlIGRlYnVnIHZlcnNpb24gb2YgdGhpcywgd2l0aCBhc3NlcnRpb25z
LCBpcyBub3QgaW5saW5lZC4KLWlubGluZSBjb25zdCBIVE1MVGVtcGxhdGVFbGVtZW50KiB0b0hU
TUxUZW1wbGF0ZUVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgSFRNTFRlbXBsYXRlRWxlbWVudCo+KG5vZGUpOwotfQotI2VuZGlmIC8vIE5E
RUJVRworRUxFTUVOVF9UWVBFX0NBU1RTKEhUTUxUZW1wbGF0ZUVsZW1lbnQpCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5j
cHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTAgKzIwNiwxMCBAQCBwcml2YXRlOgogY2xh
c3MgRE9NRWRpdG9yOjpTZXRPdXRlckhUTUxBY3Rpb24gOiBwdWJsaWMgSW5zcGVjdG9ySGlzdG9y
eTo6QWN0aW9uIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTZXRPdXRlckhUTUxBY3Rpb24p
OwogcHVibGljOgotICAgIFNldE91dGVySFRNTEFjdGlvbihOb2RlKiBub2RlLCBjb25zdCBTdHJp
bmcmIGh0bWwpCisgICAgU2V0T3V0ZXJIVE1MQWN0aW9uKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmlu
ZyYgaHRtbCkKICAgICAgICAgOiBJbnNwZWN0b3JIaXN0b3J5OjpBY3Rpb24oIlNldE91dGVySFRN
TCIpCiAgICAgICAgICwgbV9ub2RlKG5vZGUpCi0gICAgICAgICwgbV9uZXh0U2libGluZyhub2Rl
LT5uZXh0U2libGluZygpKQorICAgICAgICAsIG1fbmV4dFNpYmxpbmcobm9kZS5uZXh0U2libGlu
ZygpKQogICAgICAgICAsIG1faHRtbChodG1sKQogICAgICAgICAsIG1fbmV3Tm9kZSgwKQogICAg
ICAgICAsIG1faGlzdG9yeShhZG9wdFB0cihuZXcgSW5zcGVjdG9ySGlzdG9yeSgpKSkKQEAgLTI0
MSw3ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIFJlZlB0cjxOb2Rl
PiBtX25vZGU7CisgICAgUmVmPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8Tm9kZT4gbV9uZXh0
U2libGluZzsKICAgICBTdHJpbmcgbV9odG1sOwogICAgIFN0cmluZyBtX29sZEhUTUw7CkBAIC0z
NzQsNyArMzc0LDcgQEAgYm9vbCBET01FZGl0b3I6OnJlbW92ZUF0dHJpYnV0ZShFbGVtZW50Kgog
ICAgIHJldHVybiBtX2hpc3RvcnktPnBlcmZvcm0oYWRvcHRQdHIobmV3IFJlbW92ZUF0dHJpYnV0
ZUFjdGlvbihlbGVtZW50LCBuYW1lKSksIGVjKTsKIH0KIAotYm9vbCBET01FZGl0b3I6OnNldE91
dGVySFRNTChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5vZGUqKiBuZXdOb2RlLCBF
eGNlcHRpb25Db2RlJiBlYykKK2Jvb2wgRE9NRWRpdG9yOjpzZXRPdXRlckhUTUwoTm9kZSYgbm9k
ZSwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgT3duUHRyPFNldE91dGVySFRNTEFjdGlvbj4gYWN0aW9uID0gYWRvcHRQdHIobmV3
IFNldE91dGVySFRNTEFjdGlvbihub2RlLCBodG1sKSk7CiAgICAgU2V0T3V0ZXJIVE1MQWN0aW9u
KiByYXdBY3Rpb24gPSBhY3Rpb24uZ2V0KCk7CkBAIC00MzksNyArNDM5LDcgQEAgYm9vbCBET01F
ZGl0b3I6OnJlbW92ZUF0dHJpYnV0ZShFbGVtZW50KgogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWJvb2wgRE9NRWRpdG9yOjpzZXRPdXRlckhUTUwoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBo
dG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nKQorYm9vbCBET01F
ZGl0b3I6OnNldE91dGVySFRNTChOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5vZGUq
KiBuZXdOb2RlLCBFcnJvclN0cmluZyogZXJyb3JTdHJpbmcpCiB7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgYm9vbCByZXN1bHQgPSBzZXRPdXRlckhUTUwobm9kZSwgaHRtbCwgbmV3
Tm9kZSwgZWMpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuaAkocmV2aXNp
b24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0RPTUVkaXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlbW92ZUNoaWxk
KE5vZGUqIHBhcmVudE5vZGUsIE5vZGUqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCBzZXRB
dHRyaWJ1dGUoRWxlbWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgcmVtb3ZlQXR0cmlidXRlKEVsZW1lbnQqLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBib29sIHNldE91dGVySFRN
TChOb2RlKiwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIGJvb2wgc2V0T3V0ZXJIVE1MKE5vZGUmLCBjb25zdCBTdHJpbmcmIGh0bWwsIE5v
ZGUqKiBuZXdOb2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCByZXBsYWNlV2hvbGVUZXh0
KFRleHQqLCBjb25zdCBTdHJpbmcmIHRleHQsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHJl
cGxhY2VDaGlsZChOb2RlKiBwYXJlbnROb2RlLCBQYXNzUmVmUHRyPE5vZGU+IG5ld05vZGUsIE5v
ZGUqIG9sZE5vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBib29sIHNldE5vZGVWYWx1ZShOb2Rl
KiBwYXJlbnROb2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CkBAIC02
NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIHJlbW92ZUNoaWxkKE5vZGUqIHBhcmVudE5v
ZGUsIE5vZGUqLCBFcnJvclN0cmluZyopOwogICAgIGJvb2wgc2V0QXR0cmlidXRlKEVsZW1lbnQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEVycm9yU3RyaW5nKik7
CiAgICAgYm9vbCByZW1vdmVBdHRyaWJ1dGUoRWxlbWVudCosIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXJyb3JTdHJpbmcqKTsKLSAgICBib29sIHNldE91dGVySFRNTChOb2RlKiwgY29uc3QgU3RyaW5n
JiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JTdHJpbmcqKTsKKyAgICBib29sIHNldE91dGVy
SFRNTChOb2RlJiwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JTdHJp
bmcqKTsKICAgICBib29sIHJlcGxhY2VXaG9sZVRleHQoVGV4dCosIGNvbnN0IFN0cmluZyYgdGV4
dCwgRXJyb3JTdHJpbmcqKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuY3BwCShyZXZpc2lvbiAxNTY5ODApCisrKyBTb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBwb3J0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE5LDMyICsxMTksMzIgQEAgdm9pZCBET01QYXRjaFN1cHBvcnQ6OnBhdGNoRG9jdW1lbnQoY29u
cwogICAgIH0KIH0KIAotTm9kZSogRE9NUGF0Y2hTdXBwb3J0OjpwYXRjaE5vZGUoTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmIGVjKQorTm9kZSogRE9NUGF0
Y2hTdXBwb3J0OjpwYXRjaE5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIERvbid0IHBhcnNlIDxodG1sPiBhcyBhIGZyYWdt
ZW50LgotICAgIGlmIChub2RlLT5pc0RvY3VtZW50Tm9kZSgpIHx8IChub2RlLT5wYXJlbnROb2Rl
KCkgJiYgbm9kZS0+cGFyZW50Tm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgpKSkgeworICAgIGlmIChu
b2RlLmlzRG9jdW1lbnROb2RlKCkgfHwgKG5vZGUucGFyZW50Tm9kZSgpICYmIG5vZGUucGFyZW50
Tm9kZSgpLT5pc0RvY3VtZW50Tm9kZSgpKSkgewogICAgICAgICBwYXRjaERvY3VtZW50KG1hcmt1
cCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIE5vZGUqIHByZXZpb3VzU2libGlu
ZyA9IG5vZGUtPnByZXZpb3VzU2libGluZygpOworICAgIE5vZGUqIHByZXZpb3VzU2libGluZyA9
IG5vZGUucHJldmlvdXNTaWJsaW5nKCk7CiAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBzaG91bGQg
dXNlIG9uZSBvZiBjcmVhdGVGcmFnbWVudCogaW4gbWFya3VwLmgKICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQgPSBEb2N1bWVudEZyYWdtZW50OjpjcmVhdGUoKm1fZG9jdW1l
bnQpOwogICAgIGlmIChtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBmcmFn
bWVudC0+cGFyc2VIVE1MKG1hcmt1cCwgbm9kZS0+cGFyZW50RWxlbWVudCgpID8gbm9kZS0+cGFy
ZW50RWxlbWVudCgpIDogbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpOworICAgICAgICBm
cmFnbWVudC0+cGFyc2VIVE1MKG1hcmt1cCwgbm9kZS5wYXJlbnRFbGVtZW50KCkgPyBub2RlLnBh
cmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKICAgICBlbHNl
Ci0gICAgICAgIGZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAsIG5vZGUtPnBhcmVudEVsZW1lbnQo
KSA/IG5vZGUtPnBhcmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
KTsKKyAgICAgICAgZnJhZ21lbnQtPnBhcnNlWE1MKG1hcmt1cCwgbm9kZS5wYXJlbnRFbGVtZW50
KCkgPyBub2RlLnBhcmVudEVsZW1lbnQoKSA6IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
KTsKIAogICAgIC8vIENvbXBvc2UgdGhlIG9sZCBsaXN0LgotICAgIENvbnRhaW5lck5vZGUqIHBh
cmVudE5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7Ci0gICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+
ID4gb2xkTGlzdDsKKyAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS5wYXJlbnRO
b2RlKCk7CisgICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+PiBvbGRMaXN0OwogICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0U2libGluZygpKQogICAgICAgICBvbGRMaXN0LmFwcGVuZChjcmVhdGVEaWdlc3QoY2hp
bGQsIDApKTsKIAogICAgIC8vIENvbXBvc2UgdGhlIG5ldyBsaXN0LgogICAgIFN0cmluZyBtYXJr
dXBDb3B5ID0gbWFya3VwLmxvd2VyKCk7CiAgICAgVmVjdG9yPE93blB0cjxEaWdlc3Q+ID4gbmV3
TGlzdDsKLSAgICBmb3IgKE5vZGUqIGNoaWxkID0gcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBj
aGlsZCAhPSBub2RlOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAoTm9k
ZSogY2hpbGQgPSBwYXJlbnROb2RlLT5maXJzdENoaWxkKCk7IGNoaWxkICE9ICZub2RlOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQogICAgICAgICBuZXdMaXN0LmFwcGVuZChjcmVhdGVE
aWdlc3QoY2hpbGQsIDApKTsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gZnJhZ21lbnQtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAg
aWYgKGNoaWxkLT5oYXNUYWdOYW1lKGhlYWRUYWcpICYmICFjaGlsZC0+Zmlyc3RDaGlsZCgpICYm
IG1hcmt1cENvcHkuZmluZCgiPC9oZWFkPiIpID09IG5vdEZvdW5kKQpAQCAtMTUzLDEzICsxNTMs
MTMgQEAgTm9kZSogRE9NUGF0Y2hTdXBwb3J0OjpwYXRjaE5vZGUoTm9kZSogbgogICAgICAgICAg
ICAgY29udGludWU7IC8vIEhUTUw1IHBhcnNlciBpbnNlcnRzIGVtcHR5IDxib2R5PiB0YWcgd2hl
bmV2ZXIgaXQgcGFyc2VzIDwvaGVhZD4KICAgICAgICAgbmV3TGlzdC5hcHBlbmQoY3JlYXRlRGln
ZXN0KGNoaWxkLCAmbV91bnVzZWROb2Rlc01hcCkpOwogICAgIH0KLSAgICBmb3IgKE5vZGUqIGNo
aWxkID0gbm9kZS0+bmV4dFNpYmxpbmcoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJs
aW5nKCkpCisgICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUubmV4dFNpYmxpbmcoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIG5ld0xpc3QuYXBwZW5kKGNy
ZWF0ZURpZ2VzdChjaGlsZCwgMCkpOwogCiAgICAgaWYgKCFpbm5lclBhdGNoQ2hpbGRyZW4ocGFy
ZW50Tm9kZSwgb2xkTGlzdCwgbmV3TGlzdCwgZWMpKSB7CiAgICAgICAgIC8vIEZhbGwgYmFjayB0
byB0b3RhbCByZXBsYWNlLgogICAgICAgICBlYyA9IDA7Ci0gICAgICAgIGlmICghbV9kb21FZGl0
b3ItPnJlcGxhY2VDaGlsZChwYXJlbnROb2RlLCBmcmFnbWVudC5yZWxlYXNlKCksIG5vZGUsIGVj
KSkKKyAgICAgICAgaWYgKCFtX2RvbUVkaXRvci0+cmVwbGFjZUNoaWxkKHBhcmVudE5vZGUsIGZy
YWdtZW50LnJlbGVhc2UoKSwgJm5vZGUsIGVjKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
IH0KICAgICByZXR1cm4gcHJldmlvdXNTaWJsaW5nID8gcHJldmlvdXNTaWJsaW5nLT5uZXh0U2li
bGluZygpIDogcGFyZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9ET01QYXRjaFN1cHBvcnQuaAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL0RPTVBhdGNoU3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5ET01QYXRjaFN1cHBvcnQoKTsKIAog
ICAgIHZvaWQgcGF0Y2hEb2N1bWVudChjb25zdCBTdHJpbmcmIG1hcmt1cCk7Ci0gICAgTm9kZSog
cGF0Y2hOb2RlKE5vZGUqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIE5vZGUqIHBhdGNoTm9kZShOb2RlJiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlv
bkNvZGUmKTsKIAogcHJpdmF0ZToKICAgICBzdHJ1Y3QgRGlnZXN0OwpJbmRleDogU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCShyZXZpc2lvbiAxNTY5
NzcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NjgsNyArNzY4LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
Z2V0T3V0ZXJIVE1MKEVycgogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Km91dGVySFRNTCA9IGNyZWF0ZU1hcmt1cChub2RlKTsKKyAgICAqb3V0ZXJIVE1MID0gY3JlYXRl
TWFya3VwKCpub2RlKTsKIH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0ZXJIVE1M
KEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgaW50IG5vZGVJZCwgY29uc3QgU3RyaW5nJiBvdXRl
ckhUTUwpCkBAIC03OTQsNyArNzk0LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0T3V0
ZXJIVE1MKEVycgogICAgIH0KIAogICAgIE5vZGUqIG5ld05vZGUgPSAwOwotICAgIGlmICghbV9k
b21FZGl0b3ItPnNldE91dGVySFRNTChub2RlLCBvdXRlckhUTUwsICZuZXdOb2RlLCBlcnJvclN0
cmluZykpCisgICAgaWYgKCFtX2RvbUVkaXRvci0+c2V0T3V0ZXJIVE1MKCpub2RlLCBvdXRlckhU
TUwsICZuZXdOb2RlLCBlcnJvclN0cmluZykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
bmV3Tm9kZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hpdmUvY2YvTGVnYWN5
V2ViQXJjaGl2ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2FyY2hp
dmUvY2YvTGVnYWN5V2ViQXJjaGl2ZS5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NDEs
NyArNDQyLDcgQEAgUGFzc1JlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcgogICAg
IH0KICAgICAgICAgCiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFy
a3VwU3RyaW5nID0gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1ZGVOb2RlLCAmbm9kZUxpc3QsIERv
Tm90UmVzb2x2ZVVSTHMsIHRhZ05hbWVzVG9GaWx0ZXIuZ2V0KCkpOworICAgIFN0cmluZyBtYXJr
dXBTdHJpbmcgPSBjcmVhdGVNYXJrdXAoKm5vZGUsIEluY2x1ZGVOb2RlLCAmbm9kZUxpc3QsIERv
Tm90UmVzb2x2ZVVSTHMsIHRhZ05hbWVzVG9GaWx0ZXIuZ2V0KCkpOwogICAgIE5vZGU6Ok5vZGVU
eXBlIG5vZGVUeXBlID0gbm9kZS0+bm9kZVR5cGUoKTsKICAgICBpZiAobm9kZVR5cGUgIT0gTm9k
ZTo6RE9DVU1FTlRfTk9ERSAmJiBub2RlVHlwZSAhPSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREUp
CiAgICAgICAgIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhub2RlLT5kb2N1bWVu
dCgpKSArIG1hcmt1cFN0cmluZzsKQEAgLTQ3NiwyMiArNDc3LDIxIEBAIFBhc3NSZWZQdHI8TGVn
YWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXIKIFBhc3NSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4g
TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdl
KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAg
Tm9kZSogc3RhcnRDb250YWluZXIgPSByYW5nZS0+c3RhcnRDb250YWluZXIoKTsKICAgICBpZiAo
IXN0YXJ0Q29udGFpbmVyKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIAogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHN0YXJ0Q29udGFpbmVyLT5k
b2N1bWVudCgpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQuZnJhbWUoKTsKICAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICBWZWN0b3I8Tm9kZSo+IG5v
ZGVMaXN0OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKICAgICAvLyBGSVhNRTogVGhp
cyBpcyBhbHdheXMgImZvciBpbnRlcmNoYW5nZSIuIElzIHRoYXQgcmlnaHQ/IFNlZSB0aGUgcHJl
dmlvdXMgbWV0aG9kLgotICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1bWVudFR5cGVTdHJp
bmcoZG9jdW1lbnQpICsgY3JlYXRlTWFya3VwKHJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UpOworICAgIFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7CisgICAgU3RyaW5nIG1h
cmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhkb2N1bWVudCkgKyBjcmVhdGVNYXJrdXAo
KnJhbmdlLCAmbm9kZUxpc3QsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOwogCiAgICAgcmV0dXJu
IGNyZWF0ZShtYXJrdXBTdHJpbmcsIGZyYW1lLCBub2RlTGlzdCwgMCk7CiB9CkBAIC01ODUsMTYg
KzU4NSwyMSBAQCBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyCiBQYXNz
UmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6OmNyZWF0ZUZyb21TZWxl
Y3Rpb24oRnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAg
ICBidWlsZGVyLmFwcGVuZChkb2N1bWVudFR5cGVTdHJpbmcoKmRvY3VtZW50KSk7CiAKLSAgICBS
ZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJhbmdlID0gZnJhbWUtPnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCk7CiAgICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKLSAgICBTdHJpbmcgbWFy
a3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKCpkb2N1bWVudCkgKyBjcmVhdGVNYXJrdXAo
c2VsZWN0aW9uUmFuZ2UuZ2V0KCksICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSk7
CisgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIGlmIChzZWxlY3Rpb25SYW5nZSkKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoY3JlYXRlTWFya3VwKCpzZWxlY3Rpb25SYW5nZSwgJm5vZGVMaXN0LCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlKSk7CiAKKyAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gYnVpbGRl
ci50b1N0cmluZygpOwogICAgIFJlZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBhcmNoaXZlID0gY3Jl
YXRlKG1hcmt1cFN0cmluZywgZnJhbWUsIG5vZGVMaXN0LCAwKTsKICAgICAKICAgICBpZiAoIWRv
Y3VtZW50LT5pc0ZyYW1lU2V0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRN
ZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Db250
ZXh0TWVudUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw3
ICszNjAsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6Y29udGV4dE1lbnVJCiAKICAg
ICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwogICAgICAg
ICAgICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKmRv
Y3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCks
ICIiKSwgcmVwbGFjZU9wdGlvbnMpOworICAgICAgICAgICAgUmVmUHRyPFJlcGxhY2VTZWxlY3Rp
b25Db21tYW5kPiBjb21tYW5kID0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNyZWF0ZSgqZG9j
dW1lbnQsIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZG9jdW1lbnQsIGl0ZW0tPnRpdGxlKCks
ICIiKSwgcmVwbGFjZU9wdGlvbnMpOwogICAgICAgICAgICAgYXBwbHlDb21tYW5kKGNvbW1hbmQp
OwogICAgICAgICAgICAgZnJhbWVTZWxlY3Rpb24ucmV2ZWFsU2VsZWN0aW9uKFNjcm9sbEFsaWdu
bWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTggKzY0
LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNDaGFyc2V0U3Bl
Y2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3N0YXRpYyBib29sIGlzQ2hhcnNldFNwZWNpZnlpbmdO
b2RlKGNvbnN0IE5vZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkp
CisgICAgaWYgKCFub2RlLmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUpOwotICAgIGlm
ICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKQorICAgIGNvbnN0IEhU
TUxFbGVtZW50JiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKKyAgICBpZiAoIWVsZW1l
bnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7Ci0g
ICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZXMoKSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWxlbWVudC0+YXR0cmlidXRlQ291bnQoKTsgKytpKSB7Ci0gICAgICAgICAg
ICBjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGVsZW1lbnQtPmF0dHJpYnV0ZUF0KGkpOwor
ICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZXMoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpOyArK2kpIHsKKyAgICAgICAgICAg
IGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlID0gZWxlbWVudC5hdHRyaWJ1dGVBdChpKTsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGVhbCBhcHByb3ByaWF0ZWx5IHdpdGggdGhl
IGF0dHJpYnV0ZSBpZiB0aGV5IGhhdmUgYSBuYW1lc3BhY2UuCiAgICAgICAgICAgICBhdHRyaWJ1
dGVzLmFwcGVuZChzdGQ6Om1ha2VfcGFpcihhdHRyaWJ1dGUubmFtZSgpLnRvU3RyaW5nKCksIGF0
dHJpYnV0ZS52YWx1ZSgpLnN0cmluZygpKSk7CiAgICAgICAgIH0KQEAgLTg0LDkgKzg0LDkgQEAg
c3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoTm9kZQogICAgIHJldHVybiB0ZXh0
RW5jb2RpbmcuaXNWYWxpZCgpOwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQpCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVFbGVtZW50KGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpzY3JpcHRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpub3Nj
cmlwdFRhZykgfHwgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoZWxlbWVudCk7CisgICAgcmV0dXJu
IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6bm9zY3JpcHRUYWcpIHx8IGlzQ2hhcnNldFNwZWNpZnlpbmdOb2Rl
KGVsZW1lbnQpOwogfQogCiBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZnJhbWVPd25lclVS
TEF0dHJpYnV0ZU5hbWUoY29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBmcmFtZU93bmVyKQpA
QCAtOTUsNjQgKzk1LDYzIEBAIHN0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBmcmFtZU93bmVy
VVIKICAgICByZXR1cm4gaXNIVE1MT2JqZWN0RWxlbWVudChmcmFtZU93bmVyKSA/IEhUTUxOYW1l
czo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7CiB9CiAKLWNsYXNzIFNlcmlhbGl6ZXJN
YXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7Citj
bGFzcyBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3IgewogcHVibGljOgotICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVs
YXRvcihQYWdlU2VyaWFsaXplciosIERvY3VtZW50KiwgVmVjdG9yPE5vZGUqPiopOworICAgIFNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciYsIERvY3VtZW50JiwgVmVj
dG9yPE5vZGUqPiopOwogICAgIHZpcnR1YWwgflNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcigp
OwogCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRl
ciYgb3V0LCBUZXh0Kik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVp
bGRlciYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCosIE5hbWVzcGFj
ZXMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKLQogcHJpdmF0ZToK
LSAgICBQYWdlU2VyaWFsaXplciogbV9zZXJpYWxpemVyOwotICAgIERvY3VtZW50KiBtX2RvY3Vt
ZW50OworICAgIFBhZ2VTZXJpYWxpemVyJiBtX3NlcmlhbGl6ZXI7CisgICAgRG9jdW1lbnQmIG1f
ZG9jdW1lbnQ7CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgVGV4dCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25z
dCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRFbmRUYWcoY29uc3QgTm9kZSYpIG92ZXJyaWRlOwogfTsKIAotU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXIqIHNl
cmlhbGl6ZXIsIERvY3VtZW50KiBkb2N1bWVudCwgVmVjdG9yPE5vZGUqPiogbm9kZXMpCitTZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdl
U2VyaWFsaXplciYgc2VyaWFsaXplciwgRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+
KiBub2RlcykKICAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBSZXNvbHZlQWxsVVJMcykK
ICAgICAsIG1fc2VyaWFsaXplcihzZXJpYWxpemVyKQogICAgICwgbV9kb2N1bWVudChkb2N1bWVu
dCkKIHsKICAgICAvLyBNYXJrdXBBY2N1bXVsYXRvciBkb2VzIG5vdCBzZXJpYWxpemUgdGhlIDw/
eG1sIC4uLiBsaW5lLCBzbyB3ZSBhZGQgaXQgZXhwbGljaXRlbHkgdG8gZW5zdXJlIHRoZSByaWdo
dCBlbmNvZGluZyBpcyBzcGVjaWZpZWQuCi0gICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1
bWVudCgpIHx8IG1fZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSB8fCBtX2RvY3VtZW50LT5pc1NW
R0RvY3VtZW50KCkpCi0gICAgICAgIGFwcGVuZFN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIgKyBt
X2RvY3VtZW50LT54bWxWZXJzaW9uKCkgKyAiXCIgZW5jb2Rpbmc9XCIiICsgbV9kb2N1bWVudC0+
Y2hhcnNldCgpICsgIlwiPz4iKTsKKyAgICBpZiAobV9kb2N1bWVudC5pc1hIVE1MRG9jdW1lbnQo
KSB8fCBtX2RvY3VtZW50LnhtbFN0YW5kYWxvbmUoKSB8fCBtX2RvY3VtZW50LmlzU1ZHRG9jdW1l
bnQoKSkKKyAgICAgICAgYXBwZW5kU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiIiArIG1fZG9jdW1l
bnQueG1sVmVyc2lvbigpICsgIlwiIGVuY29kaW5nPVwiIiArIG1fZG9jdW1lbnQuY2hhcnNldCgp
ICsgIlwiPz4iKTsKIH0KIAogU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yKCkKIHsKIH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0LCBUZXh0KiB0ZXh0KQordm9pZCBT
ZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgb3V0
LCBjb25zdCBUZXh0JiB0ZXh0KQogewotICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBhcmVu
dEVsZW1lbnQoKTsKLSAgICBpZiAocGFyZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBhcmVu
dCkpCisgICAgRWxlbWVudCogcGFyZW50ID0gdGV4dC5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYg
KHBhcmVudCAmJiAhc2hvdWxkSWdub3JlRWxlbWVudCgqcGFyZW50KSkKICAgICAgICAgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFRleHQob3V0LCB0ZXh0KTsKIH0KIAotdm9pZCBTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBTZXJpYWxpemVyTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBF
bGVtZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmICghc2hv
dWxkSWdub3JlRWxlbWVudChlbGVtZW50KSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIAotICAgIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpIHsKKyAgICBpZiAoZWxlbWVudC5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpIHsKICAgICAgICAgb3V0LmFwcGVuZCgiPG1ldGEg
Y2hhcnNldD1cIiIpOwotICAgICAgICBvdXQuYXBwZW5kKG1fZG9jdW1lbnQtPmNoYXJzZXQoKSk7
CisgICAgICAgIG91dC5hcHBlbmQobV9kb2N1bWVudC5jaGFyc2V0KCkpOwogICAgICAgICBvdXQu
YXBwZW5kKCJcIj4iKTsKICAgICB9CiAKICAgICAvLyBGSVhNRTogRm9yIG9iamVjdCAocGx1Z2lu
cykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBv
ZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgogfQogCi12b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1l
bnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIFNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiBvdXQs
IGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7Ci0gICAg
aWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAgaWYgKCFlbGVtZW50Lmlz
RnJhbWVPd25lckVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSFRNTEZyYW1lT3du
ZXJFbGVtZW50KiBmcmFtZU93bmVyID0gdG9GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KTsKLSAg
ICBGcmFtZSogZnJhbWUgPSBmcmFtZU93bmVyLT5jb250ZW50RnJhbWUoKTsKKyAgICBjb25zdCBI
VE1MRnJhbWVPd25lckVsZW1lbnQmIGZyYW1lT3duZXIgPSB0b0ZyYW1lT3duZXJFbGVtZW50KGVs
ZW1lbnQpOworICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXIuY29udGVudEZyYW1lKCk7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xNjEsMTMgKzE2MCwxMyBAQCB2
b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFdlIG5lZWQgdG8gZ2l2ZSBhIGZha2UgbG9jYXRpb24gdG8gYmxhbmsgZnJhbWVz
IHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHNlcmlhbGl6ZWQgZnJhbWUuCi0gICAg
dXJsID0gbV9zZXJpYWxpemVyLT51cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKLSAgICBhcHBlbmRB
dHRyaWJ1dGUob3V0LCBlbGVtZW50LCBBdHRyaWJ1dGUoZnJhbWVPd25lclVSTEF0dHJpYnV0ZU5h
bWUoKmZyYW1lT3duZXIpLCB1cmwuc3RyaW5nKCkpLCBuYW1lc3BhY2VzKTsKKyAgICB1cmwgPSBt
X3NlcmlhbGl6ZXIudXJsRm9yQmxhbmtGcmFtZShmcmFtZSk7CisgICAgYXBwZW5kQXR0cmlidXRl
KG91dCwgZWxlbWVudCwgQXR0cmlidXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGZyYW1l
T3duZXIpLCB1cmwuc3RyaW5nKCkpLCBuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQordm9pZCBTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhjb25zdCBOb2RlJiBub2RlKQogewot
ICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZElnbm9yZUVsZW1lbnQodG9F
bGVtZW50KG5vZGUpKSkKKyAgICBpZiAobm9kZS5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZEln
bm9yZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKICAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVuZFRhZyhub2RlKTsKIH0KIApAQCAtMjEwLDE0ICsyMDksMTQgQEAgdm9pZCBQYWdl
U2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbQogICAgIH0KIAogICAgIFZlY3RvcjxOb2Rl
Kj4gbm9kZXM7Ci0gICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKHRo
aXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciBh
Y2N1bXVsYXRvcigqdGhpcywgKmRvY3VtZW50LCAmbm9kZXMpOwogICAgIFRleHRFbmNvZGluZyB0
ZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNoYXJzZXQoKSk7CiAgICAgQ1N0cmluZyBkYXRhOwogICAg
IGlmICghdGV4dEVuY29kaW5nLmlzVmFsaWQoKSkgewogICAgICAgICAvLyBGSVhNRTogaWZyYW1l
cyB1c2VkIGFzIGltYWdlcyB0cmlnZ2VyIHRoaXMuIFdlIHNob3VsZCBkZWFsIHdpdGggdGhlbSBj
b3JyZWN0bHkuCiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgU3RyaW5nIHRleHQgPSBhY2N1
bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIElu
Y2x1ZGVOb2RlKTsKKyAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVz
KCpkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKICAgICBDU3Ry
aW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRl
eHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKICAgICBtX3Jlc291cmNlcy0+
YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkpKTsK
ICAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHJldmlzaW9uIDE1Njk3NykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2Uq
IHMKIHsKICAgICBtX2RhdGFPYmplY3QtPmNsZWFyQWxsKCk7CiAgICAgbV9kYXRhT2JqZWN0LT5z
ZXRUZXh0KHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCA9PSBJbmNsdWRl
SW1hZ2VBbHRUZXh0Rm9yQ2xpcGJvYXJkID8gZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dEZv
ckNsaXBib2FyZCgpIDogZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpKTsKLSAgICBtX2Rh
dGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoc2VsZWN0ZWRSYW5nZSwgMCwgQW5ub3Rh
dGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIFJlc29sdmVOb25Mb2NhbFVSTHMpKTsKKyAgICBtX2Rh
dGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoKnNlbGVjdGVkUmFuZ2UsIDAsIEFubm90
YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7CiAKICAgICBp
ZiAobV9ndGtDbGlwYm9hcmQpCiAgICAgICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0
ZWJvYXJkSGVscGVyKCktPndyaXRlQ2xpcGJvYXJkQ29udGVudHMobV9ndGtDbGlwYm9hcmQsIGNh
blNtYXJ0Q29weU9yRGVsZXRlID8gUGFzdGVib2FyZEhlbHBlcjo6SW5jbHVkZVNtYXJ0UGFzdGUg
OiBQYXN0ZWJvYXJkSGVscGVyOjpEb05vdEluY2x1ZGVTbWFydFBhc3RlKTsKQEAgLTIyNCw3ICsy
MjQsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgCiAgICAgaWYg
KCF1cmwuaXNFbXB0eSgpKSB7CiAgICAgICAgIG1fZGF0YU9iamVjdC0+c2V0VVJMKHVybCwgdGl0
bGUpOwogCi0gICAgICAgIG1fZGF0YU9iamVjdC0+c2V0TWFya3VwKGNyZWF0ZU1hcmt1cCh0b0Vs
ZW1lbnQobm9kZSksIEluY2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOworICAgICAgICBt
X2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAoKnRvRWxlbWVudChub2RlKSwgSW5j
bHVkZU5vZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7CiAgICAgfQogCiAgICAgR1JlZlB0cjxHZGtQ
aXhidWY+IHBpeGJ1ZiA9IGFkb3B0R1JlZihpbWFnZS0+Z2V0R2RrUGl4YnVmKCkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0JKHJldmlzaW9u
IDE1Njk3NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNyArMzYxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50
TG9hZGVyKiBsb2FkZXIgPSBmcmFtZS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoY29y
ZUFyY2hpdmUuZ2V0KCkpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLmdl
dCgpLCBtYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcuZ2V0KCksIG1haW5SZXNvdXJjZS0+dXJs
KCksIERpc2FsbG93U2NyaXB0aW5nQ29udGVudCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50KQpJbmRleDogU291
cmNlL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTMs
NyArNjEzLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChEb2N1bWVudCogZG9jdQogCiAg
ICAgICAgIC8vIEZJWE1FOiBBY2NvcmRpbmcgdG8gWE1MSHR0cFJlcXVlc3QgTGV2ZWwgMiwgdGhp
cyBzaG91bGQgdXNlIHRoZSBEb2N1bWVudC5pbm5lckhUTUwgYWxnb3JpdGhtCiAgICAgICAgIC8v
IGZyb20gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24gdG8gc2VyaWFsaXplIHRoZSBkb2N1bWVudC4K
LSAgICAgICAgU3RyaW5nIGJvZHkgPSBjcmVhdGVNYXJrdXAoZG9jdW1lbnQpOworICAgICAgICBT
dHJpbmcgYm9keSA9IGNyZWF0ZU1hcmt1cCgqZG9jdW1lbnQpOwogCiAgICAgICAgIC8vIEZJWE1F
OiB0aGlzIHNob3VsZCB1c2UgdmFsdWUgb2YgZG9jdW1lbnQuaW5wdXRFbmNvZGluZyB0byBkZXRl
cm1pbmUgdGhlIGVuY29kaW5nIHRvIHVzZS4KICAgICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5n
ID0gVVRGOEVuY29kaW5nKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MU2VyaWFsaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3Bw
CShyZXZpc2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWE1MU2VyaWFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgU3RyaW5nIFhNTFNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZVRvU3RyaW5nKAogICAgICAgICBlYyA9IFR5cGVFcnJvcjsKICAgICAgICAgcmV0
dXJuIFN0cmluZygpOwogICAgIH0KLSAgICByZXR1cm4gY3JlYXRlTWFya3VwKG5vZGUsIEluY2x1
ZGVOb2RlLCAwLCBEb05vdFJlc29sdmVVUkxzLCAwLCBYTUxGcmFnbWVudFNlcmlhbGl6YXRpb24p
OworICAgIHJldHVybiBjcmVhdGVNYXJrdXAoKm5vZGUsIEluY2x1ZGVOb2RlLCAwLCBEb05vdFJl
c29sdmVVUkxzLCAwLCBYTUxGcmFnbWVudFNlcmlhbGl6YXRpb24pOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuY3BwCShyZXZp
c2lvbiAxNTY5NzcpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNiw3ICsxMTYsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBYU0xU
UHJvY2Vzc29yOjp0cmFuCiAgICAgU3RyaW5nIHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBy
ZXN1bHRTdHJpbmc7CiAgICAgU3RyaW5nIHJlc3VsdEVuY29kaW5nOwotICAgIGlmICghdHJhbnNm
b3JtVG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmluZywgcmVz
dWx0RW5jb2RpbmcpKQorICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoKnNvdXJjZU5vZGUsIHJl
c3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgcmV0dXJuIGNyZWF0ZURvY3VtZW50RnJvbVNvdXJjZShyZXN1bHRTdHJpbmcs
IHJlc3VsdEVuY29kaW5nLCByZXN1bHRNSU1FVHlwZSwgc291cmNlTm9kZSwgMCk7CiB9CkBAIC0x
MzQsNyArMTM0LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBYU0xUUHJvY2Vzcwog
ICAgIGlmIChvdXRwdXREb2MtPmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJlc3VsdE1JTUVU
eXBlID0gInRleHQvaHRtbCI7CiAKLSAgICBpZiAoIXRyYW5zZm9ybVRvU3RyaW5nKHNvdXJjZU5v
ZGUsIHJlc3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkKKyAgICBp
ZiAoIXRyYW5zZm9ybVRvU3RyaW5nKCpzb3VyY2VOb2RlLCByZXN1bHRNSU1FVHlwZSwgcmVzdWx0
U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBj
cmVhdGVGcmFnbWVudEZvclRyYW5zZm9ybVRvRnJhZ21lbnQocmVzdWx0U3RyaW5nLCByZXN1bHRN
SU1FVHlwZSwgb3V0cHV0RG9jKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJv
Y2Vzc29yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
aAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgflhTTFRQcm9j
ZXNzb3IoKTsKIAogICAgIHZvaWQgc2V0WFNMU3R5bGVTaGVldChQYXNzUmVmUHRyPFhTTFN0eWxl
U2hlZXQ+IHN0eWxlU2hlZXQpIHsgbV9zdHlsZXNoZWV0ID0gc3R5bGVTaGVldDsgfQotICAgIGJv
b2wgdHJhbnNmb3JtVG9TdHJpbmcoTm9kZSogc291cmNlLCBTdHJpbmcmIHJlc3VsdE1JTUVUeXBl
LCBTdHJpbmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZyk7CisgICAgYm9v
bCB0cmFuc2Zvcm1Ub1N0cmluZyhOb2RlJiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUs
IFN0cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKICAgICBQYXNz
UmVmUHRyPERvY3VtZW50PiBjcmVhdGVEb2N1bWVudEZyb21Tb3VyY2UoY29uc3QgU3RyaW5nJiBz
b3VyY2UsIGNvbnN0IFN0cmluZyYgc291cmNlRW5jb2RpbmcsIGNvbnN0IFN0cmluZyYgc291cmNl
TUlNRVR5cGUsIE5vZGUqIHNvdXJjZU5vZGUsIEZyYW1lKiBmcmFtZSk7CiAgICAgCiAgICAgLy8g
RE9NIG1ldGhvZHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yTGlieHNs
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4
c2x0LmNwcAkocmV2aXNpb24gMTU2OTc3KQorKysgU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9j
ZXNzb3JMaWJ4c2x0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU2LDcgKzI1Niw3IEBAIHN0YXRp
YyB4c2x0U3R5bGVzaGVldFB0ciB4c2x0U3R5bGVzaGVldFAKIAogICAgICAgICAvLyBBY2NvcmRp
bmcgdG8gTW96aWxsYSBkb2N1bWVudGF0aW9uLCB0aGUgbm9kZSBtdXN0IGJlIGEgRG9jdW1lbnQg
bm9kZSwgYW4geHNsOnN0eWxlc2hlZXQgb3IgeHNsOnRyYW5zZm9ybSBlbGVtZW50LgogICAgICAg
ICAvLyBCdXQgd2UganVzdCB1c2UgdGV4dCBjb250ZW50IHJlZ2FyZGxlc3Mgb2Ygbm9kZSB0eXBl
LgotICAgICAgICBjYWNoZWRTdHlsZXNoZWV0LT5wYXJzZVN0cmluZyhjcmVhdGVNYXJrdXAoc3R5
bGVzaGVldFJvb3ROb2RlKSk7CisgICAgICAgIGNhY2hlZFN0eWxlc2hlZXQtPnBhcnNlU3RyaW5n
KGNyZWF0ZU1hcmt1cCgqc3R5bGVzaGVldFJvb3ROb2RlKSk7CiAgICAgfQogCiAgICAgaWYgKCFj
YWNoZWRTdHlsZXNoZWV0IHx8ICFjYWNoZWRTdHlsZXNoZWV0LT5kb2N1bWVudCgpKQpAQCAtMjY1
LDEwICsyNjUsMTAgQEAgc3RhdGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRTdHlsZXNoZWV0UAog
ICAgIHJldHVybiBjYWNoZWRTdHlsZXNoZWV0LT5jb21waWxlU3R5bGVTaGVldCgpOwogfQogCi1z
dGF0aWMgaW5saW5lIHhtbERvY1B0ciB4bWxEb2NQdHJGcm9tTm9kZShOb2RlKiBzb3VyY2VOb2Rl
LCBib29sJiBzaG91bGREZWxldGUpCitzdGF0aWMgaW5saW5lIHhtbERvY1B0ciB4bWxEb2NQdHJG
cm9tTm9kZShOb2RlJiBzb3VyY2VOb2RlLCBib29sJiBzaG91bGREZWxldGUpCiB7Ci0gICAgUmVm
PERvY3VtZW50PiBvd25lckRvY3VtZW50KHNvdXJjZU5vZGUtPmRvY3VtZW50KCkpOwotICAgIGJv
b2wgc291cmNlSXNEb2N1bWVudCA9IChzb3VyY2VOb2RlID09ICZvd25lckRvY3VtZW50LmdldCgp
KTsKKyAgICBSZWY8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQoc291cmNlTm9kZS5kb2N1bWVudCgp
KTsKKyAgICBib29sIHNvdXJjZUlzRG9jdW1lbnQgPSAoJnNvdXJjZU5vZGUgPT0gJm93bmVyRG9j
dW1lbnQuZ2V0KCkpOwogCiAgICAgeG1sRG9jUHRyIHNvdXJjZURvYyA9IDA7CiAgICAgaWYgKHNv
dXJjZUlzRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC0+dHJhbnNmb3JtU291cmNlKCkpCkBAIC0z
MDAsOSArMzAwLDkgQEAgc3RhdGljIGlubGluZSBTdHJpbmcgcmVzdWx0TUlNRVR5cGUoeG1sRAog
ICAgIHJldHVybiAiYXBwbGljYXRpb24veG1sIjsKIH0KIAotYm9vbCBYU0xUUHJvY2Vzc29yOjp0
cmFuc2Zvcm1Ub1N0cmluZyhOb2RlKiBzb3VyY2VOb2RlLCBTdHJpbmcmIG1pbWVUeXBlLCBTdHJp
bmcmIHJlc3VsdFN0cmluZywgU3RyaW5nJiByZXN1bHRFbmNvZGluZykKK2Jvb2wgWFNMVFByb2Nl
c3Nvcjo6dHJhbnNmb3JtVG9TdHJpbmcoTm9kZSYgc291cmNlTm9kZSwgU3RyaW5nJiBtaW1lVHlw
ZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0cmluZyYgcmVzdWx0RW5jb2RpbmcpCiB7Ci0gICAg
UmVmPERvY3VtZW50PiBvd25lckRvY3VtZW50KHNvdXJjZU5vZGUtPmRvY3VtZW50KCkpOworICAg
IFJlZjxEb2N1bWVudD4gb3duZXJEb2N1bWVudChzb3VyY2VOb2RlLmRvY3VtZW50KCkpOwogCiAg
ICAgc2V0WFNMVExvYWRDYWxsQmFjayhkb2NMb2FkZXJGdW5jLCB0aGlzLCBvd25lckRvY3VtZW50
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpKTsKICAgICB4c2x0U3R5bGVzaGVldFB0ciBzaGVldCA9
IHhzbHRTdHlsZXNoZWV0UG9pbnRlcihtX3N0eWxlc2hlZXQsIG1fc3R5bGVzaGVldFJvb3ROb2Rl
LmdldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk4MykKKysrIFNvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisy
MDEzLTEwLTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTog
VGhyZWFkIHJlZmVyZW5jZXMgdGhyb3VnaCBtYXJrdXAuaAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIyNDAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAg
ICAgICAgKC1bRE9NTm9kZSBtYXJrdXBTdHJpbmddKToKKyAgICAgICAgKC1bRE9NUmFuZ2UgbWFy
a3VwU3RyaW5nXSk6CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1b
V2ViRnJhbWUgX2RvY3VtZW50RnJhZ21lbnRXaXRoTWFya3VwU3RyaW5nOmJhc2VVUkxTdHJpbmc6
XSk6CisgICAgICAgICgtW1dlYkZyYW1lIF9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQYXJh
Z3JhcGhzOl0pOgorCiAyMDEzLTEwLTA1ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQ1RURTogUGFzcyBEb2N1bWVudFdyaXRlciBhcm91bmQgYXMgYSByZWZlcmVuY2UK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCShyZXZpc2lv
biAxNTY5NzcpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNo
aXZlQnlGaWx0ZXJpbmdTdWIKIAogLSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlRnVsbE1hcmt1cChjb3JlKHNlbGYpKTsKKyAgICByZXR1cm4gY3JlYXRlRnVs
bE1hcmt1cCgqY29yZShzZWxmKSk7CiB9CiAKIC0gKE5TUmVjdClfcmVuZGVyUmVjdDooYm9vbCAq
KWlzUmVwbGFjZWQKQEAgLTE3Miw3ICsxNzIsNyBAQCAtIChXZWJBcmNoaXZlICopd2ViQXJjaGl2
ZQogCiAtIChOU1N0cmluZyAqKW1hcmt1cFN0cmluZwogewotICAgIHJldHVybiBjcmVhdGVGdWxs
TWFya3VwKGNvcmUoc2VsZikpOworICAgIHJldHVybiBjcmVhdGVGdWxsTWFya3VwKCpjb3JlKHNl
bGYpKTsKIH0KIAogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
CShyZXZpc2lvbiAxNTY5NzgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC03MjEsMjQgKzcyMSw0MiBAQCAtIChET01SYW5nZSAqKV9z
bWFydERlbGV0ZVJhbmdlRm9yUHJvcG9zCiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9j
dW1lbnRGcmFnbWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJh
c2VVUkxTdHJpbmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZyAKIHsKLSAgICBpZiAoIV9wcml2
YXRlLT5jb3JlRnJhbWUgfHwgIV9wcml2YXRlLT5jb3JlRnJhbWUtPmRvY3VtZW50KCkpCisgICAg
RnJhbWUqIGZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm4gbmlsOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIHJl
dHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKF9wcml2YXRlLT5jb3JlRnJhbWUtPmRv
Y3VtZW50KCksIG1hcmt1cFN0cmluZywgYmFzZVVSTFN0cmluZywgRGlzYWxsb3dTY3JpcHRpbmdD
b250ZW50KS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmRvY3VtZW50LCBtYXJrdXBTdHJpbmcsIGJhc2VVUkxTdHJpbmcsIERpc2FsbG93U2NyaXB0aW5n
Q29udGVudCkuZ2V0KCkpOwogfQogCiAtIChET01Eb2N1bWVudEZyYWdtZW50ICopX2RvY3VtZW50
RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6KE5TQXJyYXkgKilub2RlcwogewotICAgIGlm
ICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICBGcmFtZSogZnJhbWUgPSBfcHJpdmF0ZS0+Y29yZUZyYW1lOworICAgIGlmICghZnJh
bWUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4g
bmlsOworCiAgICAgTlNFbnVtZXJhdG9yICpub2RlRW51bSA9IFtub2RlcyBvYmplY3RFbnVtZXJh
dG9yXTsKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzVmVjdG9yOwogICAgIERPTU5vZGUgKm5vZGU7
CiAgICAgd2hpbGUgKChub2RlID0gW25vZGVFbnVtIG5leHRPYmplY3RdKSkKICAgICAgICAgbm9k
ZXNWZWN0b3IuYXBwZW5kKGNvcmUobm9kZSkpOwotICAgIAotICAgIHJldHVybiBraXQoY3JlYXRl
RnJhZ21lbnRGcm9tTm9kZXMoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgbm9kZXNW
ZWN0b3IpLmdldCgpKTsKKworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IGRvY3VtZW50LT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CisKKyAgICBmb3IgKGF1dG8gbm9k
ZSA6IG5vZGVzVmVjdG9yKSB7CisgICAgICAgIFJlZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gY3Jl
YXRlRGVmYXVsdFBhcmFncmFwaEVsZW1lbnQoKmRvY3VtZW50KTsKKyAgICAgICAgZWxlbWVudC0+
YXBwZW5kQ2hpbGQobm9kZSwgQVNTRVJUX05PX0VYQ0VQVElPTik7CisgICAgICAgIGZyYWdtZW50
LT5hcHBlbmRDaGlsZChlbGVtZW50LnJlbGVhc2UoKSwgQVNTRVJUX05PX0VYQ0VQVElPTik7Cisg
ICAgfQorCisgICAgcmV0dXJuIGtpdChmcmFnbWVudC5yZWxlYXNlKCkuZ2V0KCkpOwogfQogCiAt
ICh2b2lkKV9yZXBsYWNlU2VsZWN0aW9uV2l0aE5vZGU6KERPTU5vZGUgKilub2RlIHNlbGVjdFJl
cGxhY2VtZW50OihCT09MKXNlbGVjdFJlcGxhY2VtZW50IHNtYXJ0UmVwbGFjZTooQk9PTClzbWFy
dFJlcGxhY2UgbWF0Y2hTdHlsZTooQk9PTCltYXRjaFN0eWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213502</attachid>
            <date>2013-10-06 00:35:48 -0700</date>
            <delta_ts>2013-10-06 10:38:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-122403-20131006003547.patch</filename>
            <type>text/plain</type>
            <size>105576</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTA1ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ1RURTogVGhyZWFkIHJlZmVyZW5jZXMg
dGhyb3VnaCBtYXJrdXAuaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyNDAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSGlnaGxpZ2h0czoKKyAgICAgICAgLSBSZW1vdmVkIGNyZWF0ZUZyYWdtZW50RnJv
bU1hcmt1cFdpdGhDb250ZXh0KCksIGl0IHdhcyB1bnVzZWQuCisgICAgICAgIC0gTW92ZWQgY3Jl
YXRlRnJhZ21lbnRGcm9tTm9kZXMoKSBpbnRvIGl0cyBvbmUgY2FsbGVyIChpbiBXZWJLaXQvbWFj
KQorICAgICAgICAtIEFkZCBhIGJ1bmNoIG1vcmUgdG9Gb28oKSBvdmVybG9hZHMuCisKIDIwMTMt
MTAtMDYgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAg
ICBBZGQgKkNTUyogcHJlZml4IHRvIEZvbnRGZWF0dXJlVmFsdWUgdG8gZ2VuZXJhdGUgdG9DU1NG
b250RmVhdHVyZVZhbHVlKCksIGFuZCB1c2UgaXQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCShy
ZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkod29ya2lu
ZyBjb3B5KQpAQCAtMjMyLDcgKzIzMiw2IEBAIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yQzFF
UEtOU181UmFuZ2UKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yRDFFdgogX19aTjdXZWJDb3Jl
MTJVVEY4RW5jb2RpbmdFdgogX19aTjdXZWJDb3JlMTJjYWNoZVN0b3JhZ2VFdgotX19aTjdXZWJD
b3JlMTJjcmVhdGVNYXJrdXBFUEtOU181UmFuZ2VFUE4zV1RGNlZlY3RvcklQTlNfNE5vZGVFTG0w
RU5TM18xNUNyYXNoT25PdmVyZmxvd0VFRU5TXzIzRUFubm90YXRlRm9ySW50ZXJjaGFuZ2VFYk5T
XzEzRUFic29sdXRlVVJMc0UKIF9fWk43V2ViQ29yZTEyZGVsZXRlQ29va2llRVJLTlNfMjFOZXR3
b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJMRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3Jl
MTJnY0NvbnRyb2xsZXJFdgogX19aTjdXZWJDb3JlMTJpY29uRGF0YWJhc2VFdgpAQCAtNTgxLDgg
KzU4MCw4IEBAIF9fWk43V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjIyZXhwYW5kVXMKIF9fWk43
V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbkMxRVBLTlNfNVJhbmdlRU5TXzlFQWZmaW5pdHlFYgog
X19aTjdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uQzFFUktOU18xNVZpc2libGVQb3NpdGlvbkVT
M19iCiBfX1pON1dlYkNvcmUxNlZpc2libGVTZWxlY3Rpb25DMUVSS05TXzE1VmlzaWJsZVBvc2l0
aW9uRWIKLV9fWk43V2ViQ29yZTE2Y3JlYXRlRnVsbE1hcmt1cEVQS05TXzROb2RlRQotX19aTjdX
ZWJDb3JlMTZjcmVhdGVGdWxsTWFya3VwRVBLTlNfNVJhbmdlRQorX19aTjdXZWJDb3JlMTZjcmVh
dGVGdWxsTWFya3VwRVJLTlNfNE5vZGVFCitfX1pON1dlYkNvcmUxNmNyZWF0ZUZ1bGxNYXJrdXBF
UktOU181UmFuZ2VFCiBfX1pON1dlYkNvcmUxNmRlbGV0ZUFsbENvb2tpZXNFUktOU18yMU5ldHdv
cmtTdG9yYWdlU2Vzc2lvbkUKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSSzZDR1Jl
Y3QKIF9fWk43V2ViQ29yZTE2ZW5jbG9zaW5nSW50UmVjdEVSS05TXzlGbG9hdFJlY3RFCkBAIC03
NjUsNyArNzY0LDYgQEAgX19aTjdXZWJDb3JlMjNBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUMxRQog
X19aTjdXZWJDb3JlMjNNdXRhYmxlU3R5bGVQcm9wZXJ0eVNldDI1ZW5zdXJlQ1NTU3R5bGVEZWNs
YXJhdGlvbkV2CiBfX1pON1dlYkNvcmUyM011dGFibGVTdHlsZVByb3BlcnR5U2V0RDFFdgogX19a
TjdXZWJDb3JlMjNTeW5jaHJvbm91c0xvYWRlckNsaWVudDI0cGxhdGZvcm1CYWRSZXNwb25zZUVy
cm9yRXYKLV9fWk43V2ViQ29yZTIzY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXNFUE5TXzhEb2N1bWVu
dEVSS04zV1RGNlZlY3RvcklQTlNfNE5vZGVFTG0wRU5TMl8xNUNyYXNoT25PdmVyZmxvd0VFRQog
X19aTjdXZWJDb3JlMjNkYXRhRm9yVVJMQ29tcG9uZW50VHlwZUVQNU5TVVJMbAogX19aTjdXZWJD
b3JlMjNkZWNvZGVIb3N0TmFtZVdpdGhSYW5nZUVQOE5TU3RyaW5nOF9OU1JhbmdlCiBfX1pON1dl
YkNvcmUyM2VuY29kZUhvc3ROYW1lV2l0aFJhbmdlRVA4TlNTdHJpbmc4X05TUmFuZ2UKQEAgLTc4
MSw3ICs3NzksNyBAQCBfX1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcjE0CiBf
X1pON1dlYkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlcjE0d2lsbERldGFjaFBhZ2VFdgog
X19aTjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXJDMkVQTlNfNUZyYW1lRQogX19a
TjdXZWJDb3JlMjRGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXJEMkV2Ci1fX1pON1dlYkNvcmUyNGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3VtZW50RVJLTjNXVEY2U3RyaW5nRVM1X05T
XzE5UGFyc2VyQ29udGVudFBvbGljeUUKK19fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwRVJOU184RG9jdW1lbnRFUktOM1dURjZTdHJpbmdFUzVfTlNfMTlQYXJzZXJDb250ZW50
UG9saWN5RQogX19aTjdXZWJDb3JlMjRkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXNFUktOM1dURjZT
dHJpbmdFCiBfX1pON1dlYkNvcmUyNGRlbGV0ZUNvb2tpZXNGb3JIb3N0bmFtZUVSS05TXzIxTmV0
d29ya1N0b3JhZ2VTZXNzaW9uRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjRmaWxlU3lz
dGVtUmVwcmVzZW50YXRpb25FUktOM1dURjZTdHJpbmdFCkBAIC04MTEsNiArODA5LDcgQEAgX19a
TjdXZWJDb3JlMjhEb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aQogX19aTjdXZWJDb3JlMjhlbmNv
ZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzRVJLTjNXVEY2U3RyaW5nRQogX19aTjdXZWJDb3JlMjhy
ZW1vdmVMYW5ndWFnZUNoYW5nZU9ic2VydmVyRVB2CiBfX1pON1dlYkNvcmUyOWNvb2tpZVJlcXVl
c3RIZWFkZXJGaWVsZFZhbHVlRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJM
RVM1XworX19aTjdXZWJDb3JlMjljcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVudEVSTlNfOERv
Y3VtZW50RQogX19aTjdXZWJDb3JlMjlpc0NoYXJhY3RlclNtYXJ0UmVwbGFjZUV4ZW1wdEVpYgog
X19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRGVjb2RpbmdXaXRoUmFuZ2VFUDhOU1N0cmluZzhf
TlNSYW5nZQogX19aTjdXZWJDb3JlMzBob3N0TmFtZU5lZWRzRW5jb2RpbmdXaXRoUmFuZ2VFUDhO
U1N0cmluZzhfTlNSYW5nZQpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03
OTYsNyArNzk2LDcgQEAKIAkJMUMxMUNDQzgwQUE2MDkzNzAwREFEQjIwIC8qIERPTUhUTUxFbGVt
ZW50LmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4NURGMkVFQjBBQTM4N0NCMDBBRDY0QzUgLyogRE9NSFRNTEVsZW1lbnQuaCAq
LzsgfTsKIAkJMUMyNjQ5N0EwRDdFMjQ4QTAwQkQxMEYyIC8qIERvY3VtZW50TG9hZGVyTWFjLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMjY0OTc5
MEQ3RTI0OEEwMEJEMTBGMiAvKiBEb2N1bWVudExvYWRlck1hYy5jcHAgKi87IH07CiAJCTFDMjY0
OTdDMEQ3RTI0RUMwMEJEMTBGMiAvKiBQYWdlTWFjLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMjY0OTdCMEQ3RTI0RUMwMEJEMTBGMiAvKiBQYWdl
TWFjLmNwcCAqLzsgfTsKLQkJMUM0QzhGMDIwQUQ4NUQ4NzAwOTQ3NUNFIC8qIERlbGV0ZUJ1dHRv
bkNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFDNEM4RjAwMEFEODVEODcwMDk0NzVDRSAvKiBEZWxldGVCdXR0b25Db250cm9sbGVyLmgg
Ki87IH07CisJCTFDNEM4RjAyMEFEODVEODcwMDk0NzVDRSAvKiBEZWxldGVCdXR0b25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzRD
OEYwMDBBRDg1RDg3MDA5NDc1Q0UgLyogRGVsZXRlQnV0dG9uQ29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDNEM4RjY2MEFEODY1
NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFDNEM4RjY0MEFEODY1NUQwMDk0NzVDRSAvKiBEZWxldGVCdXR0
b24uaCAqLzsgfTsKIAkJMUM1RkFFRDEwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENh
bGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAxQzVGQUVDRjBEQ0ZEOTAxMDBENThGNzggLyogSlNKYXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCAq
LzsgfTsKIAkJMUM1RkFFRDIwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFt
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUM1RkFF
RDAwRENGRDkwMTAwRDU4Rjc4IC8qIEpTSmF2YVNjcmlwdENhbGxGcmFtZS5oICovOyB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NSFRNTC5tbQkocmV2aXNpb24gMTU2OTg1
KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01IVE1MLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC01Niw3ICs1Niw3IEBACiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKiljcmVhdGVE
b2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcg
YmFzZVVSTDooTlNVUkwgKiliYXNlVVJMCiB7Ci0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoY29yZShzZWxmKSwgbWFya3VwU3RyaW5nLCBbYmFzZVVSTCBhYnNvbHV0ZVN0
cmluZ10pLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgq
Y29yZShzZWxmKSwgbWFya3VwU3RyaW5nLCBbYmFzZVVSTCBhYnNvbHV0ZVN0cmluZ10pLmdldCgp
KTsKIH0KIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKWNyZWF0ZURvY3VtZW50RnJhZ21lbnRX
aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ0RBVEFT
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NEQVRBU2VjdGlvbi5o
CShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ0RBVEFTZWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDMzIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPFRleHQ+IHZpcnR1YWxDcmVhdGUoY29uc3QgU3RyaW5nJik7CiB9OwogCitpbmxp
bmUgQ0RBVEFTZWN0aW9uJiB0b0NEQVRBU2VjdGlvbihOb2RlJiBub2RlKQoreworICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpDREFU
QV9TRUNUSU9OX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDREFUQVNlY3Rpb24mPihu
b2RlKTsKK30KKworaW5saW5lIGNvbnN0IENEQVRBU2VjdGlvbiYgdG9DREFUQVNlY3Rpb24oY29u
c3QgTm9kZSYgbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihu
b2RlLm5vZGVUeXBlKCkgPT0gTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgQ0RBVEFTZWN0aW9uJj4obm9kZSk7Cit9CisKK2lubGluZSBDREFU
QVNlY3Rpb24qIHRvQ0RBVEFTZWN0aW9uKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhf
U0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpD
REFUQV9TRUNUSU9OX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDREFUQVNlY3Rpb24q
Pihub2RlKTsKK30KKworaW5saW5lIGNvbnN0IENEQVRBU2VjdGlvbiogdG9DREFUQVNlY3Rpb24o
Y29uc3QgTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
Tighbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERSk7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IENEQVRBU2VjdGlvbio+KG5vZGUpOworfQor
Cit2b2lkIHRvQ0RBVEFTZWN0aW9uKGNvbnN0IENEQVRBU2VjdGlvbiYpOwordm9pZCB0b0NEQVRB
U2VjdGlvbihjb25zdCBDREFUQVNlY3Rpb24qKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gQ0RBVEFTZWN0aW9uX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Db21t
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbW1lbnQuaAkocmV2aXNp
b24gMTU2OTg1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0NvbW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDAsNiArNDAsMzMgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRUeXBl
QWxsb3dlZChOb2RlVHlwZSkgY29uc3Q7CiB9OwogCitpbmxpbmUgQ29tbWVudCYgdG9Db21tZW50
KE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9k
ZS5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PENvbW1lbnQmPihub2RlKTsKK30KKworaW5saW5lIGNvbnN0IENvbW1lbnQmIHRvQ29tbWVu
dChjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpDT01NRU5UX05PREUpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBDb21tZW50Jj4obm9kZSk7Cit9CisKK2lubGluZSBDb21tZW50KiB0
b0NvbW1lbnQoTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNB
VElPTighbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkNPTU1FTlRfTk9ERSk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENvbW1lbnQqPihub2RlKTsKK30KKworaW5saW5lIGNvbnN0
IENvbW1lbnQqIHRvQ29tbWVudChjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgPT0gTm9kZTo6
Q09NTUVOVF9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgQ29tbWVudCo+KG5v
ZGUpOworfQorCit2b2lkIHRvQ29tbWVudChjb25zdCBDb21tZW50Jik7Cit2b2lkIHRvQ29tbWVu
dChjb25zdCBDb21tZW50Kik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IENvbW1lbnRfaApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxNTY5ODUp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MjY3LDcgKzQyNjcsNyBAQCB2b2lkIERvY3VtZW50OjphcHBseVhTTFRyYW5zZm9ybShQcm9jZXNz
CiAgICAgU3RyaW5nIHJlc3VsdE1JTUVUeXBlOwogICAgIFN0cmluZyBuZXdTb3VyY2U7CiAgICAg
U3RyaW5nIHJlc3VsdEVuY29kaW5nOwotICAgIGlmICghcHJvY2Vzc29yLT50cmFuc2Zvcm1Ub1N0
cmluZyh0aGlzLCByZXN1bHRNSU1FVHlwZSwgbmV3U291cmNlLCByZXN1bHRFbmNvZGluZykpCisg
ICAgaWYgKCFwcm9jZXNzb3ItPnRyYW5zZm9ybVRvU3RyaW5nKCp0aGlzLCByZXN1bHRNSU1FVHlw
ZSwgbmV3U291cmNlLCByZXN1bHRFbmNvZGluZykpCiAgICAgICAgIHJldHVybjsKICAgICAvLyBG
SVhNRTogSWYgdGhlIHRyYW5zZm9ybSBmYWlsZWQgd2Ugc2hvdWxkIHByb2JhYmx5IHJlcG9ydCBh
biBlcnJvciAobGlrZSBNb3ppbGxhIGRvZXMpLgogICAgIEZyYW1lKiBvd25lckZyYW1lID0gZnJh
bWUoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxOSw4ICsxNjE5
LDIxIEBAIGlubGluZSBjb25zdCBEb2N1bWVudCogdG9Eb2N1bWVudChjb25zdCAKICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRG9jdW1lbnQqPihub2RlKTsKIH0KIAoraW5saW5lIERvY3Vt
ZW50JiB0b0RvY3VtZW50KE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04obm9kZS5pc0RvY3VtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8RG9jdW1lbnQmPihub2RlKTsKK30KKworaW5saW5lIGNvbnN0IERvY3VtZW50JiB0b0RvY3Vt
ZW50KGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obm9kZS5pc0RvY3VtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgRG9jdW1lbnQmPihub2RlKTsKK30KKwogLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2lu
ZyBhbiB1bm5lY2Vzc2FyeSBjYXN0Lgogdm9pZCB0b0RvY3VtZW50KGNvbnN0IERvY3VtZW50Kik7
Cit2b2lkIHRvRG9jdW1lbnQoY29uc3QgRG9jdW1lbnQmKTsKIAogLy8gUHV0IHRoZXNlIG1ldGhv
ZHMgaGVyZSwgYmVjYXVzZSB0aGV5IHJlcXVpcmUgdGhlIERvY3VtZW50IGRlZmluaXRpb24sIGJ1
dCB3ZSByZWFsbHkgd2FudCB0byBpbmxpbmUgdGhlbS4KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudFR5cGUuaAkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50VHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywzMyBAQCBwcml2YXRlOgogICAg
IFN0cmluZyBtX3N1YnNldDsKIH07CiAKK2lubGluZSBEb2N1bWVudFR5cGUmIHRvRG9jdW1lbnRU
eXBlKE5vZGUmIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
bm9kZS5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PERvY3VtZW50VHlwZSY+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3QgRG9j
dW1lbnRUeXBlJiB0b0RvY3VtZW50VHlwZShjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG5vZGUubm9kZVR5cGUoKSA9PSBOb2RlOjpET0NV
TUVOVF9UWVBFX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBEb2N1bWVudFR5
cGUmPihub2RlKTsKK30KKworaW5saW5lIERvY3VtZW50VHlwZSogdG9Eb2N1bWVudFR5cGUoTm9k
ZSogbm9kZSkKK3sKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8
fCBub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6OkRPQ1VNRU5UX1RZUEVfTk9ERSk7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PERvY3VtZW50VHlwZSo+KG5vZGUpOworfQorCitpbmxpbmUgY29uc3Qg
RG9jdW1lbnRUeXBlKiB0b0RvY3VtZW50VHlwZShjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgRG9jdW1lbnRUeXBlKj4obm9kZSk7Cit9CisKK3ZvaWQgdG9Eb2N1bWVudFR5cGUoY29uc3Qg
RG9jdW1lbnRUeXBlJik7Cit2b2lkIHRvRG9jdW1lbnRUeXBlKGNvbnN0IERvY3VtZW50VHlwZSop
OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTU2OTg1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MSwxMiArOTEsMzMgQEAgcHJpdmF0ZToKICNlbmRpZgogfTsKIAoraW5saW5lIFByb2Nlc3Np
bmdJbnN0cnVjdGlvbiYgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oTm9kZSYgbm9kZSkKK3sKKyAg
ICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihub2RlLm5vZGVUeXBlKCkgPT0gTm9k
ZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
UHJvY2Vzc2luZ0luc3RydWN0aW9uJj4obm9kZSk7Cit9CisKK2lubGluZSBjb25zdCBQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24mIHRvUHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IE5vZGUmIG5vZGUp
Cit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obm9kZS5ub2RlVHlwZSgp
ID09IE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGNvbnN0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbiY+KG5vZGUpOworfQorCiBpbmxpbmUg
UHJvY2Vzc2luZ0luc3RydWN0aW9uKiB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihOb2RlKiBub2Rl
KQogewogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUt
Pm5vZGVUeXBlKCkgPT0gTm9kZTo6UFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKTsKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSk7CiB9CiAKK2lu
bGluZSBjb25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qIHRvUHJvY2Vzc2luZ0luc3RydWN0aW9u
KGNvbnN0IE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpQUk9DRVNTSU5HX0lOU1RSVUNU
SU9OX05PREUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24qPihub2RlKTsKK30KKwordm9pZCB0b1Byb2Nlc3NpbmdJbnN0cnVjdGlvbihjb25zdCBQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24mKTsKK3ZvaWQgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29u
c3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKik7CisKIH0gLy9uYW1lc3BhY2UKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwODMsNyArMTA4Myw3IEBAIFN0cmlu
ZyBSYW5nZTo6dG9TdHJpbmcoRXhjZXB0aW9uQ29kZSYgZWMKIAogU3RyaW5nIFJhbmdlOjp0b0hU
TUwoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVNYXJrdXAodGhpcyk7CisgICAgcmV0dXJu
IGNyZWF0ZU1hcmt1cCgqdGhpcyk7CiB9CiAKIFN0cmluZyBSYW5nZTo6dGV4dCgpIGNvbnN0Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuY3BwCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0
LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBTaGFkb3dSb290OjpjbG9uZU5vZGUoYgogCiBTdHJpbmcg
U2hhZG93Um9vdDo6aW5uZXJIVE1MKCkgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlTWFya3Vw
KHRoaXMsIENoaWxkcmVuT25seSk7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cCgqdGhpcywgQ2hp
bGRyZW5Pbmx5KTsKIH0KIAogdm9pZCBTaGFkb3dSb290OjpzZXRJbm5lckhUTUwoY29uc3QgU3Ry
aW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1RleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCShyZXZpc2lv
biAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC03Niw2ICs3NiwxMiBAQCBpbmxpbmUgVGV4dCYgdG9UZXh0KE5vZGUmIG5vZGUpCiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFRleHQmPihub2RlKTsKIH0KIAoraW5saW5lIGNvbnN0IFRleHQmIHRv
VGV4dChjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG5vZGUuaXNUZXh0Tm9kZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
VGV4dCY+KG5vZGUpOworfQorCiBpbmxpbmUgVGV4dCogdG9UZXh0KE5vZGUqIG5vZGUpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oIW5vZGUgfHwgbm9kZS0+aXNUZXh0
Tm9kZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5OCw3ICsxMTk4
LDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaAogICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudDsKICAgICAvLyBUaGlzIHVzZWQgdG8gdXNlIGEg
dGVybmFyeSBmb3IgaW5pdGlhbGl6YXRpb24sIGJ1dCB0aGF0IGNvbmZ1c2VkIHNvbWUgdmVyc2lv
bnMgb2YgR0NDLCBzZWUgYnVnIDM3OTEyCiAgICAgaWYgKHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUg
IT0gZW5kT2ZQYXJhZ3JhcGhUb01vdmUpCi0gICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKCZkb2N1bWVudCgpLCBjcmVhdGVNYXJrdXAocmFuZ2UuZ2V0KCksIDAsIERv
Tm90QW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgdHJ1ZSksICIiKTsKKyAgICAgICAgZnJhZ21lbnQg
PSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQoKSwgY3JlYXRlTWFya3VwKCpyYW5n
ZSwgMCwgRG9Ob3RBbm5vdGF0ZUZvckludGVyY2hhbmdlLCB0cnVlKSwgIiIpOwogCiAgICAgLy8g
QSBub24tZW1wdHkgcGFyYWdyYXBoJ3Mgc3R5bGUgaXMgbW92ZWQgd2hlbiB3ZSBjb3B5IGFuZCBt
b3ZlIGl0LiAgV2UgZG9uJ3QgbW92ZSAKICAgICAvLyBhbnl0aGluZyBpZiB3ZSdyZSBnaXZlbiBh
biBlbXB0eSBwYXJhZ3JhcGgsIGJ1dCBhbiBlbXB0eSBwYXJhZ3JhcGggY2FuIGhhdmUgc3R5bGUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkocmV2aXNpb24g
MTU2OTg1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTAxLDcgKzUwMSw3IEBAIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRI
b3Jpem9udGFsUnVsZSgKIAogc3RhdGljIGJvb2wgZXhlY3V0ZUluc2VydEhUTUwoRnJhbWUmIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
Ci0gICAgcmV0dXJuIGV4ZWN1dGVJbnNlcnRGcmFnbWVudChmcmFtZSwgY3JlYXRlRnJhZ21lbnRG
cm9tTWFya3VwKGZyYW1lLmRvY3VtZW50KCksIHZhbHVlLCAiIikpOworICAgIHJldHVybiBleGVj
dXRlSW5zZXJ0RnJhZ21lbnQoZnJhbWUsIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUu
ZG9jdW1lbnQoKSwgdmFsdWUsICIiKSk7CiB9CiAKIHN0YXRpYyBib29sIGV4ZWN1dGVJbnNlcnRJ
bWFnZShGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSwgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuY3BwCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDI1ICsxMTMsMjUgQEAg
TWFya3VwQWNjdW11bGF0b3I6On5NYXJrdXBBY2N1bXVsYXRvcigpCiB7CiB9CiAKLVN0cmluZyBN
YXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoTm9kZSogdGFyZ2V0Tm9kZSwgTm9kZSog
bm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSBjaGlsZHJlbk9ubHkpCitTdHJpbmcgTWFya3VwQWNj
dW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRhcmdldE5vZGUsIE5vZGUqIG5vZGVUb1Nr
aXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5KQogewogICAgIHJldHVybiBzZXJpYWxpemVO
b2Rlcyh0YXJnZXROb2RlLCBub2RlVG9Ta2lwLCBjaGlsZHJlbk9ubHksIDApOwogfQogCi1TdHJp
bmcgTWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzKE5vZGUqIHRhcmdldE5vZGUsIE5v
ZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8UXVhbGlm
aWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwKQorU3RyaW5nIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJp
YWxpemVOb2RlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRyZW5P
bmx5IGNoaWxkcmVuT25seSwgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCkK
IHsKICAgICBzZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKHRhcmdldE5vZGUsIG5vZGVUb1Nr
aXAsIGNoaWxkcmVuT25seSwgMCwgdGFnTmFtZXNUb1NraXApOwogICAgIHJldHVybiBtX21hcmt1
cC50b1N0cmluZygpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rl
c1dpdGhOYW1lc3BhY2VzKE5vZGUqIHRhcmdldE5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGls
ZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBjb25zdCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzLCBWZWN0
b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwKQordm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBu
b2RlVG9Ta2lwLCBFQ2hpbGRyZW5Pbmx5IGNoaWxkcmVuT25seSwgY29uc3QgTmFtZXNwYWNlcyog
bmFtZXNwYWNlcywgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCkKIHsKLSAg
ICBpZiAodGFyZ2V0Tm9kZSA9PSBub2RlVG9Ta2lwKQorICAgIGlmICgmdGFyZ2V0Tm9kZSA9PSBu
b2RlVG9Ta2lwKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgaWYgKHRhZ05hbWVzVG9Ta2lw
KSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFnTmFtZXNUb1NraXAtPnNpemUo
KTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0Tm9kZS0+aGFzVGFnTmFtZSh0YWdOYW1l
c1RvU2tpcC0+YXQoaSkpKQorICAgICAgICAgICAgaWYgKHRhcmdldE5vZGUuaGFzVGFnTmFtZSh0
YWdOYW1lc1RvU2tpcC0+YXQoaSkpKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KQEAgLTE0OCwyOSArMTQ4LDI5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OnNl
cmlhbGl6ZU5vZGVzV2kKICAgICBpZiAoIWNoaWxkcmVuT25seSkKICAgICAgICAgYXBwZW5kU3Rh
cnRUYWcodGFyZ2V0Tm9kZSwgJm5hbWVzcGFjZUhhc2gpOwogCi0gICAgaWYgKCEodGFyZ2V0Tm9k
ZS0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFn
KHRhcmdldE5vZGUpKSkgeworICAgIGlmICghKHRhcmdldE5vZGUuZG9jdW1lbnQoKS5pc0hUTUxE
b2N1bWVudCgpICYmIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKHRhcmdldE5vZGUpKSkgewogI2lm
IEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0
Tm9kZS0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykgPyB0b0hUTUxUZW1wbGF0ZUVsZW1lbnQodGFy
Z2V0Tm9kZSktPmNvbnRlbnQoKS0+Zmlyc3RDaGlsZCgpIDogdGFyZ2V0Tm9kZS0+Zmlyc3RDaGls
ZCgpOworICAgICAgICBOb2RlKiBjdXJyZW50ID0gdGFyZ2V0Tm9kZS5oYXNUYWdOYW1lKHRlbXBs
YXRlVGFnKSA/IHRvSFRNTFRlbXBsYXRlRWxlbWVudCh0YXJnZXROb2RlKS5jb250ZW50KCktPmZp
cnN0Q2hpbGQoKSA6IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2Vsc2UKLSAgICAgICAgTm9k
ZSogY3VycmVudCA9IHRhcmdldE5vZGUtPmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgTm9kZSogY3Vy
cmVudCA9IHRhcmdldE5vZGUuZmlyc3RDaGlsZCgpOwogI2VuZGlmCiAgICAgICAgIGZvciAoIDsg
Y3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCi0gICAgICAgICAgICBz
ZXJpYWxpemVOb2Rlc1dpdGhOYW1lc3BhY2VzKGN1cnJlbnQsIG5vZGVUb1NraXAsIEluY2x1ZGVO
b2RlLCAmbmFtZXNwYWNlSGFzaCwgdGFnTmFtZXNUb1NraXApOworICAgICAgICAgICAgc2VyaWFs
aXplTm9kZXNXaXRoTmFtZXNwYWNlcygqY3VycmVudCwgbm9kZVRvU2tpcCwgSW5jbHVkZU5vZGUs
ICZuYW1lc3BhY2VIYXNoLCB0YWdOYW1lc1RvU2tpcCk7CiAgICAgfQogCiAgICAgaWYgKCFjaGls
ZHJlbk9ubHkpCiAgICAgICAgIGFwcGVuZEVuZFRhZyh0YXJnZXROb2RlKTsKIH0KIAotU3RyaW5n
IE1hcmt1cEFjY3VtdWxhdG9yOjpyZXNvbHZlVVJMSWZOZWVkZWQoY29uc3QgRWxlbWVudCogZWxl
bWVudCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpIGNvbnN0CitTdHJpbmcgTWFya3VwQWNjdW11
bGF0b3I6OnJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBT
dHJpbmcmIHVybFN0cmluZykgY29uc3QKIHsKICAgICBzd2l0Y2ggKG1fcmVzb2x2ZVVSTHNNZXRo
b2QpIHsKICAgICBjYXNlIFJlc29sdmVBbGxVUkxzOgotICAgICAgICByZXR1cm4gZWxlbWVudC0+
ZG9jdW1lbnQoKS5jb21wbGV0ZVVSTCh1cmxTdHJpbmcpLnN0cmluZygpOworICAgICAgICByZXR1
cm4gZWxlbWVudC5kb2N1bWVudCgpLmNvbXBsZXRlVVJMKHVybFN0cmluZykuc3RyaW5nKCk7CiAK
ICAgICBjYXNlIFJlc29sdmVOb25Mb2NhbFVSTHM6Ci0gICAgICAgIGlmICghZWxlbWVudC0+ZG9j
dW1lbnQoKS51cmwoKS5pc0xvY2FsRmlsZSgpKQotICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQt
PmRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsU3RyaW5nKS5zdHJpbmcoKTsKKyAgICAgICAgaWYg
KCFlbGVtZW50LmRvY3VtZW50KCkudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgIHJl
dHVybiBlbGVtZW50LmRvY3VtZW50KCkuY29tcGxldGVVUkwodXJsU3RyaW5nKS5zdHJpbmcoKTsK
ICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIERvTm90UmVzb2x2ZVVSTHM6CkBAIC0xODQsMTQg
KzE4NCwxNCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHJpbmcoY29uCiAgICAg
bV9tYXJrdXAuYXBwZW5kKHN0cmluZyk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0YXJ0VGFnKE5vZGUqIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyhjb25zdCBOb2RlJiBub2RlLCBOYW1lc3Bh
Y2VzKiBuYW1lc3BhY2VzKQogewogICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1fbWFya3VwLCBub2Rl
LCBuYW1lc3BhY2VzKTsKICAgICBpZiAobV9ub2RlcykKLSAgICAgICAgbV9ub2Rlcy0+YXBwZW5k
KG5vZGUpOworICAgICAgICBtX25vZGVzLT5hcHBlbmQoY29uc3RfY2FzdDxOb2RlKj4oJm5vZGUp
KTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKE5vZGUqIG5vZGUp
Cit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoY29uc3QgTm9kZSYgbm9kZSkK
IHsKICAgICBhcHBlbmRFbmRNYXJrdXAobV9tYXJrdXAsIG5vZGUpOwogfQpAQCAtMjE1LDEzICsy
MTUsMTMgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVgogICAgICAg
ICBkb2N1bWVudElzSFRNTCA/IEVudGl0eU1hc2tJbkhUTUxBdHRyaWJ1dGVWYWx1ZSA6IEVudGl0
eU1hc2tJbkF0dHJpYnV0ZVZhbHVlKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwgRWxlbWVudCosIE5hbWVzcGFjZXMq
KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdC
dWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKQogewogfQogCi12b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmli
dXRlKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFs
dWUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBB
dHRyaWJ1dGUmIGF0dHJpYnV0ZSkKIHsKLSAgICBBU1NFUlQoZWxlbWVudC0+aXNVUkxBdHRyaWJ1
dGUoYXR0cmlidXRlKSk7CisgICAgQVNTRVJUKGVsZW1lbnQuaXNVUkxBdHRyaWJ1dGUoYXR0cmli
dXRlKSk7CiAgICAgY29uc3QgU3RyaW5nIHJlc29sdmVkVVJMU3RyaW5nID0gcmVzb2x2ZVVSTElm
TmVlZGVkKGVsZW1lbnQsIGF0dHJpYnV0ZS52YWx1ZSgpKTsKICAgICBVQ2hhciBxdW90ZUNoYXIg
PSAnIic7CiAgICAgU3RyaW5nIHN0cmlwcGVkVVJMU3RyaW5nID0gcmVzb2x2ZWRVUkxTdHJpbmcu
c3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC0yNDUsMTYgKzI0NSwxNiBAQCB2b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBCiAgICAgcmVzdWx0LmFwcGVuZChxdW90ZUNoYXIpOwog
fQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRl
ciYgcmVzdWx0LCBjb25zdCBOb2RlKiBub2RlLCBjb25zdCBSYW5nZSogcmFuZ2UsIEVudGl0eU1h
c2sgZW50aXR5TWFzaykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVWYWx1ZShT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5n
ZSwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewotICAgIGNvbnN0IFN0cmluZyBzdHIgPSBub2Rl
LT5ub2RlVmFsdWUoKTsKKyAgICBjb25zdCBTdHJpbmcgc3RyID0gbm9kZS5ub2RlVmFsdWUoKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHIubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgc3RhcnQg
PSAwOwogCiAgICAgaWYgKHJhbmdlKSB7Ci0gICAgICAgIGlmIChub2RlID09IHJhbmdlLT5lbmRD
b250YWluZXIoKSkKKyAgICAgICAgaWYgKCZub2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkK
ICAgICAgICAgICAgIGxlbmd0aCA9IHJhbmdlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgaWYgKG5v
ZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpIHsKKyAgICAgICAgaWYgKCZub2RlID09IHJh
bmdlLT5zdGFydENvbnRhaW5lcigpKSB7CiAgICAgICAgICAgICBzdGFydCA9IHJhbmdlLT5zdGFy
dE9mZnNldCgpOwogICAgICAgICAgICAgbGVuZ3RoIC09IHN0YXJ0OwogICAgICAgICB9CkBAIC0y
NjMsMTUgKzI2MywxNSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlVmFsdWUo
CiAgICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKHJlc3VsdCwgc3RyLCBzdGFy
dCwgbGVuZ3RoLCBlbnRpdHlNYXNrKTsKIH0KIAotYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hv
dWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50KQorYm9vbCBNYXJr
dXBBY2N1bXVsYXRvcjo6c2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50JiBl
bGVtZW50KQogewogICAgIC8vIERvbid0IGFkZCBuYW1lc3BhY2UgYXR0cmlidXRlIGlmIGl0IGlz
IGFscmVhZHkgZGVmaW5lZCBmb3IgdGhpcyBlbGVtLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
cHJlZml4ID0gZWxlbWVudC0+cHJlZml4KCk7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVm
aXggPSBlbGVtZW50LnByZWZpeCgpOwogICAgIGlmIChwcmVmaXguaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZSh4bWxuc0F0b20pOworICAgICAgICByZXR1
cm4gIWVsZW1lbnQuaGFzQXR0cmlidXRlKHhtbG5zQXRvbSk7CiAKICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKFN0cmluZywgeG1sbnNXaXRoQ29sb24sIChBU0NJSUxpdGVyYWwoInhtbG5zOiIpKSk7
Ci0gICAgcmV0dXJuICFlbGVtZW50LT5oYXNBdHRyaWJ1dGUoeG1sbnNXaXRoQ29sb24gKyBwcmVm
aXgpOworICAgIHJldHVybiAhZWxlbWVudC5oYXNBdHRyaWJ1dGUoeG1sbnNXaXRoQ29sb24gKyBw
cmVmaXgpOwogfQogCiBib29sIE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRBZGROYW1lc3BhY2VB
dHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMmIG5hbWVzcGFj
ZXMpCkBAIC0zMzMsMjQgKzMzMywyNCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRO
YW1lc3BhY2UoCiAgICAgfQogfQogCi1FbnRpdHlNYXNrIE1hcmt1cEFjY3VtdWxhdG9yOjplbnRp
dHlNYXNrRm9yVGV4dChUZXh0KiB0ZXh0KSBjb25zdAorRW50aXR5TWFzayBNYXJrdXBBY2N1bXVs
YXRvcjo6ZW50aXR5TWFza0ZvclRleHQoY29uc3QgVGV4dCYgdGV4dCkgY29uc3QKIHsKICAgICBj
b25zdCBRdWFsaWZpZWROYW1lKiBwYXJlbnROYW1lID0gMDsKLSAgICBpZiAodGV4dC0+cGFyZW50
RWxlbWVudCgpKQotICAgICAgICBwYXJlbnROYW1lID0gJih0ZXh0LT5wYXJlbnRFbGVtZW50KCkp
LT50YWdRTmFtZSgpOworICAgIGlmICh0ZXh0LnBhcmVudEVsZW1lbnQoKSkKKyAgICAgICAgcGFy
ZW50TmFtZSA9ICYodGV4dC5wYXJlbnRFbGVtZW50KCkpLT50YWdRTmFtZSgpOwogCiAgICAgaWYg
KHBhcmVudE5hbWUgJiYgKCpwYXJlbnROYW1lID09IHNjcmlwdFRhZyB8fCAqcGFyZW50TmFtZSA9
PSBzdHlsZVRhZyB8fCAqcGFyZW50TmFtZSA9PSB4bXBUYWcpKQogICAgICAgICByZXR1cm4gRW50
aXR5TWFza0luQ0RBVEE7CiAKLSAgICByZXR1cm4gdGV4dC0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1
bWVudCgpID8gRW50aXR5TWFza0luSFRNTFBDREFUQSA6IEVudGl0eU1hc2tJblBDREFUQTsKKyAg
ICByZXR1cm4gdGV4dC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgPyBFbnRpdHlNYXNrSW5I
VE1MUENEQVRBIDogRW50aXR5TWFza0luUENEQVRBOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgVGV4dCogdGV4dCkKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25z
dCBUZXh0JiB0ZXh0KQogewogICAgIGFwcGVuZE5vZGVWYWx1ZShyZXN1bHQsIHRleHQsIG1fcmFu
Z2UsIGVudGl0eU1hc2tGb3JUZXh0KHRleHQpKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kQ29tbWVudChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgY29t
bWVudCkKK3N0YXRpYyB2b2lkIGFwcGVuZENvbW1lbnQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBj
b25zdCBTdHJpbmcmIGNvbW1lbnQpCiB7CiAgICAgLy8gRklYTUU6IENvbW1lbnQgY29udGVudCBp
cyBub3QgZXNjYXBlZCwgYnV0IFhNTFNlcmlhbGl6ZXIgKGFuZCBwb3NzaWJseSBvdGhlciBjYWxs
ZXJzKSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGl0IGluY2x1ZGVzICItLT4iLgogICAg
IHJlc3VsdC5hcHBlbmRMaXRlcmFsKCI8IS0tIik7CkBAIC0zNTgsMjEgKzM1OCwyMSBAQCB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDb21tZW50KFN0CiAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoIi0tPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRYTUxEZWNs
YXJhdGlvbihTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
K3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFhNTERlY2xhcmF0aW9uKFN0cmluZ0J1aWxk
ZXImIHJlc3VsdCwgY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmICghZG9jdW1l
bnQtPmhhc1hNTERlY2xhcmF0aW9uKCkpCisgICAgaWYgKCFkb2N1bWVudC5oYXNYTUxEZWNsYXJh
dGlvbigpKQogICAgICAgICByZXR1cm47CiAKICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiPD94
bWwgdmVyc2lvbj1cIiIpOwotICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnQtPnhtbFZlcnNpb24o
KSk7Ci0gICAgY29uc3QgU3RyaW5nJiBlbmNvZGluZyA9IGRvY3VtZW50LT54bWxFbmNvZGluZygp
OworICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnQueG1sVmVyc2lvbigpKTsKKyAgICBjb25zdCBT
dHJpbmcmIGVuY29kaW5nID0gZG9jdW1lbnQueG1sRW5jb2RpbmcoKTsKICAgICBpZiAoIWVuY29k
aW5nLmlzRW1wdHkoKSkgewogICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXCIgZW5jb2Rp
bmc9XCIiKTsKICAgICAgICAgcmVzdWx0LmFwcGVuZChlbmNvZGluZyk7CiAgICAgfQotICAgIGlm
IChkb2N1bWVudC0+eG1sU3RhbmRhbG9uZVN0YXR1cygpICE9IERvY3VtZW50OjpTdGFuZGFsb25l
VW5zcGVjaWZpZWQpIHsKKyAgICBpZiAoZG9jdW1lbnQueG1sU3RhbmRhbG9uZVN0YXR1cygpICE9
IERvY3VtZW50OjpTdGFuZGFsb25lVW5zcGVjaWZpZWQpIHsKICAgICAgICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoIlwiIHN0YW5kYWxvbmU9XCIiKTsKLSAgICAgICAgaWYgKGRvY3VtZW50LT54bWxT
dGFuZGFsb25lKCkpCisgICAgICAgIGlmIChkb2N1bWVudC54bWxTdGFuZGFsb25lKCkpCiAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgieWVzIik7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJubyIpOwpAQCAtMzgxLDMyICszODEsMzIgQEAg
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kWE1MRGVjbGFyYQogICAgIHJlc3VsdC5hcHBl
bmRMaXRlcmFsKCJcIj8+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERv
Y3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSogbikK
K3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVy
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSYgZG9jdW1lbnRUeXBlKQogewotICAgIGlmIChu
LT5uYW1lKCkuaXNFbXB0eSgpKQorICAgIGlmIChkb2N1bWVudFR5cGUubmFtZSgpLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIjwhRE9DVFlQ
RSAiKTsKLSAgICByZXN1bHQuYXBwZW5kKG4tPm5hbWUoKSk7Ci0gICAgaWYgKCFuLT5wdWJsaWNJ
ZCgpLmlzRW1wdHkoKSkgeworICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBlLm5hbWUoKSk7
CisgICAgaWYgKCFkb2N1bWVudFR5cGUucHVibGljSWQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAg
cmVzdWx0LmFwcGVuZExpdGVyYWwoIiBQVUJMSUMgXCIiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZChuLT5wdWJsaWNJZCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFR5cGUucHVi
bGljSWQoKSk7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKLSAgICAgICAgaWYgKCFuLT5z
eXN0ZW1JZCgpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoIWRvY3VtZW50VHlwZS5zeXN0ZW1J
ZCgpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOwogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5z
eXN0ZW1JZCgpKTsKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoZG9jdW1lbnRUeXBlLnN5c3Rl
bUlkKCkpOwogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnIicpOwogICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmICghbi0+c3lzdGVtSWQoKS5pc0VtcHR5KCkpIHsKKyAgICB9IGVsc2UgaWYgKCFk
b2N1bWVudFR5cGUuc3lzdGVtSWQoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgcmVzdWx0LmFwcGVu
ZExpdGVyYWwoIiBTWVNURU0gXCIiKTsKLSAgICAgICAgcmVzdWx0LmFwcGVuZChuLT5zeXN0ZW1J
ZCgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChkb2N1bWVudFR5cGUuc3lzdGVtSWQoKSk7CiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKICAgICB9Ci0gICAgaWYgKCFuLT5pbnRlcm5hbFN1
YnNldCgpLmlzRW1wdHkoKSkgeworICAgIGlmICghZG9jdW1lbnRUeXBlLmludGVybmFsU3Vic2V0
KCkuaXNFbXB0eSgpKSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnWycpOwotICAgICAgICByZXN1bHQuYXBwZW5kKG4tPmludGVybmFsU3Vic2V0
KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKGRvY3VtZW50VHlwZS5pbnRlcm5hbFN1YnNldCgp
KTsKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnXScpOwogICAgIH0KICAgICByZXN1bHQuYXBwZW5k
KCc+Jyk7CkBAIC00MjQsMTQgKzQyNCwxNCBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRQcm9jZXNzaW5nCiAgICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQogCi12b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgRWxlbWVudCog
ZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVt
ZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGFwcGVuZE9wZW5UYWcocmVzdWx0
LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKIAotICAgIGlmIChlbGVtZW50LT5oYXNBdHRyaWJ1dGVz
KCkpIHsKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gZWxlbWVudC0+YXR0cmlidXRlQ291bnQo
KTsKKyAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgdW5zaWduZWQg
bGVuZ3RoID0gZWxlbWVudC5hdHRyaWJ1dGVDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRl
KHJlc3VsdCwgZWxlbWVudCwgZWxlbWVudC0+YXR0cmlidXRlQXQoaSksIG5hbWVzcGFjZXMpOwor
ICAgICAgICAgICAgYXBwZW5kQXR0cmlidXRlKHJlc3VsdCwgZWxlbWVudCwgZWxlbWVudC5hdHRy
aWJ1dGVBdChpKSwgbmFtZXNwYWNlcyk7CiAgICAgfQogCiAgICAgLy8gR2l2ZSBhbiBvcHBvcnR1
bml0eSB0byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBvd24gYXR0cmlidXRlcy4KQEAgLTQ0MCwy
NyArNDQwLDI3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3QKICAg
ICBhcHBlbmRDbG9zZVRhZyhyZXN1bHQsIGVsZW1lbnQpOwogfQogCi12b2lkIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRPcGVuVGFnKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgRWxlbWVudCogZWxl
bWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50
LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIHJlc3VsdC5hcHBlbmQoJzwnKTsKLSAg
ICBpZiAoaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSAmJiBuYW1lc3BhY2VzICYmIGVsZW1l
bnQtPnByZWZpeCgpLmlzRW1wdHkoKSkgeworICAgIGlmIChpblhNTEZyYWdtZW50U2VyaWFsaXph
dGlvbigpICYmIG5hbWVzcGFjZXMgJiYgZWxlbWVudC5wcmVmaXgoKS5pc0VtcHR5KCkpIHsKICAg
ICAgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUNv
cmUvbmFtZXNwYWNlcy1hbGdvcml0aG1zLmh0bWwjbm9ybWFsaXplRG9jdW1lbnRBbGdvIHdlIG5v
dyBzaG91bGQgY3JlYXRlCiAgICAgICAgIC8vIGEgZGVmYXVsdCBuYW1lc3BhY2UgZGVjbGFyYXRp
b24gdG8gbWFrZSB0aGlzIG5hbWVzcGFjZSB3ZWxsLWZvcm1lZC4gSG93ZXZlciwgaHR0cDovL3d3
dy53My5vcmcvVFIveG1sLW5hbWVzMTEvI3htbFJlc2VydmVkIHN0YXRlcwogICAgICAgICAvLyAi
VGhlIHByZWZpeCB4bWwgTVVTVCBOT1QgYmUgZGVjbGFyZWQgYXMgdGhlIGRlZmF1bHQgbmFtZXNw
YWNlLiIsIHNvIHVzZSB0aGUgeG1sIHByZWZpeCBleHBsaWNpdGx5LgotICAgICAgICBpZiAoZWxl
bWVudC0+bmFtZXNwYWNlVVJJKCkgPT0gWE1MTmFtZXM6OnhtbE5hbWVzcGFjZVVSSSkgeworICAg
ICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkoKSA9PSBYTUxOYW1lczo6eG1sTmFtZXNwYWNl
VVJJKSB7CiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHhtbEF0b20pOwogICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgnOicpOwogICAgICAgICB9CiAgICAgfQotICAgIHJlc3VsdC5hcHBlbmQo
ZWxlbWVudC0+bm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKLSAgICBpZiAoKGluWE1MRnJhZ21l
bnRTZXJpYWxpemF0aW9uKCkgfHwgIWVsZW1lbnQtPmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQo
KSkgJiYgbmFtZXNwYWNlcyAmJiBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGVsZW1lbnQpKQot
ICAgICAgICBhcHBlbmROYW1lc3BhY2UocmVzdWx0LCBlbGVtZW50LT5wcmVmaXgoKSwgZWxlbWVu
dC0+bmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzLCBpblhNTEZyYWdtZW50U2VyaWFsaXphdGlv
bigpKTsKKyAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnQubm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgp
KTsKKyAgICBpZiAoKGluWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKCkgfHwgIWVsZW1lbnQuZG9j
dW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpKSAmJiBuYW1lc3BhY2VzICYmIHNob3VsZEFkZE5hbWVz
cGFjZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIGFwcGVuZE5hbWVzcGFjZShyZXN1bHQsIGVs
ZW1lbnQucHJlZml4KCksIGVsZW1lbnQubmFtZXNwYWNlVVJJKCksICpuYW1lc3BhY2VzLCBpblhN
TEZyYWdtZW50U2VyaWFsaXphdGlvbigpKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBFbGVtZW50KiBlbGVtZW50KQor
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgcmVz
dWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmIChzaG91bGRTZWxmQ2xvc2Uo
ZWxlbWVudCkpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAg
ICAgaWYgKGVsZW1lbnQuaXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnICcpOyAvLyBYSFRNTCAxLjAgPC0+IEhUTUwgY29tcGF0aWJpbGl0eS4KICAgICAgICAgcmVz
dWx0LmFwcGVuZCgnLycpOwogICAgIH0KQEAgLTQ5Miw5ICs0OTIsOSBAQCB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjpnZW5lcmF0ZVVuaXF1ZVByCiAgICAgfSB3aGlsZSAodHJ1ZSk7CiB9CiAKLXZv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZShTdHJpbmdCdWlsZGVyJiByZXN1
bHQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBOYW1lc3Bh
Y2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRl
KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXR0
cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7Ci0gICAgYm9vbCBk
b2N1bWVudElzSFRNTCA9IGVsZW1lbnQtPmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKTsKKyAg
ICBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50
KCk7CiAKICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CiAKQEAgLTUyMCw3ICs1MjAsNyBAQCB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGUoCiAKICAgICByZXN1bHQuYXBwZW5k
KCc9Jyk7CiAKLSAgICBpZiAoZWxlbWVudC0+aXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKSkKKyAg
ICBpZiAoZWxlbWVudC5pc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpKQogICAgICAgICBhcHBlbmRR
dW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShyZXN1bHQsIGVsZW1lbnQsIGF0dHJpYnV0ZSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoJyInKTsKQEAgLTU0MCwxNyArNTQwLDE3IEBA
IHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENEQVRBU2VjdGkKICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgiXV0+Iik7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0
YXJ0TWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSogbm9kZSwgTmFtZXNw
YWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFy
a3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3QgTm9kZSYgbm9kZSwgTmFtZXNwYWNlcyog
bmFtZXNwYWNlcykKIHsKICAgICBpZiAobmFtZXNwYWNlcykKICAgICAgICAgbmFtZXNwYWNlcy0+
Y2hlY2tDb25zaXN0ZW5jeSgpOwogCi0gICAgc3dpdGNoIChub2RlLT5ub2RlVHlwZSgpKSB7Cisg
ICAgc3dpdGNoIChub2RlLm5vZGVUeXBlKCkpIHsKICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToK
LSAgICAgICAgYXBwZW5kVGV4dChyZXN1bHQsIHRvVGV4dChjb25zdF9jYXN0PE5vZGUqPihub2Rl
KSkpOworICAgICAgICBhcHBlbmRUZXh0KHJlc3VsdCwgdG9UZXh0KG5vZGUpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBOb2RlOjpDT01NRU5UX05PREU6Ci0gICAgICAgIGFwcGVuZENvbW1l
bnQocmVzdWx0LCBzdGF0aWNfY2FzdDxjb25zdCBDb21tZW50Kj4obm9kZSktPmRhdGEoKSk7Cisg
ICAgICAgIGFwcGVuZENvbW1lbnQocmVzdWx0LCB0b0NvbW1lbnQobm9kZSkuZGF0YSgpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9OT0RFOgogICAgICAgICBhcHBl
bmRYTUxEZWNsYXJhdGlvbihyZXN1bHQsIHRvRG9jdW1lbnQobm9kZSkpOwpAQCAtNTU4LDE2ICs1
NTgsMTYgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdQogICAgIGNh
c2UgTm9kZTo6RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBOb2RlOjpET0NVTUVOVF9UWVBFX05PREU6Ci0gICAgICAgIGFwcGVuZERvY3VtZW50VHlwZShy
ZXN1bHQsIHN0YXRpY19jYXN0PGNvbnN0IERvY3VtZW50VHlwZSo+KG5vZGUpKTsKKyAgICAgICAg
YXBwZW5kRG9jdW1lbnRUeXBlKHJlc3VsdCwgdG9Eb2N1bWVudFR5cGUobm9kZSkpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIE5vZGU6OlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKLSAg
ICAgICAgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKHJlc3VsdCwgc3RhdGljX2Nhc3Q8Y29u
c3QgUHJvY2Vzc2luZ0luc3RydWN0aW9uKj4obm9kZSktPnRhcmdldCgpLCBzdGF0aWNfY2FzdDxj
b25zdCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24qPihub2RlKS0+ZGF0YSgpKTsKKyAgICAgICAgYXBw
ZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKHJlc3VsdCwgdG9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24o
bm9kZSkudGFyZ2V0KCksIHRvUHJvY2Vzc2luZ0luc3RydWN0aW9uKG5vZGUpLmRhdGEoKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6RUxFTUVOVF9OT0RFOgotICAgICAgICBhcHBl
bmRFbGVtZW50KHJlc3VsdCwgdG9FbGVtZW50KGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpKSwgbmFt
ZXNwYWNlcyk7CisgICAgICAgIGFwcGVuZEVsZW1lbnQocmVzdWx0LCB0b0VsZW1lbnQobm9kZSks
IG5hbWVzcGFjZXMpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NFQ1RJ
T05fTk9ERToKLSAgICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ0RBVEFTZWN0aW9uKj4obm9kZSktPmRhdGEoKSk7CisgICAgICAgIGFwcGVuZENEQVRB
U2VjdGlvbihyZXN1bHQsIHRvQ0RBVEFTZWN0aW9uKG5vZGUpLmRhdGEoKSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgTm9kZTo6QVRUUklCVVRFX05PREU6CiAgICAgY2FzZSBOb2RlOjpFTlRJ
VFlfTk9ERToKQEAgLTU4NCwzNyArNTg0LDM3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0YXJ0TWFya3UKIC8vIDIuIEVsZW1lbnRzIHcvIGNoaWxkcmVuIG5ldmVyIHNlbGYtY2xv
c2UgYmVjYXVzZSB0aGV5IHVzZSBhIHNlcGFyYXRlIGVuZCB0YWcuCiAvLyAzLiBIVE1MIGVsZW1l
bnRzIHdoaWNoIGRvIG5vdCBoYXZlIGEgImZvcmJpZGRlbiIgZW5kIHRhZyB3aWxsIGNsb3NlIHdp
dGggYSBzZXBhcmF0ZSBlbmQgdGFnLgogLy8gNC4gT3RoZXIgZWxlbWVudHMgc2VsZi1jbG9zZS4K
LWJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKiBub2Rl
KQorYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6c2hvdWxkU2VsZkNsb3NlKGNvbnN0IE5vZGUmIG5v
ZGUpCiB7Ci0gICAgaWYgKCFpblhNTEZyYWdtZW50U2VyaWFsaXphdGlvbigpICYmIG5vZGUtPmRv
Y3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkKKyAgICBpZiAoIWluWE1MRnJhZ21lbnRTZXJpYWxp
emF0aW9uKCkgJiYgbm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBpZiAobm9kZS0+aGFzQ2hpbGROb2RlcygpKQorICAgIGlmIChub2Rl
Lmhhc0NoaWxkTm9kZXMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChub2RlLT5p
c0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKG5vZGUpKQorICAgIGlm
IChub2RlLmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudENhbm5vdEhhdmVFbmRUYWcobm9kZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBNYXJr
dXBBY2N1bXVsYXRvcjo6ZWxlbWVudENhbm5vdEhhdmVFbmRUYWcoY29uc3QgTm9kZSogbm9kZSkK
K2Jvb2wgTWFya3VwQWNjdW11bGF0b3I6OmVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0IE5v
ZGUmIG5vZGUpCiB7Ci0gICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgaWYgKCFu
b2RlLmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gRklY
TUU6IGllRm9yYmlkc0luc2VydEhUTUwgbWF5IG5vdCBiZSB0aGUgcmlnaHQgZnVuY3Rpb24gdG8g
Y2FsbCBoZXJlCiAgICAgLy8gaWVGb3JiaWRzSW5zZXJ0SFRNTCBpcyB1c2VkIHRvIGRpc2FsbG93
IHNldHRpbmcgaW5uZXJIVE1ML291dGVySFRNTAogICAgIC8vIG9yIGNyZWF0ZUNvbnRleHR1YWxG
cmFnbWVudC4gIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFsaWduIHdpdGgKICAgICAvLyB3aGlj
aCBlbGVtZW50cyBzaG91bGQgYmUgc2VyaWFsaXplZCB3L28gZW5kIHRhZ3MuCi0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSktPmllRm9yYmlkc0luc2VydEhU
TUwoKTsKKyAgICByZXR1cm4gdG9IVE1MRWxlbWVudChub2RlKS5pZUZvcmJpZHNJbnNlcnRIVE1M
KCk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChTdHJpbmdC
dWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUqIG5vZGUpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbmRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBOb2RlJiBub2Rl
KQogewotICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpIHx8IHNob3VsZFNlbGZDbG9zZShu
b2RlKSB8fCAoIW5vZGUtPmhhc0NoaWxkTm9kZXMoKSAmJiBlbGVtZW50Q2Fubm90SGF2ZUVuZFRh
Zyhub2RlKSkpCisgICAgaWYgKCFub2RlLmlzRWxlbWVudE5vZGUoKSB8fCBzaG91bGRTZWxmQ2xv
c2Uobm9kZSkgfHwgKCFub2RlLmhhc0NoaWxkTm9kZXMoKSAmJiBlbGVtZW50Q2Fubm90SGF2ZUVu
ZFRhZyhub2RlKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIHJlc3VsdC5hcHBlbmQoJzwnKTsK
ICAgICByZXN1bHQuYXBwZW5kKCcvJyk7Ci0gICAgcmVzdWx0LmFwcGVuZCh0b0VsZW1lbnQobm9k
ZSktPm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7CisgICAgcmVzdWx0LmFwcGVuZCh0b0VsZW1l
bnQobm9kZSkubm9kZU5hbWVQcmVzZXJ2aW5nQ2FzZSgpKTsKICAgICByZXN1bHQuYXBwZW5kKCc+
Jyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9y
LmgJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNDggKzY5LDUzIEBAIHB1YmxpYzoKICAg
ICBNYXJrdXBBY2N1bXVsYXRvcihWZWN0b3I8Tm9kZSo+KiwgRUFic29sdXRlVVJMcywgY29uc3Qg
UmFuZ2UqID0gMCwgRUZyYWdtZW50U2VyaWFsaXphdGlvbiA9IEhUTUxGcmFnbWVudFNlcmlhbGl6
YXRpb24pOwogICAgIHZpcnR1YWwgfk1hcmt1cEFjY3VtdWxhdG9yKCk7CiAKLSAgICBTdHJpbmcg
c2VyaWFsaXplTm9kZXMoTm9kZSogdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxk
cmVuT25seSk7Ci0gICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUqIHRhcmdldE5vZGUsIE5v
ZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHksIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFn
TmFtZXNUb1NraXApOwotCi0gICAgc3RhdGljIHZvaWQgYXBwZW5kQ29tbWVudChTdHJpbmdCdWls
ZGVyJiwgY29uc3QgU3RyaW5nJik7CisgICAgU3RyaW5nIHNlcmlhbGl6ZU5vZGVzKE5vZGUmIHRh
cmdldE5vZGUsIE5vZGUqIG5vZGVUb1NraXAsIEVDaGlsZHJlbk9ubHkpOworICAgIFN0cmluZyBz
ZXJpYWxpemVOb2RlcyhOb2RlJiB0YXJnZXROb2RlLCBOb2RlKiBub2RlVG9Ta2lwLCBFQ2hpbGRy
ZW5Pbmx5LCBWZWN0b3I8UXVhbGlmaWVkTmFtZT4qIHRhZ05hbWVzVG9Ta2lwKTsKIAogICAgIHN0
YXRpYyB2b2lkIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRpdGllcyhTdHJpbmdCdWlsZGVy
JiwgY29uc3QgU3RyaW5nJiwgdW5zaWduZWQsIHVuc2lnbmVkLCBFbnRpdHlNYXNrKTsKIAogcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7Ci0g
ICAgdm9pZCBhcHBlbmRTdGFydFRhZyhOb2RlKiwgTmFtZXNwYWNlcyogPSAwKTsKLSAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6ZV90IHRvdGFsTGVu
Z3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbWFya3VwLmxlbmd0aCgpOyB9CisKICAgICB2b2lkIGNvbmNhdGVuYXRlTWFya3Vw
KFN0cmluZ0J1aWxkZXImKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3Qg
U3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRhZyhjb25zdCBOb2RlJik7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYsIGNv
bnN0IEVsZW1lbnQmLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQo
U3RyaW5nQnVpbGRlciYsIGNvbnN0IFRleHQmKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxl
bWVudChTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKworICAg
IHZvaWQgYXBwZW5kU3RhcnRUYWcoY29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqID0gMCk7CisKKyAg
ICB2b2lkIGFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1l
c3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWlsZGVyJiwgY29uc3Qg
RWxlbWVudCYpOworCisgICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZEVuZE1hcmt1cChTdHJp
bmdCdWlsZGVyJiwgY29uc3QgTm9kZSYpOworCiAgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1
ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5nJiwgYm9vbCk7Ci0gICAgdmlydHVhbCB2b2lk
IGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYsIEVsZW1lbnQqLCBOYW1lc3Bh
Y2VzKik7Ci0gICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IE5v
ZGUqLCBjb25zdCBSYW5nZSosIEVudGl0eU1hc2spOwotICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNw
YWNlRWxlbWVudChjb25zdCBFbGVtZW50Kik7Ci0gICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VB
dHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyYpOworICAgIHZvaWQgYXBwZW5k
Tm9kZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJiwgY29uc3QgUmFuZ2UqLCBFbnRp
dHlNYXNrKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShTdHJpbmdCdWlsZGVyJiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBO
YW1lc3BhY2VzJiwgYm9vbCBhbGxvd0VtcHR5RGVmYXVsdE5TID0gZmFsc2UpOwotICAgIEVudGl0
eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCopIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImLCBUZXh0Kik7Ci0gICAgdm9pZCBhcHBlbmRYTUxEZWNs
YXJhdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgRG9jdW1lbnQqKTsKLSAgICB2b2lkIGFwcGVu
ZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRG9jdW1lbnRUeXBlKik7CisgICAg
dm9pZCBhcHBlbmRYTUxEZWNsYXJhdGlvbihTdHJpbmdCdWlsZGVyJiwgY29uc3QgRG9jdW1lbnQm
KTsKKyAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgRG9j
dW1lbnRUeXBlJik7CiAgICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oU3RyaW5n
QnVpbGRlciYsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGRhdGEpOwotICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFN0cmluZ0J1aWxkZXIm
LCBFbGVtZW50Kik7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYsIEVs
ZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmRB
dHRyaWJ1dGUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBjb25zdCBBdHRyaWJ1dGUm
LCBOYW1lc3BhY2VzKik7CiAgICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oU3RyaW5nQnVpbGRl
ciYsIGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVp
bGRlciYsIGNvbnN0IE5vZGUqLCBOYW1lc3BhY2VzKik7Ci0gICAgYm9vbCBzaG91bGRTZWxmQ2xv
c2UoY29uc3QgTm9kZSopOwotICAgIGJvb2wgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcoY29uc3Qg
Tm9kZSopOwotICAgIHZvaWQgYXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImLCBjb25zdCBO
b2RlKik7CisKKyAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVu
dCYpOworICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZSYsIE5hbWVzcGFjZXMmKTsKKyAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlJik7
CisgICAgYm9vbCBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBOb2RlJik7CisgICAgRW50
aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChjb25zdCBUZXh0JikgY29uc3Q7CiAKICAgICBWZWN0
b3I8Tm9kZSo+KiBjb25zdCBtX25vZGVzOwogICAgIGNvbnN0IFJhbmdlKiBjb25zdCBtX3Jhbmdl
OwogCiBwcml2YXRlOgotICAgIFN0cmluZyByZXNvbHZlVVJMSWZOZWVkZWQoY29uc3QgRWxlbWVu
dCosIGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmli
dXRlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBBdHRyaWJ1dGUm
KTsKLSAgICB2b2lkIHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoTm9kZSogdGFyZ2V0Tm9k
ZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25seSwgY29uc3QgTmFtZXNwYWNlcyosIFZl
Y3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1NraXApOworICAgIFN0cmluZyByZXNvbHZl
VVJMSWZOZWVkZWQoY29uc3QgRWxlbWVudCYsIGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZv
aWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVs
ZW1lbnQmLCBjb25zdCBBdHRyaWJ1dGUmKTsKKyAgICB2b2lkIHNlcmlhbGl6ZU5vZGVzV2l0aE5h
bWVzcGFjZXMoTm9kZSYgdGFyZ2V0Tm9kZSwgTm9kZSogbm9kZVRvU2tpcCwgRUNoaWxkcmVuT25s
eSwgY29uc3QgTmFtZXNwYWNlcyosIFZlY3RvcjxRdWFsaWZpZWROYW1lPiogdGFnTmFtZXNUb1Nr
aXApOwogICAgIGJvb2wgaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2ZyYWdtZW50U2VyaWFsaXphdGlvbiA9PSBYTUxGcmFnbWVudFNlcmlhbGl6YXRpb247IH0K
ICAgICB2b2lkIGdlbmVyYXRlVW5pcXVlUHJlZml4KFF1YWxpZmllZE5hbWUmLCBjb25zdCBOYW1l
c3BhY2VzJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJKHJldmlzaW9uIDE1
Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDM0ICsxMTcsNDggQEAgc3RhdGljIHZvaWQgY29tcGxldGVVUkxzKERvY3VtZW50
RnJhZ21lbgogICAgICAgICBjaGFuZ2VzW2ldLmFwcGx5KCk7CiB9CiAgICAgCi1jbGFzcyBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBNYXJrdXBBY2N1bXVsYXRvciB7CitjbGFzcyBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvciBmaW5hbCA6IHB1YmxpYyBNYXJrdXBBY2N1bXVsYXRvciB7
CiBwdWJsaWM6CiAgICAgZW51bSBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgeyBEb2VzRnVsbHlTZWxl
Y3ROb2RlLCBEb2VzTm90RnVsbHlTZWxlY3ROb2RlIH07CiAKICAgICBTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcihWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcywgRUFubm90YXRlRm9y
SW50ZXJjaGFuZ2UsIGNvbnN0IFJhbmdlKiwgTm9kZSogaGlnaGVzdE5vZGVUb0JlU2VyaWFsaXpl
ZCA9IDApOworCiAgICAgTm9kZSogc2VyaWFsaXplTm9kZXMoTm9kZSogc3RhcnROb2RlLCBOb2Rl
KiBwYXN0RW5kKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYg
cykgeyByZXR1cm4gTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZyhzKTsgfQotICAgIHZv
aWQgd3JhcFdpdGhOb2RlKE5vZGUqLCBib29sIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgPSBmYWxz
ZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlID0gRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7Ci0gICAgdm9p
ZCB3cmFwV2l0aFN0eWxlTm9kZShTdHlsZVByb3BlcnR5U2V0KiwgRG9jdW1lbnQqLCBib29sIGlz
QmxvY2sgPSBmYWxzZSk7CisgICAgdm9pZCB3cmFwV2l0aE5vZGUoTm9kZSYsIGJvb2wgY29udmVy
dEJsb2Nrc1RvSW5saW5lcyA9IGZhbHNlLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgPSBEb2VzRnVs
bHlTZWxlY3ROb2RlKTsKKyAgICB2b2lkIHdyYXBXaXRoU3R5bGVOb2RlKFN0eWxlUHJvcGVydHlT
ZXQqLCBEb2N1bWVudCYsIGJvb2wgaXNCbG9jayA9IGZhbHNlKTsKICAgICBTdHJpbmcgdGFrZVJl
c3VsdHMoKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJiBz
dHJpbmcpIG92ZXJyaWRlCisgICAgeworICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
U3RyaW5nKHN0cmluZyk7CisgICAgfQorCiBwcml2YXRlOgotICAgIHZvaWQgYXBwZW5kU3R5bGVO
b2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiwgU3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50Kiwg
Ym9vbCBpc0Jsb2NrID0gZmFsc2UpOworICAgIHZvaWQgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhT
dHJpbmdCdWlsZGVyJiwgU3R5bGVQcm9wZXJ0eVNldCosIERvY3VtZW50JiwgYm9vbCBpc0Jsb2Nr
ID0gZmFsc2UpOwogICAgIGNvbnN0IFN0cmluZyYgc3R5bGVOb2RlQ2xvc2VUYWcoYm9vbCBpc0Js
b2NrID0gZmFsc2UpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXIm
IG91dCwgVGV4dCopOwotICAgIFN0cmluZyByZW5kZXJlZFRleHQoY29uc3QgTm9kZSosIGNvbnN0
IFJhbmdlKik7Ci0gICAgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUmFuZ2UoY29uc3QgTm9kZSosIGNv
bnN0IFJhbmdlKik7Ci0gICAgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwg
RWxlbWVudCosIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsK
LSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVt
ZW50LCBOYW1lc3BhY2VzKikgeyBhcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgZmFsc2UsIERv
ZXNGdWxseVNlbGVjdE5vZGUpOyB9CisKKyAgICBTdHJpbmcgcmVuZGVyZWRUZXh0KGNvbnN0IE5v
ZGUmLCBjb25zdCBSYW5nZSopOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZUZvclJhbmdlKGNvbnN0
IE5vZGUmLCBjb25zdCBSYW5nZSopOworCisgICAgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1
aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VG
dWxseVNlbGVjdHNOb2RlKTsKKworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1
aWxkZXImIG91dCwgY29uc3QgVGV4dCYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTmFt
ZXNwYWNlcyopIG92ZXJyaWRlCisgICAgeworICAgICAgICBhcHBlbmRFbGVtZW50KG91dCwgZWxl
bWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOworICAgIH0KIAogICAgIGVudW0gTm9k
ZVRyYXZlcnNhbE1vZGUgeyBFbWl0U3RyaW5nLCBEb05vdEVtaXRTdHJpbmcgfTsKICAgICBOb2Rl
KiB0cmF2ZXJzZU5vZGVzRm9yU2VyaWFsaXphdGlvbihOb2RlKiBzdGFydE5vZGUsIE5vZGUqIHBh
c3RFbmQsIE5vZGVUcmF2ZXJzYWxNb2RlKTsKIAotICAgIGJvb2wgc2hvdWxkQW5ub3RhdGUoKSB7
IHJldHVybiBtX3Nob3VsZEFubm90YXRlID09IEFubm90YXRlRm9ySW50ZXJjaGFuZ2U7IH0KLSAg
ICBib29sIHNob3VsZEFwcGx5V3JhcHBpbmdTdHlsZShOb2RlKiBub2RlKSBjb25zdAorICAgIGJv
b2wgc2hvdWxkQW5ub3RhdGUoKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGlnaGVzdE5vZGVU
b0JlU2VyaWFsaXplZCAmJiBtX2hpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQtPnBhcmVudE5vZGUo
KSA9PSBub2RlLT5wYXJlbnROb2RlKCkKLSAgICAgICAgICAgICYmIG1fd3JhcHBpbmdTdHlsZSAm
JiBtX3dyYXBwaW5nU3R5bGUtPnN0eWxlKCk7CisgICAgICAgIHJldHVybiBtX3Nob3VsZEFubm90
YXRlID09IEFubm90YXRlRm9ySW50ZXJjaGFuZ2U7CisgICAgfQorCisgICAgYm9vbCBzaG91bGRB
cHBseVdyYXBwaW5nU3R5bGUoY29uc3QgTm9kZSYgbm9kZSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2hpZ2hlc3ROb2RlVG9CZVNlcmlhbGl6ZWQgJiYgbV9oaWdoZXN0Tm9kZVRvQmVT
ZXJpYWxpemVkLT5wYXJlbnROb2RlKCkgPT0gbm9kZS5wYXJlbnROb2RlKCkgJiYgbV93cmFwcGlu
Z1N0eWxlICYmIG1fd3JhcHBpbmdTdHlsZS0+c3R5bGUoKTsKICAgICB9CiAKICAgICBWZWN0b3I8
U3RyaW5nPiBtX3JldmVyc2VkUHJlY2VkaW5nTWFya3VwOwpAQCAtMTYxLDIwICsxNzUsMjAgQEAg
aW5saW5lIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpTdHlsZWRNYQogewogfQogCi12b2lkIFN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aE5vZGUoTm9kZSogbm9kZSwgYm9vbCBjb252
ZXJ0QmxvY2tzVG9JbmxpbmVzLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVj
dHNOb2RlKQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKE5vZGUm
IG5vZGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgUmFuZ2VGdWxseVNlbGVjdHNOb2Rl
IHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKICAgICBTdHJpbmdCdWlsZGVyIG1hcmt1cDsKLSAg
ICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICBhcHBlbmRFbGVtZW50KG1hcmt1
cCwgdG9FbGVtZW50KG5vZGUpLCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzICYmIGlzQmxvY2soY29u
c3RfY2FzdDxOb2RlKj4obm9kZSkpLCByYW5nZUZ1bGx5U2VsZWN0c05vZGUpOworICAgIGlmIChu
b2RlLmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgYXBwZW5kRWxlbWVudChtYXJrdXAsIHRvRWxl
bWVudChub2RlKSwgY29udmVydEJsb2Nrc1RvSW5saW5lcyAmJiBpc0Jsb2NrKCZub2RlKSwgcmFu
Z2VGdWxseVNlbGVjdHNOb2RlKTsKICAgICBlbHNlCiAgICAgICAgIGFwcGVuZFN0YXJ0TWFya3Vw
KG1hcmt1cCwgbm9kZSwgMCk7CiAgICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQo
bWFya3VwLnRvU3RyaW5nKCkpOwogICAgIGFwcGVuZEVuZFRhZyhub2RlKTsKICAgICBpZiAobV9u
b2RlcykKLSAgICAgICAgbV9ub2Rlcy0+YXBwZW5kKG5vZGUpOworICAgICAgICBtX25vZGVzLT5h
cHBlbmQoJm5vZGUpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0
aFN0eWxlTm9kZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBi
b29sIGlzQmxvY2spCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0eWxl
Tm9kZShTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBib29sIGlz
QmxvY2spCiB7CiAgICAgU3RyaW5nQnVpbGRlciBvcGVuVGFnOwogICAgIGFwcGVuZFN0eWxlTm9k
ZU9wZW5UYWcob3BlblRhZywgc3R5bGUsIGRvY3VtZW50LCBpc0Jsb2NrKTsKQEAgLTE4Miw3ICsx
OTYsNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3cmFwV2l0aFN0CiAgICAgYXBw
ZW5kU3RyaW5nKHN0eWxlTm9kZUNsb3NlVGFnKGlzQmxvY2spKTsKIH0KIAotdm9pZCBTdHlsZWRN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3R5bGVOb2RlT3BlblRhZyhTdHJpbmdCdWlsZGVyJiBv
dXQsIFN0eWxlUHJvcGVydHlTZXQqIHN0eWxlLCBEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgaXNC
bG9jaykKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0eWxlTm9kZU9wZW5U
YWcoU3RyaW5nQnVpbGRlciYgb3V0LCBTdHlsZVByb3BlcnR5U2V0KiBzdHlsZSwgRG9jdW1lbnQm
IGRvY3VtZW50LCBib29sIGlzQmxvY2spCiB7CiAgICAgLy8gd3JhcHBpbmdTdHlsZUZvclNlcmlh
bGl6YXRpb24gc2hvdWxkIGhhdmUgcmVtb3ZlZCAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4t
ZWZmZWN0CiAgICAgQVNTRVJUKHByb3BlcnR5TWlzc2luZ09yRXF1YWxUb05vbmUoc3R5bGUsIENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpKTsKQEAgLTE5MCw3ICsyMDQs
NyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdHlsCiAgICAgICAgIG91
dC5hcHBlbmRMaXRlcmFsKCI8ZGl2IHN0eWxlPVwiIik7CiAgICAgZWxzZQogICAgICAgICBvdXQu
YXBwZW5kTGl0ZXJhbCgiPHNwYW4gc3R5bGU9XCIiKTsKLSAgICBhcHBlbmRBdHRyaWJ1dGVWYWx1
ZShvdXQsIHN0eWxlLT5hc1RleHQoKSwgZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpOworICAg
IGFwcGVuZEF0dHJpYnV0ZVZhbHVlKG91dCwgc3R5bGUtPmFzVGV4dCgpLCBkb2N1bWVudC5pc0hU
TUxEb2N1bWVudCgpKTsKICAgICBvdXQuYXBwZW5kTGl0ZXJhbCgiXCI+Iik7CiB9CiAKQEAgLTIx
NSw5ICsyMjksOSBAQCBTdHJpbmcgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRha2VSZXN1CiAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpLnJlcGxhY2VXaXRoTGl0ZXJhbCgnXDAnLCAiIik7
CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoU3RyaW5nQnVp
bGRlciYgb3V0LCBUZXh0KiB0ZXh0KQordm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFRleHQmIHRleHQpCiB7ICAgIAotICAg
IGNvbnN0IGJvb2wgcGFyZW50SXNUZXh0YXJlYSA9IHRleHQtPnBhcmVudEVsZW1lbnQoKSAmJiBp
c0hUTUxUZXh0QXJlYUVsZW1lbnQodGV4dC0+cGFyZW50RWxlbWVudCgpKTsKKyAgICBjb25zdCBi
b29sIHBhcmVudElzVGV4dGFyZWEgPSB0ZXh0LnBhcmVudEVsZW1lbnQoKSAmJiBpc0hUTUxUZXh0
QXJlYUVsZW1lbnQodGV4dC5wYXJlbnRFbGVtZW50KCkpOwogICAgIGNvbnN0IGJvb2wgd3JhcHBp
bmdTcGFuID0gc2hvdWxkQXBwbHlXcmFwcGluZ1N0eWxlKHRleHQpICYmICFwYXJlbnRJc1RleHRh
cmVhOwogICAgIGlmICh3cmFwcGluZ1NwYW4pIHsKICAgICAgICAgUmVmUHRyPEVkaXRpbmdTdHls
ZT4gd3JhcHBpbmdTdHlsZSA9IG1fd3JhcHBpbmdTdHlsZS0+Y29weSgpOwpAQCAtMjI3LDY1ICsy
NDEsNjUgQEAgdm9pZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dAogICAgICAg
ICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgaW5jbHVkZWQgaW4gZm9yY2VJbmxpbmU/CiAgICAg
ICAgIHdyYXBwaW5nU3R5bGUtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RmxvYXQs
IENTU1ZhbHVlTm9uZSk7CiAKLSAgICAgICAgYXBwZW5kU3R5bGVOb2RlT3BlblRhZyhvdXQsIHdy
YXBwaW5nU3R5bGUtPnN0eWxlKCksICZ0ZXh0LT5kb2N1bWVudCgpKTsKKyAgICAgICAgYXBwZW5k
U3R5bGVOb2RlT3BlblRhZyhvdXQsIHdyYXBwaW5nU3R5bGUtPnN0eWxlKCksIHRleHQuZG9jdW1l
bnQoKSk7CiAgICAgfQogCiAgICAgaWYgKCFzaG91bGRBbm5vdGF0ZSgpIHx8IHBhcmVudElzVGV4
dGFyZWEpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7
CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVuY2xv
c2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25Jbk5vZGUodGV4dCksIHNlbGVjdFRhZyk7Cisg
ICAgICAgIGNvbnN0IGJvb2wgdXNlUmVuZGVyZWRUZXh0ID0gIWVuY2xvc2luZ05vZGVXaXRoVGFn
KGZpcnN0UG9zaXRpb25Jbk5vZGUoY29uc3RfY2FzdDxUZXh0Kj4oJnRleHQpKSwgc2VsZWN0VGFn
KTsKICAgICAgICAgU3RyaW5nIGNvbnRlbnQgPSB1c2VSZW5kZXJlZFRleHQgPyByZW5kZXJlZFRl
eHQodGV4dCwgbV9yYW5nZSkgOiBzdHJpbmdWYWx1ZUZvclJhbmdlKHRleHQsIG1fcmFuZ2UpOwog
ICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1ZmZlcjsKICAgICAgICAgYXBwZW5kQ2hhcmFjdGVyc1Jl
cGxhY2luZ0VudGl0aWVzKGJ1ZmZlciwgY29udGVudCwgMCwgY29udGVudC5sZW5ndGgoKSwgRW50
aXR5TWFza0luUENEQVRBKTsKLSAgICAgICAgb3V0LmFwcGVuZChjb252ZXJ0SFRNTFRleHRUb0lu
dGVyY2hhbmdlRm9ybWF0KGJ1ZmZlci50b1N0cmluZygpLCB0ZXh0KSk7CisgICAgICAgIG91dC5h
cHBlbmQoY29udmVydEhUTUxUZXh0VG9JbnRlcmNoYW5nZUZvcm1hdChidWZmZXIudG9TdHJpbmco
KSwgJnRleHQpKTsKICAgICB9CiAKICAgICBpZiAod3JhcHBpbmdTcGFuKQogICAgICAgICBvdXQu
YXBwZW5kKHN0eWxlTm9kZUNsb3NlVGFnKCkpOwogfQogICAgIAotU3RyaW5nIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjpyZW5kZXJlZFRleHQoY29uc3QgTm9kZSogbm9kZSwgY29uc3QgUmFuZ2Uq
IHJhbmdlKQorU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpyZW5kZXJlZFRleHQoY29u
c3QgTm9kZSYgbm9kZSwgY29uc3QgUmFuZ2UqIHJhbmdlKQogewotICAgIGlmICghbm9kZS0+aXNU
ZXh0Tm9kZSgpKQorICAgIGlmICghbm9kZS5pc1RleHROb2RlKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIGNvbnN0IFRleHQqIHRleHROb2RlID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
VGV4dCo+KG5vZGUpOworICAgIGNvbnN0IFRleHQmIHRleHROb2RlID0gdG9UZXh0KG5vZGUpOwog
ICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMDsKLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0
ZXh0Tm9kZS0+bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gdGV4dE5vZGUubGVu
Z3RoKCk7CiAKLSAgICBpZiAocmFuZ2UgJiYgbm9kZSA9PSByYW5nZS0+c3RhcnRDb250YWluZXIo
KSkKKyAgICBpZiAocmFuZ2UgJiYgJm5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkpCiAg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gcmFuZ2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgaWYgKHJhbmdl
ICYmIG5vZGUgPT0gcmFuZ2UtPmVuZENvbnRhaW5lcigpKQorICAgIGlmIChyYW5nZSAmJiAmbm9k
ZSA9PSByYW5nZS0+ZW5kQ29udGFpbmVyKCkpCiAgICAgICAgIGVuZE9mZnNldCA9IHJhbmdlLT5l
bmRPZmZzZXQoKTsKIAotICAgIFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5vZGUpLCBzdGFydE9mZnNldCk7Ci0gICAgUG9zaXRp
b24gZW5kID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KG5v
ZGUpLCBlbmRPZmZzZXQpOwotICAgIHJldHVybiBwbGFpblRleHQoUmFuZ2U6OmNyZWF0ZSgmbm9k
ZS0+ZG9jdW1lbnQoKSwgc3RhcnQsIGVuZCkuZ2V0KCkpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0g
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSwgc3Rh
cnRPZmZzZXQpOworICAgIFBvc2l0aW9uIGVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihjb25zdF9jYXN0PE5vZGUqPigmbm9kZSksIGVuZE9mZnNldCk7CisgICAgcmV0dXJuIHBsYWlu
VGV4dChSYW5nZTo6Y3JlYXRlKCZub2RlLmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpLmdldCgpKTsK
IH0KIAotU3RyaW5nIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzdHJpbmdWYWx1ZUZvclJhbmdl
KGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IFJhbmdlKiByYW5nZSkKK1N0cmluZyBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6c3RyaW5nVmFsdWVGb3JSYW5nZShjb25zdCBOb2RlJiBub2RlLCBjb25z
dCBSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIG5vZGUt
Pm5vZGVWYWx1ZSgpOworICAgICAgICByZXR1cm4gbm9kZS5ub2RlVmFsdWUoKTsKIAotICAgIFN0
cmluZyBzdHIgPSBub2RlLT5ub2RlVmFsdWUoKTsKLSAgICBpZiAobm9kZSA9PSByYW5nZS0+ZW5k
Q29udGFpbmVyKCkpCisgICAgU3RyaW5nIHN0ciA9IG5vZGUubm9kZVZhbHVlKCk7CisgICAgaWYg
KCZub2RlID09IHJhbmdlLT5lbmRDb250YWluZXIoKSkKICAgICAgICAgc3RyLnRydW5jYXRlKHJh
bmdlLT5lbmRPZmZzZXQoKSk7Ci0gICAgaWYgKG5vZGUgPT0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCkpCisgICAgaWYgKCZub2RlID09IHJhbmdlLT5zdGFydENvbnRhaW5lcigpKQogICAgICAgICBz
dHIucmVtb3ZlKDAsIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKICAgICByZXR1cm4gc3RyOwogfQog
Ci12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxk
ZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1
bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQordm9pZCBTdHlsZWRNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2Rl
IHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKLSAgICBjb25zdCBib29sIGRvY3VtZW50SXNIVE1M
ID0gZWxlbWVudC0+ZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpOworICAgIGNvbnN0IGJvb2wg
ZG9jdW1lbnRJc0hUTUwgPSBlbGVtZW50LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKTsKICAg
ICBhcHBlbmRPcGVuVGFnKG91dCwgZWxlbWVudCwgMCk7CiAKLSAgICBjb25zdCB1bnNpZ25lZCBs
ZW5ndGggPSBlbGVtZW50LT5oYXNBdHRyaWJ1dGVzKCkgPyBlbGVtZW50LT5hdHRyaWJ1dGVDb3Vu
dCgpIDogMDsKLSAgICBjb25zdCBib29sIHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSA9IGVs
ZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hvdWxkQW5ub3RhdGUoKSB8fCBhZGREaXNwbGF5
SW5saW5lKTsKKyAgICBjb25zdCB1bnNpZ25lZCBsZW5ndGggPSBlbGVtZW50Lmhhc0F0dHJpYnV0
ZXMoKSA/IGVsZW1lbnQuYXR0cmlidXRlQ291bnQoKSA6IDA7CisgICAgY29uc3QgYm9vbCBzaG91
bGRBbm5vdGF0ZU9yRm9yY2VJbmxpbmUgPSBlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSAmJiAoc2hv
dWxkQW5ub3RhdGUoKSB8fCBhZGREaXNwbGF5SW5saW5lKTsKICAgICBjb25zdCBib29sIHNob3Vs
ZE92ZXJyaWRlU3R5bGVBdHRyID0gc2hvdWxkQW5ub3RhdGVPckZvcmNlSW5saW5lIHx8IHNob3Vs
ZEFwcGx5V3JhcHBpbmdTdHlsZShlbGVtZW50KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUgPSBl
bGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKKyAgICAgICAgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1
dGUgPSBlbGVtZW50LmF0dHJpYnV0ZUF0KGkpOwogICAgICAgICAvLyBXZSdsbCBoYW5kbGUgdGhl
IHN0eWxlIGF0dHJpYnV0ZSBzZXBhcmF0ZWx5LCBiZWxvdy4KICAgICAgICAgaWYgKGF0dHJpYnV0
ZS5uYW1lKCkgPT0gc3R5bGVBdHRyICYmIHNob3VsZE92ZXJyaWRlU3R5bGVBdHRyKQogICAgICAg
ICAgICAgY29udGludWU7CkBAIC0yOTcsMTcgKzMxMSwxNyBAQCB2b2lkIFN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbGVtCiAKICAgICAgICAgaWYgKHNob3VsZEFwcGx5V3JhcHBpbmdT
dHlsZShlbGVtZW50KSkgewogICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUgPSBtX3dyYXBwaW5n
U3R5bGUtPmNvcHkoKTsKLSAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5yZW1vdmVQcm9wZXJ0
aWVzSW5FbGVtZW50RGVmYXVsdFN0eWxlKGVsZW1lbnQpOwotICAgICAgICAgICAgbmV3SW5saW5l
U3R5bGUtPnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoZWxlbWVudCk7Cisg
ICAgICAgICAgICBuZXdJbmxpbmVTdHlsZS0+cmVtb3ZlUHJvcGVydGllc0luRWxlbWVudERlZmF1
bHRTdHlsZShjb25zdF9jYXN0PEVsZW1lbnQqPigmZWxlbWVudCkpOworICAgICAgICAgICAgbmV3
SW5saW5lU3R5bGUtPnJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoY29uc3Rf
Y2FzdDxFbGVtZW50Kj4oJmVsZW1lbnQpKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBu
ZXdJbmxpbmVTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CiAKLSAgICAgICAgaWYgKGVs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpICYmIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihl
bGVtZW50KS0+aW5saW5lU3R5bGUoKSkKLSAgICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5vdmVy
cmlkZVdpdGhTdHlsZShzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4oZWxlbWVudCktPmlubGlu
ZVN0eWxlKCkpOworICAgICAgICBpZiAoZWxlbWVudC5pc1N0eWxlZEVsZW1lbnQoKSAmJiBzdGF0
aWNfY2FzdDxjb25zdCBTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCkuaW5saW5lU3R5bGUoKSkKKyAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5vdmVycmlkZVdpdGhTdHlsZShzdGF0aWNfY2FzdDxj
b25zdCBTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCkuaW5saW5lU3R5bGUoKSk7CiAKICAgICAgICAg
aWYgKHNob3VsZEFubm90YXRlT3JGb3JjZUlubGluZSkgewogICAgICAgICAgICAgaWYgKHNob3Vs
ZEFubm90YXRlKCkpCi0gICAgICAgICAgICAgICAgbmV3SW5saW5lU3R5bGUtPm1lcmdlU3R5bGVG
cm9tUnVsZXNGb3JTZXJpYWxpemF0aW9uKHRvSFRNTEVsZW1lbnQoZWxlbWVudCkpOworICAgICAg
ICAgICAgICAgIG5ld0lubGluZVN0eWxlLT5tZXJnZVN0eWxlRnJvbVJ1bGVzRm9yU2VyaWFsaXph
dGlvbih0b0hUTUxFbGVtZW50KGNvbnN0X2Nhc3Q8RWxlbWVudCo+KCZlbGVtZW50KSkpOwogCiAg
ICAgICAgICAgICBpZiAoYWRkRGlzcGxheUlubGluZSkKICAgICAgICAgICAgICAgICBuZXdJbmxp
bmVTdHlsZS0+Zm9yY2VJbmxpbmUoKTsKQEAgLTM3MSwxMiArMzg1LDEyIEBAIE5vZGUqIFN0eWxl
ZE1hcmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEFkZCB0aGUgbm9kZSB0byB0aGUgbWFya3VwIGlmIHdlJ3JlIG5vdCBza2lwcGluZyB0
aGUgZGVzY2VuZGFudHMKICAgICAgICAgICAgIGlmIChzaG91bGRFbWl0KQotICAgICAgICAgICAg
ICAgIGFwcGVuZFN0YXJ0VGFnKG4pOworICAgICAgICAgICAgICAgIGFwcGVuZFN0YXJ0VGFnKCpu
KTsKIAogICAgICAgICAgICAgLy8gSWYgbm9kZSBoYXMgbm8gY2hpbGRyZW4sIGNsb3NlIHRoZSB0
YWcgbm93LgogICAgICAgICAgICAgaWYgKCFuLT5jaGlsZE5vZGVDb3VudCgpKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHNob3VsZEVtaXQpCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRh
ZyhuKTsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kRW5kVGFnKCpuKTsKICAgICAgICAgICAg
ICAgICBsYXN0Q2xvc2VkID0gbjsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgb3BlbmVkVGFnID0gdHJ1ZTsKQEAgLTM5NCw3ICs0MDgsNyBAQCBOb2RlKiBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgIC8vIE5vdCBhdCB0aGUgZW5kIG9mIHRoZSByYW5nZSwgY2xvc2UgYW5jZXN0
b3JzIHVwIHRvIHNpYmxpbmcgb2YgbmV4dCBub2RlLgogICAgICAgICAgICAgICAgIGlmIChzaG91
bGRFbWl0KQotICAgICAgICAgICAgICAgICAgICBhcHBlbmRFbmRUYWcoYW5jZXN0b3IpOworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRFbmRUYWcoKmFuY2VzdG9yKTsKICAgICAgICAgICAgICAg
ICBsYXN0Q2xvc2VkID0gYW5jZXN0b3I7CiAgICAgICAgICAgICAgICAgYW5jZXN0b3JzVG9DbG9z
ZS5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgICB9CkBAIC00MTAsNyArNDI0LDcgQEAgTm9kZSog
U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogICAgICAgICAgICAgICAgICAgICAv
LyBvciBiKSBhbmNlc3RvcnMgdGhhdCB3ZSBuZXZlciBlbmNvdW50ZXJlZCBkdXJpbmcgYSBwcmUt
b3JkZXIgdHJhdmVyc2FsIHN0YXJ0aW5nIGF0IHN0YXJ0Tm9kZToKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YXJ0Tm9kZS0+aXNEZXNjZW5kYW50T2YocGFyZW50KSk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmIChzaG91bGRFbWl0KQotICAgICAgICAgICAgICAgICAgICAgICAgd3JhcFdp
dGhOb2RlKHBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB3cmFwV2l0aE5vZGUoKnBh
cmVudCk7CiAgICAgICAgICAgICAgICAgICAgIGxhc3RDbG9zZWQgPSBwYXJlbnQ7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTQ0LDM1ICs1NTgsMzMgQEAgc3RhdGljIE5v
ZGUqIGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cAogCiAvLyBGSVhNRTogU2hvdWxkbid0IHdl
IG9taXQgc3R5bGUgaW5mbyB3aGVuIGFubm90YXRlID09IERvTm90QW5ub3RhdGVGb3JJbnRlcmNo
YW5nZT8gCiAvLyBGSVhNRTogQXQgbGVhc3QsIGFubm90YXRpb24gYW5kIHN0eWxlIGluZm8gc2hv
dWxkIHByb2JhYmx5IG5vdCBiZSBpbmNsdWRlZCBpbiByYW5nZS5tYXJrdXBTdHJpbmcoKQotc3Rh
dGljIFN0cmluZyBjcmVhdGVNYXJrdXBJbnRlcm5hbChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IFJhbmdlKiByYW5nZSwgY29uc3QgUmFuZ2UqIHVwZGF0ZWRSYW5nZSwgVmVjdG9yPE5vZGUqPiog
bm9kZXMsCitzdGF0aWMgU3RyaW5nIGNyZWF0ZU1hcmt1cEludGVybmFsKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBSYW5nZSYgdXBkYXRlZFJhbmdlLCBWZWN0
b3I8Tm9kZSo+KiBub2RlcywKICAgICBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSBzaG91bGRBbm5v
dGF0ZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzLCBFQWJzb2x1dGVVUkxzIHNob3VsZFJl
c29sdmVVUkxzKQogewotICAgIEFTU0VSVChkb2N1bWVudCk7Ci0gICAgQVNTRVJUKHJhbmdlKTsK
LSAgICBBU1NFUlQodXBkYXRlZFJhbmdlKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKGNvbnN0
IFN0cmluZywgaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nLCAoQVNDSUlMaXRlcmFsKCI8YnIgY2xh
c3M9XCIiIEFwcGxlSW50ZXJjaGFuZ2VOZXdsaW5lICJcIj4iKSkpOwogCi0gICAgYm9vbCBjb2xs
YXBzZWQgPSB1cGRhdGVkUmFuZ2UtPmNvbGxhcHNlZChBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAg
ICBib29sIGNvbGxhcHNlZCA9IHVwZGF0ZWRSYW5nZS5jb2xsYXBzZWQoQVNTRVJUX05PX0VYQ0VQ
VElPTik7CiAgICAgaWYgKGNvbGxhcHNlZCkKICAgICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7
Ci0gICAgTm9kZSogY29tbW9uQW5jZXN0b3IgPSB1cGRhdGVkUmFuZ2UtPmNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyKEFTU0VSVF9OT19FWENFUFRJT04pOworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9y
ID0gdXBkYXRlZFJhbmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgIGlmICghY29tbW9uQW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOwogCi0gICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0
cygpOworICAgIGRvY3VtZW50LnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwogCiAgICAgTm9kZSogYm9keSA9IGVuY2xvc2luZ05vZGVXaXRoVGFnKGZpcnN0UG9zaXRpb25J
bk5vZGUoY29tbW9uQW5jZXN0b3IpLCBib2R5VGFnKTsKICAgICBOb2RlKiBmdWxseVNlbGVjdGVk
Um9vdCA9IDA7CiAgICAgLy8gRklYTUU6IERvIHRoaXMgZm9yIGFsbCBmdWxseSBzZWxlY3RlZCBi
bG9ja3MsIG5vdCBqdXN0IHRoZSBib2R5LgotICAgIGlmIChib2R5ICYmIGFyZVJhbmdlc0VxdWFs
KFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShib2R5KS50b05v
cm1hbGl6ZWRSYW5nZSgpLmdldCgpLCByYW5nZSkpCisgICAgaWYgKGJvZHkgJiYgYXJlUmFuZ2Vz
RXF1YWwoVmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKGJvZHkp
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksICZyYW5nZSkpCiAgICAgICAgIGZ1bGx5U2VsZWN0
ZWRSb290ID0gYm9keTsKLSAgICBOb2RlKiBzcGVjaWFsQ29tbW9uQW5jZXN0b3IgPSBoaWdoZXN0
QW5jZXN0b3JUb1dyYXBNYXJrdXAodXBkYXRlZFJhbmdlLCBzaG91bGRBbm5vdGF0ZSk7Ci0gICAg
U3R5bGVkTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3Iobm9kZXMsIHNob3VsZFJlc29sdmVV
UkxzLCBzaG91bGRBbm5vdGF0ZSwgdXBkYXRlZFJhbmdlLCBzcGVjaWFsQ29tbW9uQW5jZXN0b3Ip
OwotICAgIE5vZGUqIHBhc3RFbmQgPSB1cGRhdGVkUmFuZ2UtPnBhc3RMYXN0Tm9kZSgpOwotCi0g
ICAgTm9kZSogc3RhcnROb2RlID0gdXBkYXRlZFJhbmdlLT5maXJzdE5vZGUoKTsKLSAgICBWaXNp
YmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KHVwZGF0ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigpLCBW
UF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCh1cGRh
dGVkUmFuZ2UtPmVuZFBvc2l0aW9uKCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOworICAgIE5vZGUq
IHNwZWNpYWxDb21tb25BbmNlc3RvciA9IGhpZ2hlc3RBbmNlc3RvclRvV3JhcE1hcmt1cCgmdXBk
YXRlZFJhbmdlLCBzaG91bGRBbm5vdGF0ZSk7CisKKyAgICBTdHlsZWRNYXJrdXBBY2N1bXVsYXRv
ciBhY2N1bXVsYXRvcihub2Rlcywgc2hvdWxkUmVzb2x2ZVVSTHMsIHNob3VsZEFubm90YXRlLCAm
dXBkYXRlZFJhbmdlLCBzcGVjaWFsQ29tbW9uQW5jZXN0b3IpOworICAgIE5vZGUqIHBhc3RFbmQg
PSB1cGRhdGVkUmFuZ2UucGFzdExhc3ROb2RlKCk7CisKKyAgICBOb2RlKiBzdGFydE5vZGUgPSB1
cGRhdGVkUmFuZ2UuZmlyc3ROb2RlKCk7CisgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFy
dCh1cGRhdGVkUmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKKyAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCh1cGRhdGVkUmFuZ2UuZW5kUG9zaXRpb24oKSwg
VlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgaWYgKHNob3VsZEFubm90YXRlID09IEFubm90YXRl
Rm9ySW50ZXJjaGFuZ2UgJiYgbmVlZEludGVyY2hhbmdlTmV3bGluZUFmdGVyKHZpc2libGVTdGFy
dCkpIHsKICAgICAgICAgaWYgKHZpc2libGVTdGFydCA9PSB2aXNpYmxlRW5kLnByZXZpb3VzKCkp
CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJjaGFuZ2VOZXdsaW5lU3RyaW5nOwpAQCAtNjExLDcg
KzYyMyw3IEBAIHN0YXRpYyBTdHJpbmcgY3JlYXRlTWFya3VwSW50ZXJuYWwoRG9jdW0KICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhpcyBub2RlIGFuZCBh
bGwgdGhlIG90aGVyIGFuY2VzdG9ycyBhcmUgbm90IGluIHRoZSBzZWxlY3Rpb24gd2Ugd2FudCB0
byBzZXQgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHRvIERvZXNOb3RGdWxseVNlbGVjdE5vZGUKICAg
ICAgICAgICAgICAgICAvLyBzbyB0aGF0IHN0eWxlcyB0aGF0IGFmZmVjdCB0aGUgZXh0ZXJpb3Ig
b2YgdGhlIG5vZGUgYXJlIG5vdCBpbmNsdWRlZC4KLSAgICAgICAgICAgICAgICBhY2N1bXVsYXRv
ci53cmFwV2l0aE5vZGUoYW5jZXN0b3IsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIFN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjpEb2VzTm90RnVsbHlTZWxlY3ROb2RlKTsKKyAgICAgICAgICAgICAg
ICBhY2N1bXVsYXRvci53cmFwV2l0aE5vZGUoKmFuY2VzdG9yLCBjb252ZXJ0QmxvY2tzVG9Jbmxp
bmVzLCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6RG9lc05vdEZ1bGx5U2VsZWN0Tm9kZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobm9kZXMpCiAgICAgICAgICAgICAgICAgbm9k
ZXMtPmFwcGVuZChhbmNlc3Rvcik7CkBAIC02MzAsMTMgKzY0MiwxMCBAQCBzdGF0aWMgU3RyaW5n
IGNyZWF0ZU1hcmt1cEludGVybmFsKERvY3VtCiAgICAgcmV0dXJuIGFjY3VtdWxhdG9yLnRha2VS
ZXN1bHRzKCk7CiB9CiAKLVN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlLCBW
ZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2Ugc2hvdWxkQW5ub3Rh
dGUsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgRUFic29sdXRlVVJMcyBzaG91bGRSZXNv
bHZlVVJMcykKK1N0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UmIHJhbmdlLCBWZWN0b3I8
Tm9kZSo+KiBub2RlcywgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2Ugc2hvdWxkQW5ub3RhdGUsIGJv
b2wgY29udmVydEJsb2Nrc1RvSW5saW5lcywgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJM
cykKIHsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKLQot
ICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHJhbmdlLT5vd25lckRvY3VtZW50KCk7Ci0gICAgY29u
c3QgUmFuZ2UqIHVwZGF0ZWRSYW5nZSA9IHJhbmdlOworICAgIERvY3VtZW50JiBkb2N1bWVudCA9
IHJhbmdlLm93bmVyRG9jdW1lbnQoKTsKKyAgICBjb25zdCBSYW5nZSogdXBkYXRlZFJhbmdlID0g
JnJhbmdlOwogCiAjaWYgRU5BQkxFKERFTEVUSU9OX1VJKQogICAgIC8vIERpc2FibGUgdGhlIGRl
bGV0ZSBidXR0b24gc28gaXQncyBlbGVtZW50cyBhcmUgbm90IHNlcmlhbGl6ZWQgaW50byB0aGUg
bWFya3VwLApAQCAtNjQ2LDEyNiArNjU1LDQzIEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3Qg
UmFuZ2UqIHJhbmdlLCAKIAogICAgIFJlZlB0cjxSYW5nZT4gdXBkYXRlZFJhbmdlUmVmOwogICAg
IGlmIChmcmFtZSkgewotICAgICAgICB1cGRhdGVkUmFuZ2VSZWYgPSBmcmFtZS0+ZWRpdG9yKCku
YXZvaWRJbnRlcnNlY3Rpb25XaXRoRGVsZXRlQnV0dG9uQ29udHJvbGxlcihyYW5nZSk7CisgICAg
ICAgIHVwZGF0ZWRSYW5nZVJlZiA9IGZyYW1lLT5lZGl0b3IoKS5hdm9pZEludGVyc2VjdGlvbldp
dGhEZWxldGVCdXR0b25Db250cm9sbGVyKCZyYW5nZSk7CiAgICAgICAgIHVwZGF0ZWRSYW5nZSA9
IHVwZGF0ZWRSYW5nZVJlZi5nZXQoKTsKICAgICAgICAgaWYgKCF1cGRhdGVkUmFuZ2UpCiAgICAg
ICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9CiAjZW5kaWYKIAotICAgIHJldHVy
biBjcmVhdGVNYXJrdXBJbnRlcm5hbCgmZG9jdW1lbnQsIHJhbmdlLCB1cGRhdGVkUmFuZ2UsIG5v
ZGVzLCBzaG91bGRBbm5vdGF0ZSwgY29udmVydEJsb2Nrc1RvSW5saW5lcywgc2hvdWxkUmVzb2x2
ZVVSTHMpOworICAgIHJldHVybiBjcmVhdGVNYXJrdXBJbnRlcm5hbChkb2N1bWVudCwgcmFuZ2Us
ICp1cGRhdGVkUmFuZ2UsIG5vZGVzLCBzaG91bGRBbm5vdGF0ZSwgY29udmVydEJsb2Nrc1RvSW5s
aW5lcywgc2hvdWxkUmVzb2x2ZVVSTHMpOwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kg
cGFyc2VyQ29udGVudFBvbGljeSkKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
RnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJr
dXAsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250
ZW50UG9saWN5KQogewogICAgIC8vIFdlIHVzZSBhIGZha2UgYm9keSBlbGVtZW50IGhlcmUgdG8g
dHJpY2sgdGhlIEhUTUwgcGFyc2VyIHRvIHVzaW5nIHRoZSBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUu
Ci0gICAgUmVmUHRyPEhUTUxCb2R5RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6
OmNyZWF0ZSgqZG9jdW1lbnQpOwotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVu
dCA9IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZSgqZG9jdW1lbnQpOworICAgIFJlZlB0cjxIVE1M
Qm9keUVsZW1lbnQ+IGZha2VCb2R5ID0gSFRNTEJvZHlFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQp
OworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IERvY3VtZW50RnJhZ21l
bnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAKICAgICBmcmFnbWVudC0+cGFyc2VIVE1MKG1hcmt1cCwg
ZmFrZUJvZHkuZ2V0KCksIHBhcnNlckNvbnRlbnRQb2xpY3kpOwogCi0gICAgaWYgKCFiYXNlVVJM
LmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVu
dC0+YmFzZVVSTCgpKQorICAgIGlmICghYmFzZVVSTC5pc0VtcHR5KCkgJiYgYmFzZVVSTCAhPSBi
bGFua1VSTCgpICYmIGJhc2VVUkwgIT0gZG9jdW1lbnQuYmFzZVVSTCgpKQogICAgICAgICBjb21w
bGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCksIGJhc2VVUkwpOwogCiAgICAgcmV0dXJuIGZyYWdtZW50
LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIGNvbnN0IGNoYXIgZnJhZ21lbnRNYXJrZXJUYWdbXSA9
ICJ3ZWJraXQtZnJhZ21lbnQtbWFya2VyIjsKLQotc3RhdGljIGJvb2wgZmluZE5vZGVzU3Vycm91
bmRpbmdDb250ZXh0KERvY3VtZW50KiBkb2N1bWVudCwgUmVmUHRyPE5vZGU+JiBub2RlQmVmb3Jl
Q29udGV4dCwgUmVmUHRyPE5vZGU+JiBub2RlQWZ0ZXJDb250ZXh0KQotewotICAgIGZvciAoTm9k
ZSogbm9kZSA9IGRvY3VtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBOb2RlVHJhdmVy
c2FsOjpuZXh0KG5vZGUpKSB7Ci0gICAgICAgIGlmIChub2RlLT5ub2RlVHlwZSgpID09IE5vZGU6
OkNPTU1FTlRfTk9ERSAmJiBzdGF0aWNfY2FzdDxDaGFyYWN0ZXJEYXRhKj4obm9kZSktPmRhdGEo
KSA9PSBmcmFnbWVudE1hcmtlclRhZykgewotICAgICAgICAgICAgaWYgKCFub2RlQmVmb3JlQ29u
dGV4dCkKLSAgICAgICAgICAgICAgICBub2RlQmVmb3JlQ29udGV4dCA9IG5vZGU7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBub2RlQWZ0ZXJDb250ZXh0ID0gbm9kZTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyB2b2lkIHRyaW1GcmFnbWVudChEb2N1
bWVudEZyYWdtZW50KiBmcmFnbWVudCwgTm9kZSogbm9kZUJlZm9yZUNvbnRleHQsIE5vZGUqIG5v
ZGVBZnRlckNvbnRleHQpCi17Ci0gICAgUmVmUHRyPE5vZGU+IG5leHQ7Ci0gICAgZm9yIChSZWZQ
dHI8Tm9kZT4gbm9kZSA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBuZXh0
KSB7Ci0gICAgICAgIGlmIChub2RlQmVmb3JlQ29udGV4dC0+aXNEZXNjZW5kYW50T2Yobm9kZS5n
ZXQoKSkpIHsKLSAgICAgICAgICAgIG5leHQgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KG5vZGUuZ2V0
KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgbmV4dCA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG5vZGUuZ2V0KCkpOwotICAgICAgICBB
U1NFUlQoIW5vZGUtPmNvbnRhaW5zKG5vZGVBZnRlckNvbnRleHQpKTsKLSAgICAgICAgbm9kZS0+
cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZChub2RlLmdldCgpLCBBU1NFUlRfTk9fRVhDRVBUSU9O
KTsKLSAgICAgICAgaWYgKG5vZGVCZWZvcmVDb250ZXh0ID09IG5vZGUpCi0gICAgICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBBU1NFUlQobm9kZUFmdGVyQ29udGV4dC0+cGFyZW50Tm9kZSgp
KTsKLSAgICBmb3IgKFJlZlB0cjxOb2RlPiBub2RlID0gbm9kZUFmdGVyQ29udGV4dDsgbm9kZTsg
bm9kZSA9IG5leHQpIHsKLSAgICAgICAgbmV4dCA9IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGlu
Z0NoaWxkcmVuKG5vZGUuZ2V0KCkpOwotICAgICAgICBub2RlLT5wYXJlbnROb2RlKCktPnJlbW92
ZUNoaWxkKG5vZGUuZ2V0KCksIEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIH0KLX0KLQotUGFz
c1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXBXaXRoQ29u
dGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYgbWFya3VwLCB1bnNpZ25lZCBm
cmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBmcmFnbWVudEVuZCwKLSAgICBjb25zdCBTdHJpbmcmIGJh
c2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSkKLXsKLSAgICAv
LyBGSVhNRTogTmVlZCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhlIG1hcmt1cCBhbHJlYWR5
IGNvbnRhaW5zIHRoZXNlIG1hcmtlcnMuCi0KLSAgICBTdHJpbmdCdWlsZGVyIHRhZ2dlZE1hcmt1
cDsKLSAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5sZWZ0KGZyYWdtZW50U3RhcnQpKTsK
LSAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRNYXJrdXAsIGZyYWdt
ZW50TWFya2VyVGFnKTsKLSAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1cC5zdWJzdHJpbmco
ZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQgLSBmcmFnbWVudFN0YXJ0KSk7Ci0gICAgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZENvbW1lbnQodGFnZ2VkTWFya3VwLCBmcmFnbWVudE1hcmtlclRh
Zyk7Ci0gICAgdGFnZ2VkTWFya3VwLmFwcGVuZChtYXJrdXAuc3Vic3RyaW5nKGZyYWdtZW50RW5k
KSk7Ci0KLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gdGFnZ2VkRnJhZ21lbnQgPSBjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXAoZG9jdW1lbnQsIHRhZ2dlZE1hcmt1cC50b1N0cmluZygpLCBi
YXNlVVJMLCBwYXJzZXJDb250ZW50UG9saWN5KTsKLSAgICBSZWZQdHI8RG9jdW1lbnQ+IHRhZ2dl
ZERvY3VtZW50ID0gRG9jdW1lbnQ6OmNyZWF0ZSgwLCBVUkwoKSk7Ci0gICAgdGFnZ2VkRG9jdW1l
bnQtPnRha2VBbGxDaGlsZHJlbkZyb20odGFnZ2VkRnJhZ21lbnQuZ2V0KCkpOwotCi0gICAgUmVm
UHRyPE5vZGU+IG5vZGVCZWZvcmVDb250ZXh0OwotICAgIFJlZlB0cjxOb2RlPiBub2RlQWZ0ZXJD
b250ZXh0OwotICAgIGlmICghZmluZE5vZGVzU3Vycm91bmRpbmdDb250ZXh0KHRhZ2dlZERvY3Vt
ZW50LmdldCgpLCBub2RlQmVmb3JlQ29udGV4dCwgbm9kZUFmdGVyQ29udGV4dCkpCi0gICAgICAg
IHJldHVybiAwOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUodGFn
Z2VkRG9jdW1lbnQuZ2V0KCksCi0gICAgICAgIHBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGVCZWZvcmVD
b250ZXh0LmdldCgpKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwKLSAgICAgICAgcG9zaXRp
b25CZWZvcmVOb2RlKG5vZGVBZnRlckNvbnRleHQuZ2V0KCkpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpKTsKLQotICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UtPmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKEFTU0VSVF9OT19FWENFUFRJT04pOwotICAgIE5vZGUqIHNwZWNpYWxDb21t
b25BbmNlc3RvciA9IGFuY2VzdG9yVG9SZXRhaW5TdHJ1Y3R1cmVBbmRBcHBlYXJhbmNlV2l0aE5v
UmVuZGVyZXIoY29tbW9uQW5jZXN0b3IpOwotCi0gICAgLy8gV2hlbiB0aGVyZSdzIGEgc3BlY2lh
bCBjb21tb24gYW5jZXN0b3Igb3V0c2lkZSBvZiB0aGUgZnJhZ21lbnQsIHdlIG11c3QgaW5jbHVk
ZSBpdCBhcyB3ZWxsIHRvCi0gICAgLy8gcHJlc2VydmUgdGhlIHN0cnVjdHVyZSBhbmQgYXBwZWFy
YW5jZSBvZiB0aGUgZnJhZ21lbnQuIEZvciBleGFtcGxlLCBpZiB0aGUgZnJhZ21lbnQgY29udGFp
bnMKLSAgICAvLyBURCwgd2UgbmVlZCB0byBpbmNsdWRlIHRoZSBlbmNsb3NpbmcgVEFCTEUgdGFn
IGFzIHdlbGwuCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1l
bnRGcmFnbWVudDo6Y3JlYXRlKCpkb2N1bWVudCk7Ci0gICAgaWYgKHNwZWNpYWxDb21tb25BbmNl
c3RvcikKLSAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKHNwZWNpYWxDb21tb25BbmNlc3Rv
ciwgQVNTRVJUX05PX0VYQ0VQVElPTik7Ci0gICAgZWxzZQotICAgICAgICBmcmFnbWVudC0+dGFr
ZUFsbENoaWxkcmVuRnJvbSh0b0NvbnRhaW5lck5vZGUoY29tbW9uQW5jZXN0b3IpKTsKLQotICAg
IHRyaW1GcmFnbWVudChmcmFnbWVudC5nZXQoKSwgbm9kZUJlZm9yZUNvbnRleHQuZ2V0KCksIG5v
ZGVBZnRlckNvbnRleHQuZ2V0KCkpOwotCi0gICAgcmV0dXJuIGZyYWdtZW50OwotfQotCi1TdHJp
bmcgY3JlYXRlTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5P
bmx5LCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJM
cywgVmVjdG9yPFF1YWxpZmllZE5hbWU+KiB0YWdOYW1lc1RvU2tpcCwgRUZyYWdtZW50U2VyaWFs
aXphdGlvbiBmcmFnbWVudFNlcmlhbGl6YXRpb24pCitTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0
IE5vZGUmIG5vZGUsIEVDaGlsZHJlbk9ubHkgY2hpbGRyZW5Pbmx5LCBWZWN0b3I8Tm9kZSo+KiBu
b2RlcywgRUFic29sdXRlVVJMcyBzaG91bGRSZXNvbHZlVVJMcywgVmVjdG9yPFF1YWxpZmllZE5h
bWU+KiB0YWdOYW1lc1RvU2tpcCwgRUZyYWdtZW50U2VyaWFsaXphdGlvbiBmcmFnbWVudFNlcmlh
bGl6YXRpb24pCiB7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmco
KTsKLQogICAgIEhUTUxFbGVtZW50KiBkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50ID0gMDsK
ICNpZiBFTkFCTEUoREVMRVRJT05fVUkpCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRv
Y3VtZW50KCkuZnJhbWUoKSkgeworICAgIGlmIChGcmFtZSogZnJhbWUgPSBub2RlLmRvY3VtZW50
KCkuZnJhbWUoKSkgewogICAgICAgICBkZWxldGVCdXR0b25Db250YWluZXJFbGVtZW50ID0gZnJh
bWUtPmVkaXRvcigpLmRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIoKS5jb250YWluZXJFbGVtZW50KCk7
Ci0gICAgICAgIGlmIChub2RlLT5pc0Rlc2NlbmRhbnRPZihkZWxldGVCdXR0b25Db250YWluZXJF
bGVtZW50KSkKKyAgICAgICAgaWYgKG5vZGUuaXNEZXNjZW5kYW50T2YoZGVsZXRlQnV0dG9uQ29u
dGFpbmVyRWxlbWVudCkpCiAgICAgICAgICAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKICAgICB9
CiAjZW5kaWYKKwogICAgIE1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKG5vZGVzLCBzaG91
bGRSZXNvbHZlVVJMcywgMCwgZnJhZ21lbnRTZXJpYWxpemF0aW9uKTsKLSAgICByZXR1cm4gYWNj
dW11bGF0b3Iuc2VyaWFsaXplTm9kZXMoY29uc3RfY2FzdDxOb2RlKj4obm9kZSksIGRlbGV0ZUJ1
dHRvbkNvbnRhaW5lckVsZW1lbnQsIGNoaWxkcmVuT25seSwgdGFnTmFtZXNUb1NraXApOworICAg
IHJldHVybiBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhjb25zdF9jYXN0PE5vZGUmPihub2Rl
KSwgZGVsZXRlQnV0dG9uQ29udGFpbmVyRWxlbWVudCwgY2hpbGRyZW5Pbmx5LCB0YWdOYW1lc1Rv
U2tpcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpbGxDb250YWluZXJGcm9tU3RyaW5nKENvbnRhaW5l
ck5vZGUqIHBhcmFncmFwaCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCkBAIC04OTYsNTQgKzgyMiwy
OSBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtCiAgICAgcmV0dXJu
IGZyYWdtZW50LnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBj
cmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFZlY3RvcjxO
b2RlKj4mIG5vZGVzKQotewotICAgIGlmICghZG9jdW1lbnQpCi0gICAgICAgIHJldHVybiAwOwot
Ci0jaWYgRU5BQkxFKERFTEVUSU9OX1VJKQotICAgIC8vIGRpc2FibGUgdGhlIGRlbGV0ZSBidXR0
b24gc28gaXQncyBlbGVtZW50cyBhcmUgbm90IHNlcmlhbGl6ZWQgaW50byB0aGUgbWFya3VwCi0g
ICAgRGVsZXRlQnV0dG9uQ29udHJvbGxlckRpc2FibGVTY29wZShkb2N1bWVudC0+ZnJhbWUoKSk7
Ci0jZW5kaWYKLQotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGRvY3Vt
ZW50LT5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7Ci0KLSAgICBzaXplX3Qgc2l6ZSA9IG5vZGVz
LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAg
ICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IGNyZWF0ZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50
KCpkb2N1bWVudCk7Ci0gICAgICAgIGVsZW1lbnQtPmFwcGVuZENoaWxkKG5vZGVzW2ldLCBBU1NF
UlRfTk9fRVhDRVBUSU9OKTsKLSAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQu
cmVsZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZnJh
Z21lbnQucmVsZWFzZSgpOwotfQotCiBTdHJpbmcgZG9jdW1lbnRUeXBlU3RyaW5nKGNvbnN0IERv
Y3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTWFya3VwKGRvY3VtZW50LmRv
Y3R5cGUoKSk7CisgICAgRG9jdW1lbnRUeXBlKiBkb2N1bWVudFR5cGUgPSBkb2N1bWVudC5kb2N0
eXBlKCk7CisgICAgaWYgKCFkb2N1bWVudFR5cGUpCisgICAgICAgIHJldHVybiBlbXB0eVN0cmlu
ZygpOworICAgIHJldHVybiBjcmVhdGVNYXJrdXAoKmRvY3VtZW50VHlwZSk7CiB9CiAKLVN0cmlu
ZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0IE5vZGUqIG5vZGUpCitTdHJpbmcgY3JlYXRlRnVsbE1h
cmt1cChjb25zdCBOb2RlJiBub2RlKQogewotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgbmV2ZXIgImZvciBpbnRlcmNoYW5n
ZSIuIElzIHRoYXQgcmlnaHQ/CiAgICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGNyZWF0ZU1hcmt1
cChub2RlLCBJbmNsdWRlTm9kZSwgMCk7CiAKLSAgICBOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSA9
IG5vZGUtPm5vZGVUeXBlKCk7CisgICAgTm9kZTo6Tm9kZVR5cGUgbm9kZVR5cGUgPSBub2RlLm5v
ZGVUeXBlKCk7CiAgICAgaWYgKG5vZGVUeXBlICE9IE5vZGU6OkRPQ1VNRU5UX05PREUgJiYgbm9k
ZVR5cGUgIT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKQotICAgICAgICBtYXJrdXBTdHJpbmcg
PSBkb2N1bWVudFR5cGVTdHJpbmcobm9kZS0+ZG9jdW1lbnQoKSkgKyBtYXJrdXBTdHJpbmc7Cisg
ICAgICAgIG1hcmt1cFN0cmluZyA9IGRvY3VtZW50VHlwZVN0cmluZyhub2RlLmRvY3VtZW50KCkp
ICsgbWFya3VwU3RyaW5nOwogCiAgICAgcmV0dXJuIG1hcmt1cFN0cmluZzsKIH0KIAotU3RyaW5n
IGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgUmFuZ2UqIHJhbmdlKQorU3RyaW5nIGNyZWF0ZUZ1bGxN
YXJrdXAoY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKLQotICAgIE5vZGUqIG5vZGUgPSByYW5nZS0+c3RhcnRDb250YWluZXIo
KTsKKyAgICBOb2RlKiBub2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKICAgICBpZiAoIW5v
ZGUpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYXJrdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1
cC5oCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw5ICs1MCw3IEBAIGVudW0gRUFic29sdXRlVVJMcyB7IERv
Tm90UmVzb2x2ZVVSTHMsIFIKIGVudW0gRUZyYWdtZW50U2VyaWFsaXphdGlvbiB7IEhUTUxGcmFn
bWVudFNlcmlhbGl6YXRpb24sIFhNTEZyYWdtZW50U2VyaWFsaXphdGlvbiB9OwogCiBQYXNzUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoUmFuZ2UqIGNvbnRl
eHQsIGNvbnN0IFN0cmluZyYgdGV4dCk7Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgbWFya3VwLCBj
b25zdCBTdHJpbmcmIGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kgPSBBbGxvd1NjcmlwdGlu
Z0NvbnRlbnQpOwotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYgbWFya3VwLCB1bnNp
Z25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBmcmFnbWVudEVuZCwgY29uc3QgU3RyaW5nJiBi
YXNlVVJMLCBQYXJzZXJDb250ZW50UG9saWN5KTsKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tTm9kZXMoRG9jdW1lbnQqLCBjb25zdCBWZWN0b3I8Tm9kZSo+
Jik7CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChEb2N1bWVudCYsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBjb25zdCBTdHJpbmcmIGJhc2VVUkws
IFBhcnNlckNvbnRlbnRQb2xpY3kgPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKGNvbnN0
IFN0cmluZyYsIEVsZW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5LCBFeGNlcHRpb25Db2RlJik7
CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9yVHJhbnNmb3Jt
VG9GcmFnbWVudChjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIHNvdXJjZU1JTUVUeXBlLCBE
b2N1bWVudCogb3V0cHV0RG9jKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRl
Q29udGV4dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIEhUTUxFbGVtZW50KiwgUGFyc2VyQ29u
dGVudFBvbGljeSwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNjQsMTEgKzYyLDExIEBAIGJvb2wgaXNQ
bGFpblRleHRNYXJrdXAoTm9kZSopOwogdm9pZCByZXBsYWNlQ2hpbGRyZW5XaXRoRnJhZ21lbnQo
Q29udGFpbmVyTm9kZSYsIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4sIEV4Y2VwdGlvbkNv
ZGUmKTsKIHZvaWQgcmVwbGFjZUNoaWxkcmVuV2l0aFRleHQoQ29udGFpbmVyTm9kZSYsIGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAotU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBS
YW5nZSosIFZlY3RvcjxOb2RlKj4qID0gMCwgRUFubm90YXRlRm9ySW50ZXJjaGFuZ2UgPSBEb05v
dEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGJvb2wgY29udmVydEJsb2Nrc1RvSW5saW5lcyA9IGZh
bHNlLCBFQWJzb2x1dGVVUkxzID0gRG9Ob3RSZXNvbHZlVVJMcyk7Ci1TdHJpbmcgY3JlYXRlTWFy
a3VwKGNvbnN0IE5vZGUqLCBFQ2hpbGRyZW5Pbmx5ID0gSW5jbHVkZU5vZGUsIFZlY3RvcjxOb2Rl
Kj4qID0gMCwgRUFic29sdXRlVVJMcyA9IERvTm90UmVzb2x2ZVVSTHMsIFZlY3RvcjxRdWFsaWZp
ZWROYW1lPiogdGFnTmFtZXNUb1NraXAgPSAwLCBFRnJhZ21lbnRTZXJpYWxpemF0aW9uID0gSFRN
TEZyYWdtZW50U2VyaWFsaXphdGlvbik7CitTdHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdl
JiwgVmVjdG9yPE5vZGUqPiogPSAwLCBFQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSA9IERvTm90QW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSwgYm9vbCBjb252ZXJ0QmxvY2tzVG9JbmxpbmVzID0gZmFsc2Us
IEVBYnNvbHV0ZVVSTHMgPSBEb05vdFJlc29sdmVVUkxzKTsKK1N0cmluZyBjcmVhdGVNYXJrdXAo
Y29uc3QgTm9kZSYsIEVDaGlsZHJlbk9ubHkgPSBJbmNsdWRlTm9kZSwgVmVjdG9yPE5vZGUqPiog
PSAwLCBFQWJzb2x1dGVVUkxzID0gRG9Ob3RSZXNvbHZlVVJMcywgVmVjdG9yPFF1YWxpZmllZE5h
bWU+KiB0YWdOYW1lc1RvU2tpcCA9IDAsIEVGcmFnbWVudFNlcmlhbGl6YXRpb24gPSBIVE1MRnJh
Z21lbnRTZXJpYWxpemF0aW9uKTsKIAotU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgTm9k
ZSopOwotU3RyaW5nIGNyZWF0ZUZ1bGxNYXJrdXAoY29uc3QgUmFuZ2UqKTsKK1N0cmluZyBjcmVh
dGVGdWxsTWFya3VwKGNvbnN0IE5vZGUmKTsKK1N0cmluZyBjcmVhdGVGdWxsTWFya3VwKGNvbnN0
IFJhbmdlJik7CiAKIFN0cmluZyB1cmxUb01hcmt1cChjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcm
IHRpdGxlKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQko
cmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9T
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00MzksNyArNDM5LDcgQEAgYm9vbCBFZGl0b3I6OldlYkNv
bnRlbnRSZWFkZXI6OnJlYWRXZWJBcgogICAgICAgICAgICAgbG9hZGVyLT5hZGRBbGxBcmNoaXZl
UmVzb3VyY2VzKGFyY2hpdmUuZ2V0KCkpOwogCiAgICAgICAgIFN0cmluZyBtYXJrdXBTdHJpbmcg
PSBTdHJpbmc6OmZyb21VVEY4KG1haW5SZXNvdXJjZS0+ZGF0YSgpLT5kYXRhKCksIG1haW5SZXNv
dXJjZS0+ZGF0YSgpLT5zaXplKCkpOwotICAgICAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLCBtYWluUmVzb3VyY2Ut
PnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpKTsKKyAgICAgICAgYWRk
RnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBtYXJr
dXBTdHJpbmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2lu
Q29udGVudCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYy
LDcgKzQ2Miw3IEBAIGJvb2wgRWRpdG9yOjpXZWJDb250ZW50UmVhZGVyOjpyZWFkV2ViQXIKICAg
ICAgICAgICAgIGxvYWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhhcmNoaXZlLmdldCgpKTsK
IAogICAgICAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gU3RyaW5nOjpmcm9tVVRGOChtYWluUmVz
b3VyY2UtPmRhdGEoKS0+ZGF0YSgpLCBtYWluUmVzb3VyY2UtPmRhdGEoKS0+c2l6ZSgpKTsKLSAg
ICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQo
KSwgbWFya3VwU3RyaW5nLCBtYWluUmVzb3VyY2UtPnVybCgpLCBEaXNhbGxvd1NjcmlwdGluZ0Fu
ZFBsdWdpbkNvbnRlbnQpOworICAgICAgICBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1h
cmt1cCgqZnJhbWUuZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLCBtYWluUmVzb3VyY2UtPnVybCgp
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKQEAgLTUxNCw3ICs1MTQsNyBAQCBib29sIEVkaXRvcjo6V2ViQ29udGVudFJl
YWRlcjo6cmVhZEhUTUwoCiAgICAgaWYgKHN0cmluZ09taXR0aW5nTWljcm9zb2Z0UHJlZml4Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoZnJhbWUuZG9jdW1lbnQoKSwgc3RyaW5nT21pdHRpbmdNaWNyb3Nv
ZnRQcmVmaXgsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVu
dCk7CisgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoKmZyYW1lLmRvY3Vt
ZW50KCksIHN0cmluZ09taXR0aW5nTWljcm9zb2Z0UHJlZml4LCBlbXB0eVN0cmluZygpLCBEaXNh
bGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAgIHJldHVybiBmcmFnbWVudDsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1Njk4NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDUsMTIgKzM0NSwxMiBAQCB2b2lkIEhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25z
dCBRCiAKIFN0cmluZyBIVE1MRWxlbWVudDo6aW5uZXJIVE1MKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gY3JlYXRlTWFya3VwKHRoaXMsIENoaWxkcmVuT25seSk7CisgICAgcmV0dXJuIGNyZWF0ZU1h
cmt1cCgqdGhpcywgQ2hpbGRyZW5Pbmx5KTsKIH0KIAogU3RyaW5nIEhUTUxFbGVtZW50OjpvdXRl
ckhUTUwoKSBjb25zdAogewotICAgIHJldHVybiBjcmVhdGVNYXJrdXAodGhpcyk7CisgICAgcmV0
dXJuIGNyZWF0ZU1hcmt1cCgqdGhpcyk7CiB9CiAKIHZvaWQgSFRNTEVsZW1lbnQ6OnNldElubmVy
SFRNTChjb25zdCBTdHJpbmcmIGh0bWwsIEV4Y2VwdGlvbkNvZGUmIGVjKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCShyZXZpc2lvbiAxNTY5ODUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NywxMiArNzcsMjcgQEAgaW5saW5lIEhUTUxGcmFtZU93bmVyRWxlbWVudCYg
dG9GcmFtZU93bgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQm
Pihub2RlKTsKIH0KIAoraW5saW5lIGNvbnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgdG9GcmFt
ZU93bmVyRWxlbWVudChjb25zdCBOb2RlJiBub2RlKQoreworICAgIEFTU0VSVF9XSVRIX1NFQ1VS
SVRZX0lNUExJQ0FUSU9OKG5vZGUuaXNGcmFtZU93bmVyRWxlbWVudCgpKTsKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Jj4obm9kZSk7Cit9CisKIGlu
bGluZSBIVE1MRnJhbWVPd25lckVsZW1lbnQqIHRvRnJhbWVPd25lckVsZW1lbnQoTm9kZSogbm9k
ZSkKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTighbm9kZSB8fCBub2Rl
LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxIVE1MRnJh
bWVPd25lckVsZW1lbnQqPihub2RlKTsKIH0KIAoraW5saW5lIGNvbnN0IEhUTUxGcmFtZU93bmVy
RWxlbWVudCogdG9GcmFtZU93bmVyRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQoreworICAgIEFT
U0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKCFub2RlIHx8IG5vZGUtPmlzRnJhbWVPd25l
ckVsZW1lbnQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxGcmFtZU93bmVy
RWxlbWVudCo+KG5vZGUpOworfQorCit2b2lkIHRvRnJhbWVPd25lckVsZW1lbnQoY29uc3QgSFRN
TEZyYW1lT3duZXJFbGVtZW50Jik7Cit2b2lkIHRvRnJhbWVPd25lckVsZW1lbnQoY29uc3QgSFRN
TEZyYW1lT3duZXJFbGVtZW50Kik7CisKIGNsYXNzIFN1YmZyYW1lTG9hZGluZ0Rpc2FibGVyIHsK
IHB1YmxpYzoKICAgICBleHBsaWNpdCBTdWJmcmFtZUxvYWRpbmdEaXNhYmxlcihDb250YWluZXJO
b2RlJiByb290KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1wbGF0ZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZW1w
bGF0ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxNCArODUsNiBAQCB2b2lkIEhU
TUxUZW1wbGF0ZUVsZW1lbnQ6OmRpZE1vdmVUb05ld0RvCiAgICAgZG9jdW1lbnQoKS5lbnN1cmVU
ZW1wbGF0ZURvY3VtZW50KCktPmFkb3B0SWZOZWVkZWQobV9jb250ZW50LmdldCgpKTsKIH0KIAot
I2lmbmRlZiBOREVCVUcKLWNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQqIHRvSFRNTFRlbXBsYXRl
RWxlbWVudChjb25zdCBOb2RlKiBub2RlKQotewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKCFub2RlIHx8IChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgbm9kZS0+aGFzVGFn
TmFtZSh0ZW1wbGF0ZVRhZykpKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTFRl
bXBsYXRlRWxlbWVudCo+KG5vZGUpOwotfQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGVtcGxhdGVFbGVtZW50LmgJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRlbXBsYXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCwyMSArNTQsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IG1fY29udGVudDsKIH07CiAKLWNvbnN0IEhUTUxUZW1wbGF0ZUVsZW1lbnQqIHRvSFRN
TFRlbXBsYXRlRWxlbWVudChjb25zdCBOb2RlKik7Ci0KLWlubGluZSBIVE1MVGVtcGxhdGVFbGVt
ZW50KiB0b0hUTUxUZW1wbGF0ZUVsZW1lbnQoTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gY29u
c3RfY2FzdDxIVE1MVGVtcGxhdGVFbGVtZW50Kj4odG9IVE1MVGVtcGxhdGVFbGVtZW50KHN0YXRp
Y19jYXN0PGNvbnN0IE5vZGUqPihub2RlKSkpOwotfQotCi0jaWZkZWYgTkRFQlVHCi0KLS8vIFRo
ZSBkZWJ1ZyB2ZXJzaW9uIG9mIHRoaXMsIHdpdGggYXNzZXJ0aW9ucywgaXMgbm90IGlubGluZWQu
Ci1pbmxpbmUgY29uc3QgSFRNTFRlbXBsYXRlRWxlbWVudCogdG9IVE1MVGVtcGxhdGVFbGVtZW50
KGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEhUTUxU
ZW1wbGF0ZUVsZW1lbnQqPihub2RlKTsKLX0KLSNlbmRpZiAvLyBOREVCVUcKK0VMRU1FTlRfVFlQ
RV9DQVNUUyhIVE1MVGVtcGxhdGVFbGVtZW50KQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuY3BwCShyZXZpc2lvbiAxNTY5
ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjA2LDEwICsyMDYsMTAgQEAgcHJpdmF0ZToKIGNsYXNzIERPTUVkaXRvcjo6U2V0
T3V0ZXJIVE1MQWN0aW9uIDogcHVibGljIEluc3BlY3Rvckhpc3Rvcnk6OkFjdGlvbiB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU2V0T3V0ZXJIVE1MQWN0aW9uKTsKIHB1YmxpYzoKLSAgICBT
ZXRPdXRlckhUTUxBY3Rpb24oTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBodG1sKQorICAgIFNl
dE91dGVySFRNTEFjdGlvbihOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIGh0bWwpCiAgICAgICAg
IDogSW5zcGVjdG9ySGlzdG9yeTo6QWN0aW9uKCJTZXRPdXRlckhUTUwiKQogICAgICAgICAsIG1f
bm9kZShub2RlKQotICAgICAgICAsIG1fbmV4dFNpYmxpbmcobm9kZS0+bmV4dFNpYmxpbmcoKSkK
KyAgICAgICAgLCBtX25leHRTaWJsaW5nKG5vZGUubmV4dFNpYmxpbmcoKSkKICAgICAgICAgLCBt
X2h0bWwoaHRtbCkKICAgICAgICAgLCBtX25ld05vZGUoMCkKICAgICAgICAgLCBtX2hpc3Rvcnko
YWRvcHRQdHIobmV3IEluc3BlY3Rvckhpc3RvcnkoKSkpCkBAIC0yNDEsNyArMjQxLDcgQEAgcHVi
bGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworICAgIFJl
ZjxOb2RlPiBtX25vZGU7CiAgICAgUmVmUHRyPE5vZGU+IG1fbmV4dFNpYmxpbmc7CiAgICAgU3Ry
aW5nIG1faHRtbDsKICAgICBTdHJpbmcgbV9vbGRIVE1MOwpAQCAtMzc0LDcgKzM3NCw3IEBAIGJv
b2wgRE9NRWRpdG9yOjpyZW1vdmVBdHRyaWJ1dGUoRWxlbWVudCoKICAgICByZXR1cm4gbV9oaXN0
b3J5LT5wZXJmb3JtKGFkb3B0UHRyKG5ldyBSZW1vdmVBdHRyaWJ1dGVBY3Rpb24oZWxlbWVudCwg
bmFtZSkpLCBlYyk7CiB9CiAKLWJvb2wgRE9NRWRpdG9yOjpzZXRPdXRlckhUTUwoTm9kZSogbm9k
ZSwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Citib29sIERPTUVkaXRvcjo6c2V0T3V0ZXJIVE1MKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYg
aHRtbCwgTm9kZSoqIG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIE93blB0cjxT
ZXRPdXRlckhUTUxBY3Rpb24+IGFjdGlvbiA9IGFkb3B0UHRyKG5ldyBTZXRPdXRlckhUTUxBY3Rp
b24obm9kZSwgaHRtbCkpOwogICAgIFNldE91dGVySFRNTEFjdGlvbiogcmF3QWN0aW9uID0gYWN0
aW9uLmdldCgpOwpAQCAtNDM5LDcgKzQzOSw3IEBAIGJvb2wgRE9NRWRpdG9yOjpyZW1vdmVBdHRy
aWJ1dGUoRWxlbWVudCoKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIERPTUVkaXRvcjo6
c2V0T3V0ZXJIVE1MKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5ld05v
ZGUsIEVycm9yU3RyaW5nKiBlcnJvclN0cmluZykKK2Jvb2wgRE9NRWRpdG9yOjpzZXRPdXRlckhU
TUwoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXJyb3JT
dHJpbmcqIGVycm9yU3RyaW5nKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGJv
b2wgcmVzdWx0ID0gc2V0T3V0ZXJIVE1MKG5vZGUsIGh0bWwsIG5ld05vZGUsIGVjKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NRWRpdG9yLmgJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01FZGl0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCByZW1vdmVDaGlsZChOb2RlKiBwYXJlbnROb2Rl
LCBOb2RlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgc2V0QXR0cmlidXRlKEVsZW1lbnQq
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBib29sIHJlbW92ZUF0dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBzZXRPdXRlckhUTUwoTm9kZSosIGNvbnN0IFN0
cmluZyYgaHRtbCwgTm9kZSoqIG5ld05vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBib29sIHNl
dE91dGVySFRNTChOb2RlJiwgY29uc3QgU3RyaW5nJiBodG1sLCBOb2RlKiogbmV3Tm9kZSwgRXhj
ZXB0aW9uQ29kZSYpOwogICAgIGJvb2wgcmVwbGFjZVdob2xlVGV4dChUZXh0KiwgY29uc3QgU3Ry
aW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAgICAgYm9vbCByZXBsYWNlQ2hpbGQoTm9kZSog
cGFyZW50Tm9kZSwgUGFzc1JlZlB0cjxOb2RlPiBuZXdOb2RlLCBOb2RlKiBvbGROb2RlLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgYm9vbCBzZXROb2RlVmFsdWUoTm9kZSogcGFyZW50Tm9kZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtNjUsNyArNjUsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCByZW1vdmVDaGlsZChOb2RlKiBwYXJlbnROb2RlLCBOb2RlKiwgRXJyb3JT
dHJpbmcqKTsKICAgICBib29sIHNldEF0dHJpYnV0ZShFbGVtZW50KiwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFcnJvclN0cmluZyopOwogICAgIGJvb2wgcmVtb3Zl
QXR0cmlidXRlKEVsZW1lbnQqLCBjb25zdCBTdHJpbmcmIG5hbWUsIEVycm9yU3RyaW5nKik7Ci0g
ICAgYm9vbCBzZXRPdXRlckhUTUwoTm9kZSosIGNvbnN0IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5l
d05vZGUsIEVycm9yU3RyaW5nKik7CisgICAgYm9vbCBzZXRPdXRlckhUTUwoTm9kZSYsIGNvbnN0
IFN0cmluZyYgaHRtbCwgTm9kZSoqIG5ld05vZGUsIEVycm9yU3RyaW5nKik7CiAgICAgYm9vbCBy
ZXBsYWNlV2hvbGVUZXh0KFRleHQqLCBjb25zdCBTdHJpbmcmIHRleHQsIEVycm9yU3RyaW5nKik7
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hTdXBw
b3J0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0Y2hT
dXBwb3J0LmNwcAkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0RPTVBhdGNoU3VwcG9ydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSwzMiArMTE5LDMyIEBA
IHZvaWQgRE9NUGF0Y2hTdXBwb3J0OjpwYXRjaERvY3VtZW50KGNvbnMKICAgICB9CiB9CiAKLU5v
ZGUqIERPTVBhdGNoU3VwcG9ydDo6cGF0Y2hOb2RlKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYg
bWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYykKK05vZGUqIERPTVBhdGNoU3VwcG9ydDo6cGF0Y2hO
b2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICAvLyBEb24ndCBwYXJzZSA8aHRtbD4gYXMgYSBmcmFnbWVudC4KLSAgICBpZiAobm9k
ZS0+aXNEb2N1bWVudE5vZGUoKSB8fCAobm9kZS0+cGFyZW50Tm9kZSgpICYmIG5vZGUtPnBhcmVu
dE5vZGUoKS0+aXNEb2N1bWVudE5vZGUoKSkpIHsKKyAgICBpZiAobm9kZS5pc0RvY3VtZW50Tm9k
ZSgpIHx8IChub2RlLnBhcmVudE5vZGUoKSAmJiBub2RlLnBhcmVudE5vZGUoKS0+aXNEb2N1bWVu
dE5vZGUoKSkpIHsKICAgICAgICAgcGF0Y2hEb2N1bWVudChtYXJrdXApOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLT5wcmV2aW91
c1NpYmxpbmcoKTsKKyAgICBOb2RlKiBwcmV2aW91c1NpYmxpbmcgPSBub2RlLnByZXZpb3VzU2li
bGluZygpOwogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgc2hvdWxkIHVzZSBvbmUgb2YgY3JlYXRl
RnJhZ21lbnQqIGluIG1hcmt1cC5oCiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gRG9jdW1lbnRGcmFnbWVudDo6Y3JlYXRlKCptX2RvY3VtZW50KTsKICAgICBpZiAobV9k
b2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlSFRNTCht
YXJrdXAsIG5vZGUtPnBhcmVudEVsZW1lbnQoKSA/IG5vZGUtPnBhcmVudEVsZW1lbnQoKSA6IG1f
ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKTsKKyAgICAgICAgZnJhZ21lbnQtPnBhcnNlSFRN
TChtYXJrdXAsIG5vZGUucGFyZW50RWxlbWVudCgpID8gbm9kZS5wYXJlbnRFbGVtZW50KCkgOiBt
X2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSk7CiAgICAgZWxzZQotICAgICAgICBmcmFnbWVu
dC0+cGFyc2VYTUwobWFya3VwLCBub2RlLT5wYXJlbnRFbGVtZW50KCkgPyBub2RlLT5wYXJlbnRF
bGVtZW50KCkgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSk7CisgICAgICAgIGZyYWdt
ZW50LT5wYXJzZVhNTChtYXJrdXAsIG5vZGUucGFyZW50RWxlbWVudCgpID8gbm9kZS5wYXJlbnRF
bGVtZW50KCkgOiBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSk7CiAKICAgICAvLyBDb21w
b3NlIHRoZSBvbGQgbGlzdC4KLSAgICBDb250YWluZXJOb2RlKiBwYXJlbnROb2RlID0gbm9kZS0+
cGFyZW50Tm9kZSgpOwotICAgIFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+IG9sZExpc3Q7CisgICAg
Q29udGFpbmVyTm9kZSogcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZSgpOworICAgIFZlY3Rv
cjxPd25QdHI8RGlnZXN0Pj4gb2xkTGlzdDsKICAgICBmb3IgKE5vZGUqIGNoaWxkID0gcGFyZW50
Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkK
ICAgICAgICAgb2xkTGlzdC5hcHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAwKSk7CiAKICAgICAv
LyBDb21wb3NlIHRoZSBuZXcgbGlzdC4KICAgICBTdHJpbmcgbWFya3VwQ29weSA9IG1hcmt1cC5s
b3dlcigpOwogICAgIFZlY3RvcjxPd25QdHI8RGlnZXN0PiA+IG5ld0xpc3Q7Ci0gICAgZm9yIChO
b2RlKiBjaGlsZCA9IHBhcmVudE5vZGUtPmZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbm9kZTsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICBmb3IgKE5vZGUqIGNoaWxkID0gcGFyZW50
Tm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZCAhPSAmbm9kZTsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKSkKICAgICAgICAgbmV3TGlzdC5hcHBlbmQoY3JlYXRlRGlnZXN0KGNoaWxkLCAwKSk7
CiAgICAgZm9yIChOb2RlKiBjaGlsZCA9IGZyYWdtZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aGFzVGFn
TmFtZShoZWFkVGFnKSAmJiAhY2hpbGQtPmZpcnN0Q2hpbGQoKSAmJiBtYXJrdXBDb3B5LmZpbmQo
IjwvaGVhZD4iKSA9PSBub3RGb3VuZCkKQEAgLTE1MywxMyArMTUzLDEzIEBAIE5vZGUqIERPTVBh
dGNoU3VwcG9ydDo6cGF0Y2hOb2RlKE5vZGUqIG4KICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBI
VE1MNSBwYXJzZXIgaW5zZXJ0cyBlbXB0eSA8Ym9keT4gdGFnIHdoZW5ldmVyIGl0IHBhcnNlcyA8
L2hlYWQ+CiAgICAgICAgIG5ld0xpc3QuYXBwZW5kKGNyZWF0ZURpZ2VzdChjaGlsZCwgJm1fdW51
c2VkTm9kZXNNYXApKTsKICAgICB9Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgIGZvciAo
Tm9kZSogY2hpbGQgPSBub2RlLm5leHRTaWJsaW5nKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKQogICAgICAgICBuZXdMaXN0LmFwcGVuZChjcmVhdGVEaWdlc3QoY2hpbGQs
IDApKTsKIAogICAgIGlmICghaW5uZXJQYXRjaENoaWxkcmVuKHBhcmVudE5vZGUsIG9sZExpc3Qs
IG5ld0xpc3QsIGVjKSkgewogICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdG90YWwgcmVwbGFjZS4K
ICAgICAgICAgZWMgPSAwOwotICAgICAgICBpZiAoIW1fZG9tRWRpdG9yLT5yZXBsYWNlQ2hpbGQo
cGFyZW50Tm9kZSwgZnJhZ21lbnQucmVsZWFzZSgpLCBub2RlLCBlYykpCisgICAgICAgIGlmICgh
bV9kb21FZGl0b3ItPnJlcGxhY2VDaGlsZChwYXJlbnROb2RlLCBmcmFnbWVudC5yZWxlYXNlKCks
ICZub2RlLCBlYykpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgcmV0dXJuIHBy
ZXZpb3VzU2libGluZyA/IHByZXZpb3VzU2libGluZy0+bmV4dFNpYmxpbmcoKSA6IHBhcmVudE5v
ZGUtPmZpcnN0Q2hpbGQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9ET01QYXRj
aFN1cHBvcnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NUGF0
Y2hTdXBwb3J0LmgJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9ET01QYXRjaFN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB+RE9NUGF0Y2hTdXBwb3J0KCk7CiAKICAgICB2b2lkIHBhdGNoRG9j
dW1lbnQoY29uc3QgU3RyaW5nJiBtYXJrdXApOwotICAgIE5vZGUqIHBhdGNoTm9kZShOb2RlKiwg
Y29uc3QgU3RyaW5nJiBtYXJrdXAsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBOb2RlKiBwYXRjaE5v
ZGUoTm9kZSYsIGNvbnN0IFN0cmluZyYgbWFya3VwLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZh
dGU6CiAgICAgc3RydWN0IERpZ2VzdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzY4LDcgKzc2OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldE91dGVySFRNTChFcnIK
ICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybjsKIAotICAgICpvdXRlckhUTUwgPSBjcmVh
dGVNYXJrdXAobm9kZSk7CisgICAgKm91dGVySFRNTCA9IGNyZWF0ZU1hcmt1cCgqbm9kZSk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnJvclN0cmluZyogZXJy
b3JTdHJpbmcsIGludCBub2RlSWQsIGNvbnN0IFN0cmluZyYgb3V0ZXJIVE1MKQpAQCAtNzk0LDcg
Kzc5NCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldE91dGVySFRNTChFcnIKICAgICB9
CiAKICAgICBOb2RlKiBuZXdOb2RlID0gMDsKLSAgICBpZiAoIW1fZG9tRWRpdG9yLT5zZXRPdXRl
ckhUTUwobm9kZSwgb3V0ZXJIVE1MLCAmbmV3Tm9kZSwgZXJyb3JTdHJpbmcpKQorICAgIGlmICgh
bV9kb21FZGl0b3ItPnNldE91dGVySFRNTCgqbm9kZSwgb3V0ZXJIVE1MLCAmbmV3Tm9kZSwgZXJy
b3JTdHJpbmcpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIW5ld05vZGUpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFyY2hpdmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9hcmNoaXZlL2NmL0xlZ2FjeVdlYkFy
Y2hpdmUuY3BwCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvYXJj
aGl2ZS9jZi9MZWdhY3lXZWJBcmNoaXZlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAs
NyBAQAogI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQxLDcgKzQ0Miw3IEBAIFBhc3NS
ZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gTGVnYWN5V2ViQXIKICAgICB9CiAgICAgICAgIAogICAg
IFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7Ci0gICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGNyZWF0
ZU1hcmt1cChub2RlLCBJbmNsdWRlTm9kZSwgJm5vZGVMaXN0LCBEb05vdFJlc29sdmVVUkxzLCB0
YWdOYW1lc1RvRmlsdGVyLmdldCgpKTsKKyAgICBTdHJpbmcgbWFya3VwU3RyaW5nID0gY3JlYXRl
TWFya3VwKCpub2RlLCBJbmNsdWRlTm9kZSwgJm5vZGVMaXN0LCBEb05vdFJlc29sdmVVUkxzLCB0
YWdOYW1lc1RvRmlsdGVyLmdldCgpKTsKICAgICBOb2RlOjpOb2RlVHlwZSBub2RlVHlwZSA9IG5v
ZGUtPm5vZGVUeXBlKCk7CiAgICAgaWYgKG5vZGVUeXBlICE9IE5vZGU6OkRPQ1VNRU5UX05PREUg
JiYgbm9kZVR5cGUgIT0gTm9kZTo6RE9DVU1FTlRfVFlQRV9OT0RFKQogICAgICAgICBtYXJrdXBT
dHJpbmcgPSBkb2N1bWVudFR5cGVTdHJpbmcobm9kZS0+ZG9jdW1lbnQoKSkgKyBtYXJrdXBTdHJp
bmc7CkBAIC00NzYsMjIgKzQ3NywyMSBAQCBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExl
Z2FjeVdlYkFyCiBQYXNzUmVmUHRyPExlZ2FjeVdlYkFyY2hpdmU+IExlZ2FjeVdlYkFyY2hpdmU6
OmNyZWF0ZShSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIAogICAgIE5vZGUqIHN0YXJ0Q29udGFp
bmVyID0gcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCk7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lcikK
LSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAKICAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBzdGFydENvbnRhaW5lci0+ZG9jdW1lbnQoKTsKIAogICAg
IEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgVmVjdG9yPE5vZGUqPiBub2RlTGlzdDsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgYWx3YXlzICJmb3Ig
aW50ZXJjaGFuZ2UiLiBJcyB0aGF0IHJpZ2h0PyBTZWUgdGhlIHByZXZpb3VzIG1ldGhvZC4KLSAg
ICBTdHJpbmcgbWFya3VwU3RyaW5nID0gZG9jdW1lbnRUeXBlU3RyaW5nKGRvY3VtZW50KSArIGNy
ZWF0ZU1hcmt1cChyYW5nZSwgJm5vZGVMaXN0LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKTsKKyAg
ICBWZWN0b3I8Tm9kZSo+IG5vZGVMaXN0OworICAgIFN0cmluZyBtYXJrdXBTdHJpbmcgPSBkb2N1
bWVudFR5cGVTdHJpbmcoZG9jdW1lbnQpICsgY3JlYXRlTWFya3VwKCpyYW5nZSwgJm5vZGVMaXN0
LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlKTsKIAogICAgIHJldHVybiBjcmVhdGUobWFya3VwU3Ry
aW5nLCBmcmFtZSwgbm9kZUxpc3QsIDApOwogfQpAQCAtNTg1LDE2ICs1ODUsMjEgQEAgUGFzc1Jl
ZlB0cjxMZWdhY3lXZWJBcmNoaXZlPiBMZWdhY3lXZWJBcgogUGFzc1JlZlB0cjxMZWdhY3lXZWJB
cmNoaXZlPiBMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGVGcm9tU2VsZWN0aW9uKEZyYW1lKiBmcmFt
ZSkKIHsKICAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQo
ZG9jdW1lbnRUeXBlU3RyaW5nKCpkb2N1bWVudCkpOwogCi0gICAgUmVmUHRyPFJhbmdlPiBzZWxl
Y3Rpb25SYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwogICAg
IFZlY3RvcjxOb2RlKj4gbm9kZUxpc3Q7Ci0gICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGRvY3Vt
ZW50VHlwZVN0cmluZygqZG9jdW1lbnQpICsgY3JlYXRlTWFya3VwKHNlbGVjdGlvblJhbmdlLmdl
dCgpLCAmbm9kZUxpc3QsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UpOworICAgIFJlZlB0cjxSYW5n
ZT4gc2VsZWN0aW9uUmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KTsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGNyZWF0
ZU1hcmt1cCgqc2VsZWN0aW9uUmFuZ2UsICZub2RlTGlzdCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5n
ZSkpOwogCisgICAgU3RyaW5nIG1hcmt1cFN0cmluZyA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKICAg
ICBSZWZQdHI8TGVnYWN5V2ViQXJjaGl2ZT4gYXJjaGl2ZSA9IGNyZWF0ZShtYXJrdXBTdHJpbmcs
IGZyYW1lLCBub2RlTGlzdCwgMCk7CiAgICAgCiAgICAgaWYgKCFkb2N1bWVudC0+aXNGcmFtZVNl
dCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVy
LmNwcAkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVu
dUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjAsNyArMzYwLDcgQEAgdm9pZCBD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SQogCiAgICAgICAgICAgICBEb2N1bWVu
dCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKICAgICAgICAgICAgIEFTU0VSVChkb2N1
bWVudCk7Ci0gICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1h
bmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwgY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKGRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRp
b25zKTsKKyAgICAgICAgICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFu
ZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoKmRvY3VtZW50LCBjcmVhdGVGcmFn
bWVudEZyb21NYXJrdXAoKmRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRp
b25zKTsKICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKICAgICAgICAgICAgIGZy
YW1lU2VsZWN0aW9uLnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdl
SWZOZWVkZWQpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE4ICs2NCwxOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIGlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKE5vZGUq
IG5vZGUpCitzdGF0aWMgYm9vbCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShjb25zdCBOb2RlJiBu
b2RlKQogewotICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgpKQorICAgIGlmICghbm9kZS5p
c0hUTUxFbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsKLSAgICBpZiAoIWVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjptZXRhVGFnKSkKKyAgICBjb25zdCBIVE1MRWxlbWVudCYgZWxlbWVu
dCA9IHRvSFRNTEVsZW1lbnQobm9kZSk7CisgICAgaWYgKCFlbGVtZW50Lmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjptZXRhVGFnKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEhUTUxNZXRhQ2hh
cnNldFBhcnNlcjo6QXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOwotICAgIGlmIChlbGVtZW50LT5o
YXNBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1l
bnQtPmF0dHJpYnV0ZUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgY29uc3QgQXR0cmlidXRl
JiBhdHRyaWJ1dGUgPSBlbGVtZW50LT5hdHRyaWJ1dGVBdChpKTsKKyAgICBpZiAoZWxlbWVudC5o
YXNBdHRyaWJ1dGVzKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVsZW1l
bnQuYXR0cmlidXRlQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUm
IGF0dHJpYnV0ZSA9IGVsZW1lbnQuYXR0cmlidXRlQXQoaSk7CiAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRyaWJ1dGUgaWYgdGhl
eSBoYXZlIGEgbmFtZXNwYWNlLgogICAgICAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQoc3RkOjpt
YWtlX3BhaXIoYXR0cmlidXRlLm5hbWUoKS50b1N0cmluZygpLCBhdHRyaWJ1dGUudmFsdWUoKS5z
dHJpbmcoKSkpOwogICAgICAgICB9CkBAIC04NCw5ICs4NCw5IEBAIHN0YXRpYyBib29sIGlzQ2hh
cnNldFNwZWNpZnlpbmdOb2RlKE5vZGUKICAgICByZXR1cm4gdGV4dEVuY29kaW5nLmlzVmFsaWQo
KTsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlRWxlbWVudChFbGVtZW50KiBlbGVtZW50
KQorc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50
KQogewotICAgIHJldHVybiBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFn
KSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bm9zY3JpcHRUYWcpIHx8IGlzQ2hh
cnNldFNwZWNpZnlpbmdOb2RlKGVsZW1lbnQpOworICAgIHJldHVybiBlbGVtZW50Lmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
Om5vc2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsKIH0KIAog
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGNv
bnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lcikKQEAgLTk1LDY0ICs5NSw2MyBA
QCBzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZnJhbWVPd25lclVSCiAgICAgcmV0dXJuIGlz
SFRNTE9iamVjdEVsZW1lbnQoZnJhbWVPd25lcikgPyBIVE1MTmFtZXM6OmRhdGFBdHRyIDogSFRN
TE5hbWVzOjpzcmNBdHRyOwogfQogCi1jbGFzcyBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3Ig
OiBwdWJsaWMgV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3IgeworY2xhc3MgU2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yIGZpbmFsIDogcHVibGljIFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9y
IHsKIHB1YmxpYzoKLSAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6
ZXIqLCBEb2N1bWVudCosIFZlY3RvcjxOb2RlKj4qKTsKKyAgICBTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3IoUGFnZVNlcmlhbGl6ZXImLCBEb2N1bWVudCYsIFZlY3RvcjxOb2RlKj4qKTsKICAg
ICB2aXJ0dWFsIH5TZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoKTsKIAotcHJvdGVjdGVkOgot
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCopOwot
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRl
cyhTdHJpbmdCdWlsZGVyJiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7Ci0KIHByaXZhdGU6Ci0gICAgUGFnZVNlcmlhbGl6
ZXIqIG1fc2VyaWFsaXplcjsKLSAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKKyAgICBQYWdlU2Vy
aWFsaXplciYgbV9zZXJpYWxpemVyOworICAgIERvY3VtZW50JiBtX2RvY3VtZW50OworCisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYsIGNvbnN0IFRleHQmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiwgY29u
c3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVz
cGFjZXMqKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKGNvbnN0IE5v
ZGUmKSBvdmVycmlkZTsKIH07CiAKLVNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6U2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiBzZXJpYWxpemVyLCBEb2N1bWVu
dCogZG9jdW1lbnQsIFZlY3RvcjxOb2RlKj4qIG5vZGVzKQorU2VyaWFsaXplck1hcmt1cEFjY3Vt
dWxhdG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXImIHNlcmlh
bGl6ZXIsIERvY3VtZW50JiBkb2N1bWVudCwgVmVjdG9yPE5vZGUqPiogbm9kZXMpCiAgICAgOiBN
YXJrdXBBY2N1bXVsYXRvcihub2RlcywgUmVzb2x2ZUFsbFVSTHMpCiAgICAgLCBtX3NlcmlhbGl6
ZXIoc2VyaWFsaXplcikKICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiB7CiAgICAgLy8gTWFy
a3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28g
d2UgYWRkIGl0IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3Bl
Y2lmaWVkLgotICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3Vt
ZW50LT54bWxTdGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQotICAg
ICAgICBhcHBlbmRTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIiICsgbV9kb2N1bWVudC0+eG1sVmVy
c2lvbigpICsgIlwiIGVuY29kaW5nPVwiIiArIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSArICJcIj8+
Iik7CisgICAgaWYgKG1fZG9jdW1lbnQuaXNYSFRNTERvY3VtZW50KCkgfHwgbV9kb2N1bWVudC54
bWxTdGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC5pc1NWR0RvY3VtZW50KCkpCisgICAgICAgIGFw
cGVuZFN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIgKyBtX2RvY3VtZW50LnhtbFZlcnNpb24oKSAr
ICJcIiBlbmNvZGluZz1cIiIgKyBtX2RvY3VtZW50LmNoYXJzZXQoKSArICJcIj8+Iik7CiB9CiAK
IFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRv
cigpCiB7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0
KFN0cmluZ0J1aWxkZXImIG91dCwgVGV4dCogdGV4dCkKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYgdGV4
dCkKIHsKLSAgICBFbGVtZW50KiBwYXJlbnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAg
aWYgKHBhcmVudCAmJiAhc2hvdWxkSWdub3JlRWxlbWVudChwYXJlbnQpKQorICAgIEVsZW1lbnQq
IHBhcmVudCA9IHRleHQucGFyZW50RWxlbWVudCgpOworICAgIGlmIChwYXJlbnQgJiYgIXNob3Vs
ZElnbm9yZUVsZW1lbnQoKnBhcmVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRUZXh0KG91dCwgdGV4dCk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFt
ZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
TmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQo
ZWxlbWVudCkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwg
ZWxlbWVudCwgbmFtZXNwYWNlcyk7CiAKLSAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKSB7CisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
OmhlYWRUYWcpKSB7CiAgICAgICAgIG91dC5hcHBlbmQoIjxtZXRhIGNoYXJzZXQ9XCIiKTsKLSAg
ICAgICAgb3V0LmFwcGVuZChtX2RvY3VtZW50LT5jaGFyc2V0KCkpOworICAgICAgICBvdXQuYXBw
ZW5kKG1fZG9jdW1lbnQuY2hhcnNldCgpKTsKICAgICAgICAgb3V0LmFwcGVuZCgiXCI+Iik7CiAg
ICAgfQogCiAgICAgLy8gRklYTUU6IEZvciBvYmplY3QgKHBsdWdpbnMpIHRhZ3MgYW5kIHZpZGVv
IHRhZyB3ZSBjb3VsZCByZXBsYWNlIHRoZW0gYnkgYW4gaW1hZ2Ugb2YgdGhlaXIgY3VycmVudCBj
b250ZW50cy4KIH0KIAotdm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1
c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1l
c3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewotICAgIGlmICghZWxlbWVudC0+aXNG
cmFtZU93bmVyRWxlbWVudCgpKQorICAgIGlmICghZWxlbWVudC5pc0ZyYW1lT3duZXJFbGVtZW50
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVP
d25lciA9IHRvRnJhbWVPd25lckVsZW1lbnQoZWxlbWVudCk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCk7CisgICAgY29uc3QgSFRNTEZyYW1lT3duZXJFbGVt
ZW50JiBmcmFtZU93bmVyID0gdG9GcmFtZU93bmVyRWxlbWVudChlbGVtZW50KTsKKyAgICBGcmFt
ZSogZnJhbWUgPSBmcmFtZU93bmVyLmNvbnRlbnRGcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMTYxLDEzICsxNjAsMTMgQEAgdm9pZCBTZXJpYWxpemVyTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBuZWVk
IHRvIGdpdmUgYSBmYWtlIGxvY2F0aW9uIHRvIGJsYW5rIGZyYW1lcyBzbyB0aGV5IGNhbiBiZSBy
ZWZlcmVuY2VkIGJ5IHRoZSBzZXJpYWxpemVkIGZyYW1lLgotICAgIHVybCA9IG1fc2VyaWFsaXpl
ci0+dXJsRm9yQmxhbmtGcmFtZShmcmFtZSk7Ci0gICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxl
bWVudCwgQXR0cmlidXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwg
dXJsLnN0cmluZygpKSwgbmFtZXNwYWNlcyk7CisgICAgdXJsID0gbV9zZXJpYWxpemVyLnVybEZv
ckJsYW5rRnJhbWUoZnJhbWUpOworICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsIEF0
dHJpYnV0ZShmcmFtZU93bmVyVVJMQXR0cmlidXRlTmFtZShmcmFtZU93bmVyKSwgdXJsLnN0cmlu
ZygpKSwgbmFtZXNwYWNlcyk7CiB9CiAKLXZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbmRUYWcoTm9kZSogbm9kZSkKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbmRUYWcoY29uc3QgTm9kZSYgbm9kZSkKIHsKLSAgICBpZiAobm9kZS0+aXNF
bGVtZW50Tm9kZSgpICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHRvRWxlbWVudChub2RlKSkpCisg
ICAgaWYgKG5vZGUuaXNFbGVtZW50Tm9kZSgpICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHRvRWxl
bWVudChub2RlKSkpCiAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcobm9k
ZSk7CiB9CiAKQEAgLTIxMCwxNCArMjA5LDE0IEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZUZyYW1lKEZyYW0KICAgICB9CiAKICAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzOwotICAgIFNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcih0aGlzLCBkb2N1bWVudCwgJm5v
ZGVzKTsKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0b3IoKnRoaXMs
ICpkb2N1bWVudCwgJm5vZGVzKTsKICAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nKGRvY3Vt
ZW50LT5jaGFyc2V0KCkpOwogICAgIENTdHJpbmcgZGF0YTsKICAgICBpZiAoIXRleHRFbmNvZGlu
Zy5pc1ZhbGlkKCkpIHsKICAgICAgICAgLy8gRklYTUU6IGlmcmFtZXMgdXNlZCBhcyBpbWFnZXMg
dHJpZ2dlciB0aGlzLiBXZSBzaG91bGQgZGVhbCB3aXRoIHRoZW0gY29ycmVjdGx5LgogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0b3Iuc2VyaWFsaXpl
Tm9kZXMoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwLCBJbmNsdWRlTm9kZSk7CisgICAg
U3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2RlcygqZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpLCAwLCBJbmNsdWRlTm9kZSk7CiAgICAgQ1N0cmluZyBmcmFtZUhUTUwgPSB0
ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHQuY2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBFbnRp
dGllc0ZvclVuZW5jb2RhYmxlcyk7CiAgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1
cmwsIGRvY3VtZW50LT5zdWdnZXN0ZWRNSU1FVHlwZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShm
cmFtZUhUTUwuZGF0YSgpLCBmcmFtZUhUTUwubGVuZ3RoKCkpKSk7CiAgICAgbV9yZXNvdXJjZVVS
THMuYWRkKHVybCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVj
dEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuY3BwCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAg
U3RyaW5nIERhdGFPYmplY3RHdGs6OnRleHQoKSBjb25zdAogU3RyaW5nIERhdGFPYmplY3RHdGs6
Om1hcmt1cCgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcmFuZ2UpCi0gICAgICAgIHJldHVybiBjcmVh
dGVNYXJrdXAobV9yYW5nZS5nZXQoKSwgMCwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2Us
IFJlc29sdmVOb25Mb2NhbFVSTHMpOworICAgICAgICByZXR1cm4gY3JlYXRlTWFya3VwKCptX3Jh
bmdlLCAwLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJM
cyk7CiAgICAgcmV0dXJuIG1fbWFya3VwOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCShyZXZpc2lvbiAxNTY5ODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE2MSw3ICsxNjEsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdl
KiBzCiB7CiAgICAgbV9kYXRhT2JqZWN0LT5jbGVhckFsbCgpOwogICAgIG1fZGF0YU9iamVjdC0+
c2V0VGV4dChzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQgPT0gSW5jbHVk
ZUltYWdlQWx0VGV4dEZvckNsaXBib2FyZCA/IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHRG
b3JDbGlwYm9hcmQoKSA6IGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKSk7Ci0gICAgbV9k
YXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKHNlbGVjdGVkUmFuZ2UsIDAsIEFubm90
YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7CisgICAgbV9k
YXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKCpzZWxlY3RlZFJhbmdlLCAwLCBBbm5v
dGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOwogCiAgICAg
aWYgKG1fZ3RrQ2xpcGJvYXJkKQogICAgICAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFz
dGVib2FyZEhlbHBlcigpLT53cml0ZUNsaXBib2FyZENvbnRlbnRzKG1fZ3RrQ2xpcGJvYXJkLCBj
YW5TbWFydENvcHlPckRlbGV0ZSA/IFBhc3RlYm9hcmRIZWxwZXI6OkluY2x1ZGVTbWFydFBhc3Rl
IDogUGFzdGVib2FyZEhlbHBlcjo6RG9Ob3RJbmNsdWRlU21hcnRQYXN0ZSk7CkBAIC0yMjQsNyAr
MjI0LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIGlm
ICghdXJsLmlzRW1wdHkoKSkgewogICAgICAgICBtX2RhdGFPYmplY3QtPnNldFVSTCh1cmwsIHRp
dGxlKTsKIAotICAgICAgICBtX2RhdGFPYmplY3QtPnNldE1hcmt1cChjcmVhdGVNYXJrdXAodG9F
bGVtZW50KG5vZGUpLCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKKyAgICAgICAg
bV9kYXRhT2JqZWN0LT5zZXRNYXJrdXAoY3JlYXRlTWFya3VwKCp0b0VsZW1lbnQobm9kZSksIElu
Y2x1ZGVOb2RlLCAwLCBSZXNvbHZlQWxsVVJMcykpOwogICAgIH0KIAogICAgIEdSZWZQdHI8R2Rr
UGl4YnVmPiBwaXhidWYgPSBhZG9wdEdSZWYoaW1hZ2UtPmdldEdka1BpeGJ1ZigpKTsKQEAgLTMx
MSw3ICszMTEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAg
ICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKIAogICAgIGlmIChtX2RhdGFPYmplY3QtPmhhc01h
cmt1cCgpKSB7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgbV9kYXRhT2JqZWN0LT5t
YXJrdXAoKSwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50
KTsKKyAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJh
Z21lbnRGcm9tTWFya3VwKCpmcmFtZS0+ZG9jdW1lbnQoKSwgbV9kYXRhT2JqZWN0LT5tYXJrdXAo
KSwgZW1wdHlTdHJpbmcoKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKICAg
ICAgICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2Uo
KTsKICAgICB9CkBAIC0zMjEsNyArMzIxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBQYXN0ZWJvYXJkOgogCiAgICAgaWYgKG1fZGF0YU9iamVjdC0+aGFzVGV4dCgpKSB7CiAgICAg
ICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LmdldCgpLCBtX2Rh
dGFPYmplY3QtPnRleHQoKSk7CisgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvbnRleHQuZ2V0KCksIG1fZGF0YU9iamVj
dC0+dGV4dCgpKTsKICAgICAgICAgaWYgKGZyYWdtZW50KQogICAgICAgICAgICAgcmV0dXJuIGZy
YWdtZW50LnJlbGVhc2UoKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvUGFzdGVib2FyZElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvUGFzdGVib2FyZElPUy5tbQkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM2MSw3
ICszNjEsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciA9IGZyYW1lLT5s
b2FkZXIoKS5kb2N1bWVudExvYWRlcigpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv
YWRlci0+YWRkQWxsQXJjaGl2ZVJlc291cmNlcyhjb3JlQXJjaGl2ZS5nZXQoKSk7CiAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZy
YW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcuZ2V0KCksIG1haW5SZXNvdXJjZS0+dXJsKCks
IERpc2FsbG93U2NyaXB0aW5nQ29udGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFn
bWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1
cFN0cmluZy5nZXQoKSwgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dTY3JpcHRpbmdDb250
ZW50KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBpZiAoZnJhZ21lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxMyw3ICs2MTMsNyBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpzZW5kKERvY3VtZW50KiBkb2N1CiAKICAgICAgICAgLy8gRklYTUU6IEFjY29yZGlu
ZyB0byBYTUxIdHRwUmVxdWVzdCBMZXZlbCAyLCB0aGlzIHNob3VsZCB1c2UgdGhlIERvY3VtZW50
LmlubmVySFRNTCBhbGdvcml0aG0KICAgICAgICAgLy8gZnJvbSB0aGUgSFRNTDUgc3BlY2lmaWNh
dGlvbiB0byBzZXJpYWxpemUgdGhlIGRvY3VtZW50LgotICAgICAgICBTdHJpbmcgYm9keSA9IGNy
ZWF0ZU1hcmt1cChkb2N1bWVudCk7CisgICAgICAgIFN0cmluZyBib2R5ID0gY3JlYXRlTWFya3Vw
KCpkb2N1bWVudCk7CiAKICAgICAgICAgLy8gRklYTUU6IHRoaXMgc2hvdWxkIHVzZSB2YWx1ZSBv
ZiBkb2N1bWVudC5pbnB1dEVuY29kaW5nIHRvIGRldGVybWluZSB0aGUgZW5jb2RpbmcgdG8gdXNl
LgogICAgICAgICBUZXh0RW5jb2RpbmcgZW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvWE1MU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9YTUxTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQCBTdHJpbmcgWE1MU2VyaWFsaXplcjo6c2VyaWFsaXplVG9TdHJpbmcoCiAgICAg
ICAgIGVjID0gVHlwZUVycm9yOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAgICAgfQotICAg
IHJldHVybiBjcmVhdGVNYXJrdXAobm9kZSwgSW5jbHVkZU5vZGUsIDAsIERvTm90UmVzb2x2ZVVS
THMsIDAsIFhNTEZyYWdtZW50U2VyaWFsaXphdGlvbik7CisgICAgcmV0dXJuIGNyZWF0ZU1hcmt1
cCgqbm9kZSwgSW5jbHVkZU5vZGUsIDAsIERvTm90UmVzb2x2ZVVSTHMsIDAsIFhNTEZyYWdtZW50
U2VyaWFsaXphdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS94bWwvWFNMVFByb2Nlc3Nvci5jcHAJKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3htbC9YU0xUUHJvY2Vzc29yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDcgKzEx
Niw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IFhTTFRQcm9jZXNzb3I6OnRyYW4KICAgICBTdHJp
bmcgcmVzdWx0TUlNRVR5cGU7CiAgICAgU3RyaW5nIHJlc3VsdFN0cmluZzsKICAgICBTdHJpbmcg
cmVzdWx0RW5jb2Rpbmc7Ci0gICAgaWYgKCF0cmFuc2Zvcm1Ub1N0cmluZyhzb3VyY2VOb2RlLCBy
ZXN1bHRNSU1FVHlwZSwgcmVzdWx0U3RyaW5nLCByZXN1bHRFbmNvZGluZykpCisgICAgaWYgKCF0
cmFuc2Zvcm1Ub1N0cmluZygqc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3VsdFN0cmlu
ZywgcmVzdWx0RW5jb2RpbmcpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY3JlYXRl
RG9jdW1lbnRGcm9tU291cmNlKHJlc3VsdFN0cmluZywgcmVzdWx0RW5jb2RpbmcsIHJlc3VsdE1J
TUVUeXBlLCBzb3VyY2VOb2RlLCAwKTsKIH0KQEAgLTEzNCw3ICsxMzQsNyBAQCBQYXNzUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IFhTTFRQcm9jZXNzCiAgICAgaWYgKG91dHB1dERvYy0+aXNIVE1M
RG9jdW1lbnQoKSkKICAgICAgICAgcmVzdWx0TUlNRVR5cGUgPSAidGV4dC9odG1sIjsKIAotICAg
IGlmICghdHJhbnNmb3JtVG9TdHJpbmcoc291cmNlTm9kZSwgcmVzdWx0TUlNRVR5cGUsIHJlc3Vs
dFN0cmluZywgcmVzdWx0RW5jb2RpbmcpKQorICAgIGlmICghdHJhbnNmb3JtVG9TdHJpbmcoKnNv
dXJjZU5vZGUsIHJlc3VsdE1JTUVUeXBlLCByZXN1bHRTdHJpbmcsIHJlc3VsdEVuY29kaW5nKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50Rm9yVHJhbnNmb3Jt
VG9GcmFnbWVudChyZXN1bHRTdHJpbmcsIHJlc3VsdE1JTUVUeXBlLCBvdXRwdXREb2MpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCShyZXZpc2lvbiAxNTY5ODUpCisrKyBT
b3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3Nvci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3
ICs0NSw3IEBAIHB1YmxpYzoKICAgICB+WFNMVFByb2Nlc3NvcigpOwogCiAgICAgdm9pZCBzZXRY
U0xTdHlsZVNoZWV0KFBhc3NSZWZQdHI8WFNMU3R5bGVTaGVldD4gc3R5bGVTaGVldCkgeyBtX3N0
eWxlc2hlZXQgPSBzdHlsZVNoZWV0OyB9Ci0gICAgYm9vbCB0cmFuc2Zvcm1Ub1N0cmluZyhOb2Rl
KiBzb3VyY2UsIFN0cmluZyYgcmVzdWx0TUlNRVR5cGUsIFN0cmluZyYgcmVzdWx0U3RyaW5nLCBT
dHJpbmcmIHJlc3VsdEVuY29kaW5nKTsKKyAgICBib29sIHRyYW5zZm9ybVRvU3RyaW5nKE5vZGUm
IHNvdXJjZSwgU3RyaW5nJiByZXN1bHRNSU1FVHlwZSwgU3RyaW5nJiByZXN1bHRTdHJpbmcsIFN0
cmluZyYgcmVzdWx0RW5jb2RpbmcpOwogICAgIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IGNyZWF0ZURv
Y3VtZW50RnJvbVNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZSwgY29uc3QgU3RyaW5nJiBzb3Vy
Y2VFbmNvZGluZywgY29uc3QgU3RyaW5nJiBzb3VyY2VNSU1FVHlwZSwgTm9kZSogc291cmNlTm9k
ZSwgRnJhbWUqIGZyYW1lKTsKICAgICAKICAgICAvLyBET00gbWV0aG9kcwpJbmRleDogU291cmNl
L1dlYkNvcmUveG1sL1hTTFRQcm9jZXNzb3JMaWJ4c2x0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCShyZXZpc2lvbiAxNTY5ODUp
CisrKyBTb3VyY2UvV2ViQ29yZS94bWwvWFNMVFByb2Nlc3NvckxpYnhzbHQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNTYsNyArMjU2LDcgQEAgc3RhdGljIHhzbHRTdHlsZXNoZWV0UHRyIHhzbHRT
dHlsZXNoZWV0UAogCiAgICAgICAgIC8vIEFjY29yZGluZyB0byBNb3ppbGxhIGRvY3VtZW50YXRp
b24sIHRoZSBub2RlIG11c3QgYmUgYSBEb2N1bWVudCBub2RlLCBhbiB4c2w6c3R5bGVzaGVldCBv
ciB4c2w6dHJhbnNmb3JtIGVsZW1lbnQuCiAgICAgICAgIC8vIEJ1dCB3ZSBqdXN0IHVzZSB0ZXh0
IGNvbnRlbnQgcmVnYXJkbGVzcyBvZiBub2RlIHR5cGUuCi0gICAgICAgIGNhY2hlZFN0eWxlc2hl
ZXQtPnBhcnNlU3RyaW5nKGNyZWF0ZU1hcmt1cChzdHlsZXNoZWV0Um9vdE5vZGUpKTsKKyAgICAg
ICAgY2FjaGVkU3R5bGVzaGVldC0+cGFyc2VTdHJpbmcoY3JlYXRlTWFya3VwKCpzdHlsZXNoZWV0
Um9vdE5vZGUpKTsKICAgICB9CiAKICAgICBpZiAoIWNhY2hlZFN0eWxlc2hlZXQgfHwgIWNhY2hl
ZFN0eWxlc2hlZXQtPmRvY3VtZW50KCkpCkBAIC0yNjUsMTAgKzI2NSwxMCBAQCBzdGF0aWMgeHNs
dFN0eWxlc2hlZXRQdHIgeHNsdFN0eWxlc2hlZXRQCiAgICAgcmV0dXJuIGNhY2hlZFN0eWxlc2hl
ZXQtPmNvbXBpbGVTdHlsZVNoZWV0KCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHht
bERvY1B0ckZyb21Ob2RlKE5vZGUqIHNvdXJjZU5vZGUsIGJvb2wmIHNob3VsZERlbGV0ZSkKK3N0
YXRpYyBpbmxpbmUgeG1sRG9jUHRyIHhtbERvY1B0ckZyb21Ob2RlKE5vZGUmIHNvdXJjZU5vZGUs
IGJvb2wmIHNob3VsZERlbGV0ZSkKIHsKLSAgICBSZWY8RG9jdW1lbnQ+IG93bmVyRG9jdW1lbnQo
c291cmNlTm9kZS0+ZG9jdW1lbnQoKSk7Ci0gICAgYm9vbCBzb3VyY2VJc0RvY3VtZW50ID0gKHNv
dXJjZU5vZGUgPT0gJm93bmVyRG9jdW1lbnQuZ2V0KCkpOworICAgIFJlZjxEb2N1bWVudD4gb3du
ZXJEb2N1bWVudChzb3VyY2VOb2RlLmRvY3VtZW50KCkpOworICAgIGJvb2wgc291cmNlSXNEb2N1
bWVudCA9ICgmc291cmNlTm9kZSA9PSAmb3duZXJEb2N1bWVudC5nZXQoKSk7CiAKICAgICB4bWxE
b2NQdHIgc291cmNlRG9jID0gMDsKICAgICBpZiAoc291cmNlSXNEb2N1bWVudCAmJiBvd25lckRv
Y3VtZW50LT50cmFuc2Zvcm1Tb3VyY2UoKSkKQEAgLTMwMCw5ICszMDAsOSBAQCBzdGF0aWMgaW5s
aW5lIFN0cmluZyByZXN1bHRNSU1FVHlwZSh4bWxECiAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi94
bWwiOwogfQogCi1ib29sIFhTTFRQcm9jZXNzb3I6OnRyYW5zZm9ybVRvU3RyaW5nKE5vZGUqIHNv
dXJjZU5vZGUsIFN0cmluZyYgbWltZVR5cGUsIFN0cmluZyYgcmVzdWx0U3RyaW5nLCBTdHJpbmcm
IHJlc3VsdEVuY29kaW5nKQorYm9vbCBYU0xUUHJvY2Vzc29yOjp0cmFuc2Zvcm1Ub1N0cmluZyhO
b2RlJiBzb3VyY2VOb2RlLCBTdHJpbmcmIG1pbWVUeXBlLCBTdHJpbmcmIHJlc3VsdFN0cmluZywg
U3RyaW5nJiByZXN1bHRFbmNvZGluZykKIHsKLSAgICBSZWY8RG9jdW1lbnQ+IG93bmVyRG9jdW1l
bnQoc291cmNlTm9kZS0+ZG9jdW1lbnQoKSk7CisgICAgUmVmPERvY3VtZW50PiBvd25lckRvY3Vt
ZW50KHNvdXJjZU5vZGUuZG9jdW1lbnQoKSk7CiAKICAgICBzZXRYU0xUTG9hZENhbGxCYWNrKGRv
Y0xvYWRlckZ1bmMsIHRoaXMsIG93bmVyRG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCkp
OwogICAgIHhzbHRTdHlsZXNoZWV0UHRyIHNoZWV0ID0geHNsdFN0eWxlc2hlZXRQb2ludGVyKG1f
c3R5bGVzaGVldCwgbV9zdHlsZXNoZWV0Um9vdE5vZGUuZ2V0KCkpOwpJbmRleDogU291cmNlL1dl
YktpdC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTU2OTg1KQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTMtMTAtMDUgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBDVFRFOiBUaHJlYWQgcmVmZXJlbmNlcyB0aHJvdWdo
IG1hcmt1cC5oCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjI0MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1tOgorICAgICAgICAoLVtET01Ob2RlIG1hcmt1cFN0
cmluZ10pOgorICAgICAgICAoLVtET01SYW5nZSBtYXJrdXBTdHJpbmddKToKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfZG9jdW1lbnRGcmFnbWVu
dFdpdGhNYXJrdXBTdHJpbmc6YmFzZVVSTFN0cmluZzpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUg
X2RvY3VtZW50RnJhZ21lbnRXaXRoTm9kZXNBc1BhcmFncmFwaHM6XSk6CisKIDIwMTMtMTAtMDUg
IFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBDVFRFOiBQYXNzIERvY3Vt
ZW50V3JpdGVyIGFyb3VuZCBhcyBhIHJlZmVyZW5jZQpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
RE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMv
RE9NL1dlYkRPTU9wZXJhdGlvbnMubW0JKHJldmlzaW9uIDE1Njk4NSkKKysrIFNvdXJjZS9XZWJL
aXQvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyAr
MTIyLDcgQEAgLSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmVCeUZpbHRlcmluZ1N1YgogCiAtIChO
U1N0cmluZyAqKW1hcmt1cFN0cmluZwogewotICAgIHJldHVybiBjcmVhdGVGdWxsTWFya3VwKGNv
cmUoc2VsZikpOworICAgIHJldHVybiBjcmVhdGVGdWxsTWFya3VwKCpjb3JlKHNlbGYpKTsKIH0K
IAogLSAoTlNSZWN0KV9yZW5kZXJSZWN0Oihib29sICopaXNSZXBsYWNlZApAQCAtMTcyLDcgKzE3
Miw3IEBAIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCiAKIC0gKE5TU3RyaW5nICopbWFya3Vw
U3RyaW5nCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUZ1bGxNYXJrdXAoY29yZShzZWxmKSk7CisgICAg
cmV0dXJuIGNyZWF0ZUZ1bGxNYXJrdXAoKmNvcmUoc2VsZikpOwogfQogCiBAZW5kCkluZGV4OiBT
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE1Njk4NSkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTcy
MSwyNCArNzIxLDQyIEBAIC0gKERPTVJhbmdlICopX3NtYXJ0RGVsZXRlUmFuZ2VGb3JQcm9wb3MK
IAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0
cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKili
YXNlVVJMU3RyaW5nIAogewotICAgIGlmICghX3ByaXZhdGUtPmNvcmVGcmFtZSB8fCAhX3ByaXZh
dGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBGcmFtZSogZnJhbWUgPSBfcHJpdmF0ZS0+
Y29yZUZyYW1lOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBE
b2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50
KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXAoX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZG9jdW1lbnQoKSwgbWFya3VwU3RyaW5nLCBi
YXNlVVJMU3RyaW5nLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cCgqZG9jdW1lbnQsIG1hcmt1cFN0cmluZywg
YmFzZVVSTFN0cmluZywgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KS5nZXQoKSk7CiB9CiAKIC0g
KERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdy
YXBoczooTlNBcnJheSAqKW5vZGVzCiB7Ci0gICAgaWYgKCFfcHJpdmF0ZS0+Y29yZUZyYW1lIHx8
ICFfcHJpdmF0ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpKQorICAgIEZyYW1lKiBmcmFtZSA9IF9w
cml2YXRlLT5jb3JlRnJhbWU7CisgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICAKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAg
IGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBuaWw7CisKICAgICBOU0VudW1lcmF0b3Ig
Km5vZGVFbnVtID0gW25vZGVzIG9iamVjdEVudW1lcmF0b3JdOwogICAgIFZlY3RvcjxOb2RlKj4g
bm9kZXNWZWN0b3I7CiAgICAgRE9NTm9kZSAqbm9kZTsKICAgICB3aGlsZSAoKG5vZGUgPSBbbm9k
ZUVudW0gbmV4dE9iamVjdF0pKQogICAgICAgICBub2Rlc1ZlY3Rvci5hcHBlbmQoY29yZShub2Rl
KSk7Ci0gICAgCi0gICAgcmV0dXJuIGtpdChjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhfcHJpdmF0
ZS0+Y29yZUZyYW1lLT5kb2N1bWVudCgpLCBub2Rlc1ZlY3RvcikuZ2V0KCkpOworCisgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnQtPmNyZWF0ZURvY3VtZW50
RnJhZ21lbnQoKTsKKworICAgIGZvciAoYXV0byBub2RlIDogbm9kZXNWZWN0b3IpIHsKKyAgICAg
ICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBjcmVhdGVEZWZhdWx0UGFyYWdyYXBoRWxlbWVu
dCgqZG9jdW1lbnQpOworICAgICAgICBlbGVtZW50LT5hcHBlbmRDaGlsZChub2RlLCBBU1NFUlRf
Tk9fRVhDRVBUSU9OKTsKKyAgICAgICAgZnJhZ21lbnQtPmFwcGVuZENoaWxkKGVsZW1lbnQucmVs
ZWFzZSgpLCBBU1NFUlRfTk9fRVhDRVBUSU9OKTsKKyAgICB9CisKKyAgICByZXR1cm4ga2l0KGZy
YWdtZW50LnJlbGVhc2UoKS5nZXQoKSk7CiB9CiAKIC0gKHZvaWQpX3JlcGxhY2VTZWxlY3Rpb25X
aXRoTm9kZTooRE9NTm9kZSAqKW5vZGUgc2VsZWN0UmVwbGFjZW1lbnQ6KEJPT0wpc2VsZWN0UmVw
bGFjZW1lbnQgc21hcnRSZXBsYWNlOihCT09MKXNtYXJ0UmVwbGFjZSBtYXRjaFN0eWxlOihCT09M
KW1hdGNoU3R5bGUK
</data>

          </attachment>
      

    </bug>

</bugzilla>