<?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>193481</bug_id>
          
          <creation_ts>2019-01-15 19:07:27 -0800</creation_ts>
          <short_desc>Add &apos;inline&apos; specifier for declarations for which definitions are defined in separate headers (…Inlines.h)</short_desc>
          <delta_ts>2023-08-17 21:12:04 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=193073</see_also>
          <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="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1494964</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-01-15 19:07:27 -0800</bug_when>
    <thetext>WebKit is using separate headers (…Inlines.h) for some inline functions.
There was a discussion on it.

  [webkit-dev] …Inlines.h vs …InlineMethods.h
  https://lists.webkit.org/pipermail/webkit-dev/2012-November/022703.html

In certain condition of missing inlucing …Inlines.h, this may cause linkage errors only for Windows port.

  Bug 191626 – REGRESSION(r238039) WebCore::JSDOMGlobalObject::createStructure is using JSC::Structure::create without including StructureInlines.h
  Bug 155657 – JSDOMGlobalObject.h needs to #include StructureInlines.h

To prevent such issues, I&apos;d like to experiment using &apos;inline&apos; specifier for declarations in this ticket.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494974</commentid>
    <comment_count>1</comment_count>
      <attachid>359246</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-01-15 19:15:42 -0800</bug_when>
    <thetext>Created attachment 359246
WIP patch

Added &apos;inline&apos; specifiers for some declarations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1494981</commentid>
    <comment_count>2</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-01-15 19:22:00 -0800</bug_when>
    <thetext>This WIP patch reports a lot of warnings such like following. This approach doesn&apos;t seem easy as I expected.

&gt; [12/454] Building CXX object Source\JavaScriptCore\CMakeFiles\JavaScriptCore.dir\API\JSStringRefCF.cpp.obj
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
&gt; In file included from ..\..\Source\JavaScriptCore\interpreter\CallFrame.h:30:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:34:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ConcurrentJSLock.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\heap\DeferGC.h:29:
&gt; ..\..\Source\JavaScriptCore\heap\Heap.h(158,17):  warning: inline function &apos;JSC::Heap::worldIsStopped&apos; is not defined [-Wundefined-inline]
&gt;     inline bool worldIsStopped() const;
&gt;                 ^
&gt; ..\..\Source\JavaScriptCore\heap\Heap.h(159,43):  note: used here
&gt;     bool worldIsRunning() const { return !worldIsStopped(); }
&gt;                                           ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
&gt; In file included from ..\..\Source\JavaScriptCore\heap\SlotVisitor.h:30:
&gt; In file included from ..\..\Source\JavaScriptCore\heap/MarkStack.h:28:
&gt; ..\..\Source\JavaScriptCore\heap/GCSegmentedArray.h(81,17):  warning: inline function &apos;JSC::GCSegmentedArray&lt;const JSC::JSCell *&gt;::isEmpty&apos; is not defined [-Wundefined-inline]
&gt;     inline bool isEmpty();
&gt;                 ^
&gt; ..\..\Source\JavaScriptCore\heap\SlotVisitor.h(120,46):  note: used here
&gt;     bool isEmpty() { return m_collectorStack.isEmpty() &amp;&amp; m_mutatorStack.isEmpty(); }
&gt;                                              ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
&gt; ..\..\Source\JavaScriptCore\runtime/Identifier.h(117,30):  warning: inline function &apos;JSC::Identifier::fromString&apos; is not defined [-Wundefined-inline]
&gt;     inline static Identifier fromString(VM*, const LChar*, int length);
&gt;                              ^
&gt; ..\..\Source\JavaScriptCore\runtime/Identifier.h(124,84):  note: used here
&gt;     static Identifier fromString(VM* vm, const Vector&lt;LChar&gt;&amp; characters) { return fromString(vm, characters.data(), characters.size()); }
&gt;                                                                                    ^
&gt; ..\..\Source\JavaScriptCore\runtime/Identifier.h(126,30):  warning: inline function &apos;JSC::Identifier::fromUid&apos; is not defined [-Wundefined-inline]
&gt;     inline static Identifier fromUid(VM*, UniquedStringImpl* uid);
&gt;                              ^
&gt; ..\..\Source\JavaScriptCore\runtime/PropertyNameArray.h(106,53):  note: used here
&gt;     m_data-&gt;propertyNameVector().append(Identifier::fromUid(m_vm, identifier));
&gt;                                                     ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
&gt; ..\..\Source\JavaScriptCore\runtime/Identifier.h(121,30):  warning: inline function &apos;JSC::Identifier::fromString&apos; is not defined [-Wundefined-inline]
&gt;     inline static Identifier fromString(ExecState*, const AtomicString&amp;);
&gt;                              ^
&gt; ..\..\Source\JavaScriptCore\runtime/JSString.h(533,24):  note: used here
&gt;     return Identifier::fromString(exec, toAtomicString(exec));
&gt;                        ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
&gt; ..\..\Source\JavaScriptCore\runtime/Identifier.h(119,30):  warning: inline function &apos;JSC::Identifier::fromString&apos; is not defined [-Wundefined-inline]
&gt;     inline static Identifier fromString(VM*, const String&amp;);
&gt;                              ^
&gt; ..\..\Source\JavaScriptCore\runtime/JSObject.h(1593,24):  note: used here
&gt;     return Identifier::fromString(&amp;vm, name);
&gt;                        ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
&gt; In file included from ..\..\Source\JavaScriptCore\interpreter\CallFrame.h:30:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:34:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ConcurrentJSLock.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\heap\DeferGC.h:29:
&gt; ..\..\Source\JavaScriptCore\heap\Heap.h(139,23):  warning: inline function &apos;JSC::Heap::vm&apos; is not defined [-Wundefined-inline]
&gt;     ALWAYS_INLINE VM* vm() const;
&gt;                       ^
&gt; ..\..\Source\JavaScriptCore\heap\LocalAllocatorInlines.h(36,53):  note: used here
&gt;             sanitizeStackForVM(m_directory-&gt;heap()-&gt;vm());
&gt;                                                     ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
&gt; ..\..\Source\JavaScriptCore\heap\SlotVisitor.h(85,16):  warning: inline function &apos;JSC::SlotVisitor::vm&apos; is not defined [-Wundefined-inline]
&gt;     inline VM&amp; vm();
&gt;                ^
&gt; ..\..\Source\JavaScriptCore\runtime/JSCellInlines.h(131,55):  note: used here
&gt;     visitor.appendUnbarriered(cell-&gt;structure(visitor.vm()));
&gt;                                                       ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
&gt; ..\..\Source\JavaScriptCore\heap\SlotVisitor.h(108,24):  warning: inline function &apos;JSC::SlotVisitor::appendUnbarriered&apos; is not defined [-Wundefined-inline]
&gt;     ALWAYS_INLINE void appendUnbarriered(JSCell*);
&gt;                        ^
&gt; ..\..\Source\JavaScriptCore\runtime/JSCellInlines.h(131,13):  note: used here
&gt;     visitor.appendUnbarriered(cell-&gt;structure(visitor.vm()));
&gt;             ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/Error.h:25:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ErrorInstance.h:23:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSDestructibleObject.h:28:
&gt; ..\..\Source\JavaScriptCore\runtime/JSObject.h(196,31):  warning: inline function &apos;JSC::JSObject::putInlineForJSObject&apos; is not defined [-Wundefined-inline]
&gt;     ALWAYS_INLINE static bool putInlineForJSObject(JSCell*, ExecState*, PropertyName, JSValue, PutPropertySlot&amp;);
&gt;                               ^
&gt; ..\..\Source\JavaScriptCore\runtime/JSCellInlines.h(408,26):  note: used here
&gt;         return JSObject::putInlineForJSObject(asObject(this), exec, propertyName, value, slot);
&gt;                          ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
&gt; In file included from ..\..\Source\JavaScriptCore\interpreter\CallFrame.h:30:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:34:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ConcurrentJSLock.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\heap\DeferGC.h:29:
&gt; ..\..\Source\JavaScriptCore\heap\Heap.h(110,32):  warning: inline function &apos;JSC::Heap::heap&apos; is not defined [-Wundefined-inline]
&gt;     static ALWAYS_INLINE Heap* heap(const HeapCell*);
&gt;                                ^
&gt; ..\..\Source\JavaScriptCore\runtime\Protect.h(30,11):  note: used here
&gt;     Heap::heap(val)-&gt;protect(val);
&gt;           ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/Error.h:25:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ErrorInstance.h:23:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSDestructibleObject.h:28:
&gt; ..\..\Source\JavaScriptCore\runtime/JSObject.h(602,24):  warning: inline function &apos;JSC::JSObject::hasOwnProperty&apos; is not defined [-Wundefined-inline]
&gt;     ALWAYS_INLINE bool hasOwnProperty(ExecState*, PropertyName) const;
&gt;                        ^
&gt; ..\..\Source\JavaScriptCore\runtime\JSGlobalObject.h(543,14):  note: used here
&gt;         if (!hasOwnProperty(exec, propertyName))
&gt;              ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:36:
&gt; ..\..\Source\JavaScriptCore\runtime/JSFunction.h(168,12):  warning: inline function &apos;JSC::JSFunction::JSFunction&apos; is not defined [-Wundefined-inline]
&gt;     inline JSFunction(VM&amp;, FunctionExecutable*, JSScope*, Structure*);
&gt;            ^
&gt; ..\..\Source\JavaScriptCore\runtime/JSFunction.h(186,81):  note: used here
&gt;         JSFunction* function = new (NotNull, allocateCell&lt;JSFunction&gt;(vm.heap)) JSFunction(vm, executable, scope, structure);
&gt;                                                                                 ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/Structure.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/InferredTypeTable.h:28:
&gt; ..\..\Source\JavaScriptCore\runtime/Identifier.h(128,30):  warning: inline function &apos;JSC::Identifier::fromUid&apos; is not defined [-Wundefined-inline]
&gt;     inline static Identifier fromUid(const PrivateName&amp;);
&gt;                              ^
&gt; ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h(655,47):  note: used here
&gt;         RELEASE_AND_RETURN(scope, Identifier::fromUid(asSymbol(primitive)-&gt;privateName()));
&gt;                                               ^
&gt; In file included from ..\..\Source\JavaScriptCore\API\JSStringRefCF.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:31:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/Error.h:25:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ErrorInstance.h:23:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSDestructibleObject.h:28:
&gt; ..\..\Source\JavaScriptCore\runtime/JSObject.h(175,17):  warning: inline function &apos;JSC::JSObject::getOwnPropertySlotInline&apos; is not defined [-Wundefined-inline]
&gt;     inline bool getOwnPropertySlotInline(ExecState*, PropertyName, PropertySlot&amp;);
&gt;                 ^
&gt; ..\..\Source\JavaScriptCore\runtime\JSCJSValueInlines.h(896,51):  note: used here
&gt;     RELEASE_AND_RETURN(scope, asObject(asCell())-&gt;getOwnPropertySlotInline(exec, propertyName, slot));
&gt;                                                   ^
&gt; 15 warnings generated.
&gt; [13/454] Building CXX object Source\JavaScriptCore\CMakeFiles\JavaScriptCore.dir\__\__\DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp.obj
&gt; In file included from DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp:1:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSWeakPrivate.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:27:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCast.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSCell.h:34:
&gt; In file included from ..\..\Source\JavaScriptCore\heap/SlotVisitor.h:30:
&gt; In file included from ..\..\Source\JavaScriptCore\heap/MarkStack.h:28:
&gt; ..\..\Source\JavaScriptCore\heap/GCSegmentedArray.h(81,17):  warning: inline function &apos;JSC::GCSegmentedArray&lt;const JSC::JSCell *&gt;::isEmpty&apos; is not defined [-Wundefined-inline]
&gt;     inline bool isEmpty();
&gt;                 ^
&gt; ..\..\Source\JavaScriptCore\heap/SlotVisitor.h(120,46):  note: used here
&gt;     bool isEmpty() { return m_collectorStack.isEmpty() &amp;&amp; m_mutatorStack.isEmpty(); }
&gt;                                              ^
&gt; In file included from DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp:1:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSWeakPrivate.cpp:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/APICast.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSAPIValueWrapper.h:25:
&gt; In file included from ..\..\Source\JavaScriptCore\interpreter/CallFrame.h:30:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/VM.h:43:
&gt; ..\..\Source\JavaScriptCore\heap\IsoCellSet.h(50,17):  warning: inline function &apos;JSC::IsoCellSet::remove&apos; is not defined [-Wundefined-inline]
&gt;     inline bool remove(HeapCell* cell); // Returns true if the cell was previously present and got removed.
&gt;                 ^
&gt; ..\..\Source\JavaScriptCore\bytecode\UnlinkedFunctionExecutable.h(118,61):  note: used here
&gt;         vm.unlinkedFunctionExecutableSpace.clearableCodeSet.remove(this);
&gt;                                                             ^
&gt; In file included from DerivedSources\JavaScriptCore\unified-sources\UnifiedSource-d93d10ff-3.cpp:1:
&gt; In file included from ..\..\Source\JavaScriptCore\API/JSWeakPrivate.cpp:30:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime\JSCInlines.h:46:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/JSFunctionInlines.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime\FunctionExecutable.h:29:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ScriptExecutable.h:28:
&gt; In file included from ..\..\Source\JavaScriptCore\runtime/ExecutableBase.h:34:
&gt; In file included from ..\..\Source\JavaScriptCore\bytecode/UnlinkedCodeBlock.h:42:
&gt; ..\..\Source\JavaScriptCore\bytecode/UnlinkedMetadataTable.h(50,26):  warning: inline function &apos;JSC::UnlinkedMetadataTable::sizeInBytes&apos; is not defined [-Wundefined-inline]
&gt;     ALWAYS_INLINE size_t sizeInBytes();
&gt;                          ^
&gt; ..\..\Source\JavaScriptCore\bytecode/UnlinkedCodeBlock.h(364,27):  note: used here
&gt;         return m_metadata.sizeInBytes();
&gt;                           ^
&gt; 3 warnings generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1578109</commentid>
    <comment_count>3</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-09 00:48:14 -0700</bug_when>
    <thetext>Another issue happens.

  Bug 202722 – [Win] error LNK2019: unresolved external symbol &quot;public: __cdecl JSC::Strong&lt;enum JSC::Unknown&gt;::Strong&lt;enum JSC::Unknown&gt;(class JSC::VM &amp;,class JSC::JSValue)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584415</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-10-28 03:15:17 -0700</bug_when>
    <thetext>Another issue: Bug 203483 – [Windows][Clang] error LNK2001: unresolved external symbol &quot;void * __cdecl JSC::allocateCell&lt;class JSC::JSGenericTypedArrayView&lt;struct JSC::Float32Adaptor&gt; &gt;(class JSC::Heap &amp;,unsigned __int64)&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1587322</commentid>
    <comment_count>5</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-11-04 23:43:41 -0800</bug_when>
    <thetext>Discussed in bug 203391 comment 14.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1971977</commentid>
    <comment_count>6</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2023-08-17 21:12:04 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/16822</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>359246</attachid>
            <date>2019-01-15 19:15:42 -0800</date>
            <delta_ts>2019-01-15 19:15:42 -0800</delta_ts>
            <desc>WIP patch</desc>
            <filename>193481.diff</filename>
            <type>text/plain</type>
            <size>86898</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAppbmRleCAxODA1ODU3YTdhOC4u
YThjYTU4NDBjNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKQEAg
LTEyMSwxNCArMTIxLDE0IEBAIHB1YmxpYzoKICAgICBib29sIHJlcGxhY2VTdWNjZXNzb3IoQmFz
aWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwogICAgIAogICAgIC8vIFRoaXMgaXMgb25s
eSB2YWxpZCBmb3IgSnVtcCBhbmQgQnJhbmNoLgotICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYg
dGFrZW4oKSBjb25zdDsKLSAgICBGcmVxdWVudGVkQmxvY2smIHRha2VuKCk7CisgICAgaW5saW5l
IGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFrZW4oKSBjb25zdDsKKyAgICBpbmxpbmUgRnJlcXVl
bnRlZEJsb2NrJiB0YWtlbigpOwogICAgIC8vIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgQnJhbmNo
LgotICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm90VGFrZW4oKSBjb25zdDsKLSAgICBGcmVx
dWVudGVkQmxvY2smIG5vdFRha2VuKCk7CisgICAgaW5saW5lIGNvbnN0IEZyZXF1ZW50ZWRCbG9j
ayYgbm90VGFrZW4oKSBjb25zdDsKKyAgICBpbmxpbmUgRnJlcXVlbnRlZEJsb2NrJiBub3RUYWtl
bigpOwogICAgIC8vIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgQnJhbmNoIGFuZCBTd2l0Y2guCi0g
ICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIGNvbnN0OwotICAgIEZyZXF1
ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKTsKKyAgICBpbmxpbmUgY29uc3QgRnJlcXVlbnRlZEJs
b2NrJiBmYWxsVGhyb3VnaCgpIGNvbnN0OworICAgIGlubGluZSBGcmVxdWVudGVkQmxvY2smIGZh
bGxUaHJvdWdoKCk7CiAKICAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nv
cih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDYXNlQ29sbGVjdGlvbi5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2FzZUNvbGxlY3Rpb24uaAppbmRleCBjNDVj
YzY0MWQ4MC4uOGQxNTk3YTJlNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Nhc2VDb2xsZWN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2Fz
ZUNvbGxlY3Rpb24uaApAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQog
ICAgIAotICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSBjb25zdDsKKyAg
ICBpbmxpbmUgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIGNvbnN0OwogCi0g
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OwotICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0OworICAgIGlubGluZSB1bnNpZ25lZCBzaXplKCkgY29uc3Q7CisgICAgaW5saW5l
IFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIAogICAgIFN3aXRjaENh
c2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAppbmRleCA2YWYzYjI2N2E1OS4uNzdjNzkzMDc4Njcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaApAQCAtNTMsMTIgKzUz
LDEyIEBAIHB1YmxpYzoKICAgICAgICAgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxzdGQ6OmlzX2ludGVncmFsPEludD46OnZhbHVlPjo6dHlwZSwKICAgICAgICAgdHlwZW5hbWUg
PSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX3NpZ25lZDxJbnQ+Ojp2YWx1ZT46OnR5
cGUKICAgICA+Ci0gICAgYm9vbCBpc0xlZ2FsT2Zmc2V0KEludCBvZmZzZXQpIGNvbnN0IHsgcmV0
dXJuIGlzTGVnYWxPZmZzZXRJbXBsKG9mZnNldCk7IH0KKyAgICBpbmxpbmUgYm9vbCBpc0xlZ2Fs
T2Zmc2V0KEludCBvZmZzZXQpIGNvbnN0IHsgcmV0dXJuIGlzTGVnYWxPZmZzZXRJbXBsKG9mZnNl
dCk7IH0KIAogICAgIC8vIEEgbmVjZXNzYXJ5IGNvbnNlcXVlbmNlIG9mIE1lbW9yeVZhbHVlIGhh
dmluZyBhbiBvZmZzZXQgaXMgdGhhdCBpdCBwYXJ0aWNpcGF0ZXMgaW4gaW5zdHJ1Y3Rpb24KICAg
ICAvLyBzZWxlY3Rpb24uIFRoaXMgdGVsbHMgeW91IGlmIHRoaXMgd2lsbCBnZXQgbG93ZXJlZCB0
byBzb21ldGhpbmcgdGhhdCByZXF1aXJlcyBhbiBvZmZzZXRsZXNzCiAgICAgLy8gYWRkcmVzcy4K
LSAgICBib29sIHJlcXVpcmVzU2ltcGxlQWRkcigpIGNvbnN0OworICAgIGlubGluZSBib29sIHJl
cXVpcmVzU2ltcGxlQWRkcigpIGNvbnN0OwogCiAgICAgY29uc3QgSGVhcFJhbmdlJiByYW5nZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICB2b2lkIHNldFJhbmdlKGNvbnN0IEhlYXBS
YW5nZSYgcmFuZ2UpIHsgbV9yYW5nZSA9IHJhbmdlOyB9CkBAIC04MCw3ICs4MCw3IEBAIHB1Ymxp
YzoKICAgICBCYW5rIGFjY2Vzc0JhbmsoKSBjb25zdDsKICAgICBzaXplX3QgYWNjZXNzQnl0ZVNp
emUoKSBjb25zdDsKICAgICAKLSAgICBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0OworICAgIGlu
bGluZSBXaWR0aCBhY2Nlc3NXaWR0aCgpIGNvbnN0OwogCiAgICAgYm9vbCBpc0Nhbm9uaWNhbFdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gQjM6OmlzQ2Fub25pY2FsV2lkdGgoYWNjZXNzV2lkdGgoKSk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVLZXkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKaW5kZXggMThiMDkyYzU5Yjgu
LjNiMzY2MDdjN2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlS2V5LmgKQEAgLTU2
LDExICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAotICAgIFZhbHVlS2V5KEtpbmQs
IFR5cGUsIFZhbHVlKiBjaGlsZCk7CisgICAgaW5saW5lIFZhbHVlS2V5KEtpbmQsIFR5cGUsIFZh
bHVlKiBjaGlsZCk7CiAKLSAgICBWYWx1ZUtleShLaW5kLCBUeXBlLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0KTsKKyAgICBpbmxpbmUgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCk7CiAKLSAgICBWYWx1ZUtleShLaW5kLCBUeXBlLCBWYWx1ZSogYSwgVmFs
dWUqIGIsIFZhbHVlKiBjKTsKKyAgICBpbmxpbmUgVmFsdWVLZXkoS2luZCwgVHlwZSwgVmFsdWUq
IGEsIFZhbHVlKiBiLCBWYWx1ZSogYyk7CiAKICAgICBWYWx1ZUtleShLaW5kIGtpbmQsIFR5cGUg
dHlwZSwgaW50NjRfdCB2YWx1ZSkKICAgICAgICAgOiBtX2tpbmQoa2luZCkKQEAgLTg5LDcgKzg5
LDcgQEAgcHVibGljOgogICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBraW5kKCku
b3Bjb2RlKCk7IH0KICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KICAg
ICB1bnNpZ25lZCBjaGlsZEluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiB1Lmlu
ZGljZXNbaW5kZXhdOyB9Ci0gICAgVmFsdWUqIGNoaWxkKFByb2NlZHVyZSYsIHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICBpbmxpbmUgVmFsdWUqIGNoaWxkKFByb2NlZHVyZSYsIHVuc2lnbmVk
IGluZGV4KSBjb25zdDsKICAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gdS52YWx1
ZTsgfQogICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHUuZG91YmxlVmFs
dWU7IH0KICAgICBkb3VibGUgZmxvYXRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHUuZmxvYXRWYWx1
ZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0Lmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAppbmRleCBiNTcyMzM5ZTgz
MC4uZDhkNjAxZmNkOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCkBA
IC0xMjcsOCArMTI3LDggQEAgc3RydWN0IEluc3QgewogCiAgICAgLy8gUmVwb3J0cyBhbnkgYWRk
aXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQg
Zm9yIGVmZmljaWVuY3ksCiAgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBm
b3IgdGhlIFBhdGNoIG9wY29kZS4KLSAgICBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3Mo
KTsKLSAgICBSZWdpc3RlclNldCBleHRyYUVhcmx5Q2xvYmJlcmVkUmVncygpOworICAgIGlubGlu
ZSBSZWdpc3RlclNldCBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKyAgICBpbmxpbmUgUmVnaXN0ZXJT
ZXQgZXh0cmFFYXJseUNsb2JiZXJlZFJlZ3MoKTsKIAogICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwg
RGVmJ3MgdGhhdCBoYXBwZW4gYXQgdGhlIGVuZCBvZiBhbiBpbnN0cnVjdGlvbi4gWW91IHN1cHBs
eSBhIHBhaXIKICAgICAvLyBpbnN0cnVjdGlvbnMuIFRoZSBpbnN0cnVjdGlvbnMgbXVzdCBhcHBl
YXIgbmV4dCB0byBlYWNoIG90aGVyLCBpbiB0aGF0IG9yZGVyLCBpbiBzb21lIGJhc2ljCkBAIC0x
NTIsNyArMTUyLDcgQEAgc3RydWN0IEluc3QgewogICAgIAogICAgIC8vIFVzZSB0aGlzIHRvIHJl
cG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBi
ZWZvcmUgY29kZWdlbi4gTm90ZQogICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVz
ZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGZvciB0aGUgUGF0Y2ggb3Bjb2RlLgotICAgIHZvaWQg
cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOworICAgIGlubGluZSB2b2lk
IHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmKTsKIAogICAgIC8vIElzIHRo
aXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMg
ZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKICAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJi
LgpAQCAtMTY2LDEwICsxNjYsMTAgQEAgc3RydWN0IEluc3QgewogICAgIC8vCiAgICAgLy8gVGhp
cyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgogICAg
IGJvb2wgYWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpOwotICAgIGJvb2wgYWRtaXRzU3Rh
Y2soQXJnJik7CisgICAgaW5saW5lIGJvb2wgYWRtaXRzU3RhY2soQXJnJik7CiAKICAgICBib29s
IGFkbWl0c0V4dGVuZGVkT2Zmc2V0QWRkcih1bnNpZ25lZCBhcmdJbmRleCk7Ci0gICAgYm9vbCBh
ZG1pdHNFeHRlbmRlZE9mZnNldEFkZHIoQXJnJik7CisgICAgaW5saW5lIGJvb2wgYWRtaXRzRXh0
ZW5kZWRPZmZzZXRBZGRyKEFyZyYpOwogCiAgICAgLy8gRGVmaW5lZCBieSBvcGNvZGVfZ2VuZXJh
dG9yLnJiLgogICAgIGJvb2wgaXNUZXJtaW5hbCgpOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHN0cnVj
dCBJbnN0IHsKICAgICAvLyBGb3IgZXhhbXBsZSwKICAgICAvLyAgICAgQWRkIFRtcDEsIFRtcDIs
IFRtcDMKICAgICAvLyByZXR1cm5zIDIgaWYgMCBhbmQgMSBiZW5lZml0IGZyb20gYWxpYXNpbmcg
dG8gVG1wMy4KLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gc2hvdWxkVHJ5QWxpYXNpbmdEZWYoKTsK
KyAgICBpbmxpbmUgT3B0aW9uYWw8dW5zaWduZWQ+IHNob3VsZFRyeUFsaWFzaW5nRGVmKCk7CiAg
ICAgCiAgICAgLy8gVGhpcyBjb21wdXRlcyBhIGhhc2ggZm9yIGNvbXBhcmluZyB0aGlzIHRvIEpT
QWlyJ3MgSW5zdC4KICAgICB1bnNpZ25lZCBqc0hhc2goKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PYmplY3RBbGxvY2F0aW9uUHJvZmlsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09iamVjdEFsbG9jYXRpb25Qcm9maWxlLmgK
aW5kZXggYTcwNzUzYTdiOTkuLjZkOWE3NTQ5NWNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuaApAQCAtNDks
NyArNDksNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzTnVsbCgpIHsgcmV0dXJuICFtX3N0cnVj
dHVyZTsgfQogCi0gICAgdm9pZCBpbml0aWFsaXplUHJvZmlsZShWTSYsIEpTR2xvYmFsT2JqZWN0
KiwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIHByb3RvdHlwZSwgdW5zaWduZWQgaW5mZXJyZWRJ
bmxpbmVDYXBhY2l0eSwgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBudWxscHRyLCBGdW5jdGlv
blJhcmVEYXRhKiA9IG51bGxwdHIpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBpbml0aWFsaXpl
UHJvZmlsZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNDZWxsKiBvd25lciwgSlNPYmplY3QqIHBy
b3RvdHlwZSwgdW5zaWduZWQgaW5mZXJyZWRJbmxpbmVDYXBhY2l0eSwgSlNGdW5jdGlvbiogY29u
c3RydWN0b3IgPSBudWxscHRyLCBGdW5jdGlvblJhcmVEYXRhKiA9IG51bGxwdHIpOwogCiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUoKQogICAgIHsKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgog
ICAgIH0KIAogcHJpdmF0ZToKLSAgICB1bnNpZ25lZCBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNv
dW50KFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSk7CisgICAgQUxXQVlTX0lOTElORSB1bnNpZ25l
ZCBwb3NzaWJsZURlZmF1bHRQcm9wZXJ0eUNvdW50KFZNJiwgSlNPYmplY3QqIHByb3RvdHlwZSk7
CiAKICAgICBBbGxvY2F0b3IgbV9hbGxvY2F0b3I7IC8vIFByZWNvbXB1dGVkIHRvIG1ha2UgdGhp
bmdzIGVhc2llciBmb3IgZ2VuZXJhdGVkIGNvZGUuCiAgICAgV3JpdGVCYXJyaWVyPFN0cnVjdHVy
ZT4gbV9zdHJ1Y3R1cmU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRNZXRhZGF0YVRhYmxlLmgKaW5kZXggM2UzZThkZmI0ZDUuLmFiY2UzYzUzYjdi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRNZXRh
ZGF0YVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
TWV0YWRhdGFUYWJsZS5oCkBAIC00MiwyMSArNDIsMjEgQEAgcHVibGljOgogICAgICAgICB1bnNp
Z25lZCByZWZDb3VudDsKICAgICB9OwogCi0gICAgVW5saW5rZWRNZXRhZGF0YVRhYmxlKCk7Ci0g
ICAgflVubGlua2VkTWV0YWRhdGFUYWJsZSgpOworICAgIEFMV0FZU19JTkxJTkUgVW5saW5rZWRN
ZXRhZGF0YVRhYmxlKCk7CisgICAgQUxXQVlTX0lOTElORSB+VW5saW5rZWRNZXRhZGF0YVRhYmxl
KCk7CiAKLSAgICB1bnNpZ25lZCBhZGRFbnRyeShPcGNvZGVJRCk7CisgICAgQUxXQVlTX0lOTElO
RSB1bnNpZ25lZCBhZGRFbnRyeShPcGNvZGVJRCk7CiAKLSAgICBzaXplX3Qgc2l6ZUluQnl0ZXMo
KTsKKyAgICBBTFdBWVNfSU5MSU5FIHNpemVfdCBzaXplSW5CeXRlcygpOwogCi0gICAgdm9pZCBm
aW5hbGl6ZSgpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmaW5hbGl6ZSgpOwogCi0gICAgUmVm
UHRyPE1ldGFkYXRhVGFibGU+IGxpbmsoKTsKKyAgICBBTFdBWVNfSU5MSU5FIFJlZlB0cjxNZXRh
ZGF0YVRhYmxlPiBsaW5rKCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCB1bmxpbmsoTWV0YWRhdGFU
YWJsZSYpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCB1bmxpbmsoTWV0YWRhdGFUYWJsZSYpOwog
Ci0gICAgc2l6ZV90IHNpemVJbkJ5dGVzKE1ldGFkYXRhVGFibGUmKTsKKyAgICBBTFdBWVNfSU5M
SU5FIHNpemVfdCBzaXplSW5CeXRlcyhNZXRhZGF0YVRhYmxlJik7CiAKICAgICB1c2luZyBPZmZz
ZXQgPSB1bnNpZ25lZDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCbG9ja1NldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCmlu
ZGV4IDYwYjQ0OTZkMDg0Li5mNzhkNmQ4NmQwNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCbG9ja1NldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQmxvY2tTZXQuaApAQCAtNzIsNyArNzIsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEJhc2ljQmxvY2sqIG9wZXJh
dG9yKigpIGNvbnN0OworICAgICAgICBpbmxpbmUgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkgY29u
c3Q7CiAgICAgICAgIAogICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAogICAgICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9BbGxvY2F0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0FsbG9jYXRvci5o
CmluZGV4IDIyOTE1OGZjZTQyLi45NmJmYWM4ZTc4ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvQWxsb2NhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdG9yLmgKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCogYWxsb2NhdGUoR0NEZWZlcnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFp
bHVyZU1vZGUpIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUgdm9pZCogYWxsb2NhdGUoR0NEZWZl
cnJhbENvbnRleHQqLCBBbGxvY2F0aW9uRmFpbHVyZU1vZGUpIGNvbnN0OwogICAgIAogICAgIHVu
c2lnbmVkIGNlbGxTaXplKCkgY29uc3Q7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9DZWxsQ29udGFpbmVyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9DZWxsQ29udGFpbmVyLmgKaW5kZXggZTRmMmZmMjg3MmYuLmYyYzhlMTVkMDZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9DZWxsQ29udGFpbmVyLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2VsbENvbnRhaW5lci5oCkBAIC01OCw4ICs1OCw4IEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogICAgIAotICAgIFZNKiB2bSgpIGNvbnN0OwotICAgIEhl
YXAqIGhlYXAoKSBjb25zdDsKKyAgICBpbmxpbmUgVk0qIHZtKCkgY29uc3Q7CisgICAgaW5saW5l
IEhlYXAqIGhlYXAoKSBjb25zdDsKICAgICAKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gISFtX2VuY29kZWRQb2ludGVyOyB9CiAgICAgCkBAIC03OCwyMCArNzgs
MjAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxMYXJnZUFsbG9jYXRp
b24qPihtX2VuY29kZWRQb2ludGVyIC0gaXNMYXJnZUFsbG9jYXRpb25CaXQpOwogICAgIH0KICAg
ICAKLSAgICB2b2lkIGFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKLSAg
ICBib29sIGFyZU1hcmtzU3RhbGUoKSBjb25zdDsKKyAgICBpbmxpbmUgdm9pZCBhYm91dFRvTWFy
ayhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CisgICAgaW5saW5lIGJvb2wgYXJlTWFya3NT
dGFsZSgpIGNvbnN0OwogICAgIAotICAgIGJvb2wgaXNNYXJrZWQoSGVhcENlbGwqKSBjb25zdDsK
LSAgICBib29sIGlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwQ2VsbCop
IGNvbnN0OworICAgIGlubGluZSBib29sIGlzTWFya2VkKEhlYXBDZWxsKikgY29uc3Q7CisgICAg
aW5saW5lIGJvb2wgaXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBDZWxs
KikgY29uc3Q7CiAgICAgCiAgICAgYm9vbCBpc05ld2x5QWxsb2NhdGVkKEhlYXBDZWxsKikgY29u
c3Q7CiAgICAgCi0gICAgdm9pZCBub3RlTWFya2VkKCk7Ci0gICAgdm9pZCBhc3NlcnRWYWxpZENl
bGwoVk0mLCBIZWFwQ2VsbCopIGNvbnN0OworICAgIGlubGluZSB2b2lkIG5vdGVNYXJrZWQoKTsK
KyAgICBpbmxpbmUgdm9pZCBhc3NlcnRWYWxpZENlbGwoVk0mLCBIZWFwQ2VsbCopIGNvbnN0Owog
ICAgIAotICAgIHNpemVfdCBjZWxsU2l6ZSgpIGNvbnN0OworICAgIGlubGluZSBzaXplX3QgY2Vs
bFNpemUoKSBjb25zdDsKICAgICAKLSAgICBXZWFrU2V0JiB3ZWFrU2V0KCkgY29uc3Q7CisgICAg
aW5saW5lIFdlYWtTZXQmIHdlYWtTZXQoKSBjb25zdDsKICAgICAKIHByaXZhdGU6CiAgICAgc3Rh
dGljIGNvbnN0IHVpbnRwdHJfdCBpc0xhcmdlQWxsb2NhdGlvbkJpdCA9IDE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ0RlZmVycmFsQ29udGV4dC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZlcnJhbENvbnRleHQuaAppbmRleCBjNjBkZDBhNzYw
OS4uZWNlMmNmNjcyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dD
RGVmZXJyYWxDb250ZXh0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvR0NEZWZl
cnJhbENvbnRleHQuaApAQCAtMzYsOCArMzYsOCBAQCBjbGFzcyBHQ0RlZmVycmFsQ29udGV4dCB7
CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrRGlyZWN0b3J5OwogICAgIGZyaWVuZCBjbGFzcyBMb2Nh
bEFsbG9jYXRvcjsKIHB1YmxpYzoKLSAgICBpbmxpbmUgR0NEZWZlcnJhbENvbnRleHQoSGVhcCYp
OwotICAgIGlubGluZSB+R0NEZWZlcnJhbENvbnRleHQoKTsKKyAgICBBTFdBWVNfSU5MSU5FIEdD
RGVmZXJyYWxDb250ZXh0KEhlYXAmKTsKKyAgICBBTFdBWVNfSU5MSU5FIH5HQ0RlZmVycmFsQ29u
dGV4dCgpOwogCiBwcml2YXRlOgogICAgIEhlYXAmIG1faGVhcDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0dDU2VnbWVudGVkQXJyYXkuaAppbmRleCAzNTllODNlMWIzNS4uOWQ4YWI1
OGM0N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0dDU2VnbWVudGVk
QXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9HQ1NlZ21lbnRlZEFycmF5
LmgKQEAgLTQyLDggKzQyLDggQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMg
R0NBcnJheVNlZ21lbnQqIGNyZWF0ZSgpOwotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koR0NBcnJh
eVNlZ21lbnQqKTsKKyAgICBzdGF0aWMgaW5saW5lIEdDQXJyYXlTZWdtZW50KiBjcmVhdGUoKTsK
KyAgICBzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveShHQ0FycmF5U2VnbWVudCopOwogCiAgICAg
VCogZGF0YSgpCiAgICAgewpAQCAtNzEsMTQgKzcxLDE0IEBAIHB1YmxpYzoKICAgICBHQ1NlZ21l
bnRlZEFycmF5KCk7CiAgICAgfkdDU2VnbWVudGVkQXJyYXkoKTsKIAotICAgIHZvaWQgYXBwZW5k
KFQpOworICAgIGlubGluZSB2b2lkIGFwcGVuZChUKTsKIAotICAgIGJvb2wgY2FuUmVtb3ZlTGFz
dCgpOwotICAgIGNvbnN0IFQgcmVtb3ZlTGFzdCgpOworICAgIGlubGluZSBib29sIGNhblJlbW92
ZUxhc3QoKTsKKyAgICBpbmxpbmUgY29uc3QgVCByZW1vdmVMYXN0KCk7CiAgICAgYm9vbCByZWZp
bGwoKTsKICAgICAKLSAgICBzaXplX3Qgc2l6ZSgpOwotICAgIGJvb2wgaXNFbXB0eSgpOworICAg
IGlubGluZSBzaXplX3Qgc2l6ZSgpOworICAgIGlubGluZSBib29sIGlzRW1wdHkoKTsKIAogICAg
IHZvaWQgZmlsbFZlY3RvcihWZWN0b3I8VD4mKTsKICAgICB2b2lkIGNsZWFyKCk7CkBAIC05NCwx
MyArOTQsMTMgQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBleHBhbmQoKTsKICAgICAKLSAgICBz
aXplX3QgcG9zdEluY1RvcCgpOwotICAgIHNpemVfdCBwcmVEZWNUb3AoKTsKLSAgICB2b2lkIHNl
dFRvcEZvckZ1bGxTZWdtZW50KCk7Ci0gICAgdm9pZCBzZXRUb3BGb3JFbXB0eVNlZ21lbnQoKTsK
LSAgICBzaXplX3QgdG9wKCk7CisgICAgaW5saW5lIHNpemVfdCBwb3N0SW5jVG9wKCk7CisgICAg
aW5saW5lIHNpemVfdCBwcmVEZWNUb3AoKTsKKyAgICBpbmxpbmUgdm9pZCBzZXRUb3BGb3JGdWxs
U2VnbWVudCgpOworICAgIGlubGluZSB2b2lkIHNldFRvcEZvckVtcHR5U2VnbWVudCgpOworICAg
IGlubGluZSBzaXplX3QgdG9wKCk7CiAgICAgCi0gICAgdm9pZCB2YWxpZGF0ZVByZXZpb3VzKCk7
CisgICAgaW5saW5lIHZvaWQgdmFsaWRhdGVQcmV2aW91cygpOwogCiAgICAgRG91Ymx5TGlua2Vk
TGlzdDxHQ0FycmF5U2VnbWVudDxUPj4gbV9zZWdtZW50czsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGFuZGxlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hhbmRsZUJsb2NrLmgKaW5kZXggZWY2NDQzM2JiMDcuLjgzYzFjODk4MTE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IYW5kbGVCbG9jay5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hhbmRsZUJsb2NrLmgKQEAgLTM1LDIzICszNSwyMyBA
QCBjbGFzcyBIYW5kbGVOb2RlOwogY2xhc3MgSGFuZGxlQmxvY2sgOiBwdWJsaWMgRG91Ymx5TGlu
a2VkTGlzdE5vZGU8SGFuZGxlQmxvY2s+IHsKICAgICBmcmllbmQgY2xhc3MgV1RGOjpEb3VibHlM
aW5rZWRMaXN0Tm9kZTxIYW5kbGVCbG9jaz47CiBwdWJsaWM6Ci0gICAgc3RhdGljIEhhbmRsZUJs
b2NrKiBjcmVhdGUoSGFuZGxlU2V0Kik7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveShIYW5kbGVC
bG9jayopOworICAgIHN0YXRpYyBpbmxpbmUgSGFuZGxlQmxvY2sqIGNyZWF0ZShIYW5kbGVTZXQq
KTsKKyAgICBzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveShIYW5kbGVCbG9jayopOwogICAgIHN0
YXRpYyBIYW5kbGVCbG9jayogYmxvY2tGb3IoSGFuZGxlTm9kZSopOwogCiAgICAgc3RhdGljIGNv
bnN0IHNpemVfdCBibG9ja1NpemUgPSA0ICogS0I7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNl
dCgpOwogCi0gICAgSGFuZGxlTm9kZSogbm9kZXMoKTsKLSAgICBIYW5kbGVOb2RlKiBub2RlQXRJ
bmRleCh1bnNpZ25lZCk7Ci0gICAgdW5zaWduZWQgbm9kZUNhcGFjaXR5KCk7CisgICAgaW5saW5l
IEhhbmRsZU5vZGUqIG5vZGVzKCk7CisgICAgaW5saW5lIEhhbmRsZU5vZGUqIG5vZGVBdEluZGV4
KHVuc2lnbmVkKTsKKyAgICBpbmxpbmUgdW5zaWduZWQgbm9kZUNhcGFjaXR5KCk7CiAKIHByaXZh
dGU6Ci0gICAgSGFuZGxlQmxvY2soSGFuZGxlU2V0Kik7CisgICAgaW5saW5lIEhhbmRsZUJsb2Nr
KEhhbmRsZVNldCopOwogCi0gICAgY2hhciogcGF5bG9hZCgpOwotICAgIGNoYXIqIHBheWxvYWRF
bmQoKTsKKyAgICBpbmxpbmUgY2hhciogcGF5bG9hZCgpOworICAgIGlubGluZSBjaGFyKiBwYXls
b2FkRW5kKCk7CiAKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNfYmxvY2tNYXNrID0gfihibG9j
a1NpemUgLSAxKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCmluZGV4IGFmMGYwMDRjMWU2
Li4wZWNkYzNjNTNiNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVh
cC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtMTA2LDggKzEw
Niw4IEBAIGNsYXNzIEhlYXAgewogcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBKSVQ7CiAgICAg
ZnJpZW5kIGNsYXNzIERGRzo6U3BlY3VsYXRpdmVKSVQ7Ci0gICAgc3RhdGljIEhlYXAqIGhlYXAo
Y29uc3QgSlNWYWx1ZSk7IC8vIDAgZm9yIGltbWVkaWF0ZSB2YWx1ZXMKLSAgICBzdGF0aWMgSGVh
cCogaGVhcChjb25zdCBIZWFwQ2VsbCopOworICAgIHN0YXRpYyBpbmxpbmUgSGVhcCogaGVhcChj
b25zdCBKU1ZhbHVlKTsgLy8gMCBmb3IgaW1tZWRpYXRlIHZhbHVlcworICAgIHN0YXRpYyBBTFdB
WVNfSU5MSU5FIEhlYXAqIGhlYXAoY29uc3QgSGVhcENlbGwqKTsKIAogICAgIC8vIFRoaXMgY29u
c3RhbnQgZGV0ZXJtaW5lcyBob3cgbWFueSBibG9ja3Mgd2UgaXRlcmF0ZSBiZXR3ZWVuIGNoZWNr
cyBvZiBvdXIgCiAgICAgLy8gZGVhZGxpbmUgd2hlbiBjYWxsaW5nIEhlYXA6OmlzUGFnZWRPdXQu
IERlY3JlYXNpbmcgaXQgd2lsbCBjYXVzZSB1cyB0byBkZXRlY3QgCkBAIC0xMzYsNyArMTM2LDcg
QEAgcHVibGljOgogICAgIHZvaWQgbGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICB2b2lkIHJl
bGVhc2VEZWxheWVkUmVsZWFzZWRPYmplY3RzKCk7CiAKLSAgICBWTSogdm0oKSBjb25zdDsKKyAg
ICBBTFdBWVNfSU5MSU5FIFZNKiB2bSgpIGNvbnN0OwogCiAgICAgTWFya2VkU3BhY2UmIG9iamVj
dFNwYWNlKCkgeyByZXR1cm4gbV9vYmplY3RTcGFjZTsgfQogICAgIE1hY2hpbmVUaHJlYWRzJiBt
YWNoaW5lVGhyZWFkcygpIHsgcmV0dXJuICptX21hY2hpbmVUaHJlYWRzOyB9CkBAIC0xNTQsOCAr
MTU0LDggQEAgcHVibGljOgogCiAgICAgTXV0YXRvclN0YXRlIG11dGF0b3JTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbXV0YXRvclN0YXRlOyB9CiAgICAgT3B0aW9uYWw8Q29sbGVjdGlvblNjb3Bl
PiBjb2xsZWN0aW9uU2NvcGUoKSBjb25zdCB7IHJldHVybiBtX2NvbGxlY3Rpb25TY29wZTsgfQot
ICAgIGJvb2wgaGFzSGVhcEFjY2VzcygpIGNvbnN0OwotICAgIGJvb2wgd29ybGRJc1N0b3BwZWQo
KSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBoYXNIZWFwQWNjZXNzKCkgY29uc3Q7CisgICAgaW5s
aW5lIGJvb2wgd29ybGRJc1N0b3BwZWQoKSBjb25zdDsKICAgICBib29sIHdvcmxkSXNSdW5uaW5n
KCkgY29uc3QgeyByZXR1cm4gIXdvcmxkSXNTdG9wcGVkKCk7IH0KIAogICAgIC8vIFdlJ3JlIGFs
d2F5cyBidXN5IG9uIHRoZSBjb2xsZWN0aW9uIHRocmVhZHMuIE9uIHRoZSBtYWluIHRocmVhZCwg
dGhpcyByZXR1cm5zIHRydWUgaWYgd2UncmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0lzb0NlbGxTZXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0Nl
bGxTZXQuaAppbmRleCBkYWRhNjcyYzQ5MS4uMmUxMTkyNDc4MzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0lzb0NlbGxTZXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9Jc29DZWxsU2V0LmgKQEAgLTQ1LDExICs0NSwxMSBAQCBwdWJsaWM6CiAgICAg
SXNvQ2VsbFNldChJc29TdWJzcGFjZSYgc3Vic3BhY2UpOwogICAgIH5Jc29DZWxsU2V0KCk7CiAg
ICAgCi0gICAgYm9vbCBhZGQoSGVhcENlbGwqIGNlbGwpOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IGNlbGwgd2FzIG5ld2x5IGFkZGVkLgorICAgIGlubGluZSBib29sIGFkZChIZWFwQ2VsbCogY2Vs
bCk7IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY2VsbCB3YXMgbmV3bHkgYWRkZWQuCiAgICAgCi0g
ICAgYm9vbCByZW1vdmUoSGVhcENlbGwqIGNlbGwpOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNl
bGwgd2FzIHByZXZpb3VzbHkgcHJlc2VudCBhbmQgZ290IHJlbW92ZWQuCisgICAgaW5saW5lIGJv
b2wgcmVtb3ZlKEhlYXBDZWxsKiBjZWxsKTsgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjZWxsIHdh
cyBwcmV2aW91c2x5IHByZXNlbnQgYW5kIGdvdCByZW1vdmVkLgogICAgIAotICAgIGJvb2wgY29u
dGFpbnMoSGVhcENlbGwqIGNlbGwpIGNvbnN0OworICAgIGlubGluZSBib29sIGNvbnRhaW5zKEhl
YXBDZWxsKiBjZWxsKSBjb25zdDsKICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBSZWY8U2hh
cmVkVGFzazxNYXJrZWRCbG9jazo6SGFuZGxlKigpPj4gcGFyYWxsZWxOb3RFbXB0eU1hcmtlZEJs
b2NrU291cmNlKCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Jc29TdWJzcGFjZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSXNvU3Vic3BhY2Uu
aAppbmRleCBlZmQ1Y2QzODI4ZS4uMmJiYmY5YWM5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0lzb1N1YnNwYWNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSXNvU3Vic3BhY2UuaApAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAgQWxsb2Nh
dG9yIGFsbG9jYXRvckZvck5vblZpcnR1YWwoc2l6ZV90LCBBbGxvY2F0b3JGb3JNb2RlKTsKIAog
ICAgIHZvaWQqIGFsbG9jYXRlKFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9j
YXRpb25GYWlsdXJlTW9kZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCogYWxsb2NhdGVOb25WaXJ0dWFs
KFZNJiwgc2l6ZV90LCBHQ0RlZmVycmFsQ29udGV4dCosIEFsbG9jYXRpb25GYWlsdXJlTW9kZSk7
CisgICAgQUxXQVlTX0lOTElORSB2b2lkKiBhbGxvY2F0ZU5vblZpcnR1YWwoVk0mLCBzaXplX3Qs
IEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKIAogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgSXNvQ2VsbFNldDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9Mb2NhbEFsbG9jYXRvci5oCmluZGV4IDlkOGY1YTRjZWYwLi5mMmJlZTE5N2U1ZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5oCkBAIC00MSw3ICs0MSw3
IEBAIHB1YmxpYzoKICAgICBMb2NhbEFsbG9jYXRvcihCbG9ja0RpcmVjdG9yeSopOwogICAgIH5M
b2NhbEFsbG9jYXRvcigpOwogICAgIAotICAgIHZvaWQqIGFsbG9jYXRlKEdDRGVmZXJyYWxDb250
ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQqIGFs
bG9jYXRlKEdDRGVmZXJyYWxDb250ZXh0KiwgQWxsb2NhdGlvbkZhaWx1cmVNb2RlKTsKICAgICAK
ICAgICB1bnNpZ25lZCBjZWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKaW5kZXggZTI0MGYwYWUyZDcu
LjNmNWEyZDEzY2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgK
QEAgLTExNSwxNCArMTE1LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICB2b2lk
KiBjZWxsQWxpZ24odm9pZCopOwogICAgICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNFbXB0eSgp
OworICAgICAgICBpbmxpbmUgYm9vbCBpc0VtcHR5KCk7CiAKICAgICAgICAgdm9pZCBsYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpOwogCiAgICAgICAgIEJsb2NrRGlyZWN0b3J5KiBkaXJlY3RvcnkoKSBj
b25zdDsKICAgICAgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3Q7CiAgICAgICAgIEFsaWdu
ZWRNZW1vcnlBbGxvY2F0b3IqIGFsaWduZWRNZW1vcnlBbGxvY2F0b3IoKSBjb25zdDsKLSAgICAg
ICAgSGVhcCogaGVhcCgpIGNvbnN0OworICAgICAgICBpbmxpbmUgSGVhcCogaGVhcCgpIGNvbnN0
OwogICAgICAgICBpbmxpbmUgTWFya2VkU3BhY2UqIHNwYWNlKCkgY29uc3Q7CiAgICAgICAgIFZN
KiB2bSgpIGNvbnN0OwogICAgICAgICBXZWFrU2V0JiB3ZWFrU2V0KCk7CkBAIC0xNzEsMTMgKzE3
MSwxMyBAQCBwdWJsaWM6CiAgICAgICAgIHNpemVfdCBtYXJrQ291bnQoKTsKICAgICAgICAgc2l6
ZV90IHNpemUoKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNBbGxvY2F0ZWQoKTsKKyAgICAg
ICAgaW5saW5lIGJvb2wgaXNBbGxvY2F0ZWQoKTsKICAgICAgICAgCi0gICAgICAgIGJvb2wgaXNM
aXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRl
ZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2VsbCopOworICAgICAgICBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNMaXZlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFwVmVy
c2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCBIZWFwQ2Vs
bCopOwogICAgICAgICBpbmxpbmUgYm9vbCBpc0xpdmVDZWxsKEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uLCBIZWFwVmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5n
LCBjb25zdCB2b2lkKik7CiAKLSAgICAgICAgYm9vbCBpc0xpdmUoY29uc3QgSGVhcENlbGwqKTsK
LSAgICAgICAgYm9vbCBpc0xpdmVDZWxsKGNvbnN0IHZvaWQqKTsKKyAgICAgICAgaW5saW5lIGJv
b2wgaXNMaXZlKGNvbnN0IEhlYXBDZWxsKik7CisgICAgICAgIGlubGluZSBib29sIGlzTGl2ZUNl
bGwoY29uc3Qgdm9pZCopOwogCiAgICAgICAgIGJvb2wgaXNGcmVlTGlzdGVkQ2VsbChjb25zdCB2
b2lkKiB0YXJnZXQpIGNvbnN0OwogCkBAIC0xODcsNyArMTg3LDcgQEAgcHVibGljOgogICAgICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBmb3JF
YWNoTWFya2VkQ2VsbChjb25zdCBGdW5jdG9yJik7CiAgICAgICAgICAgICAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgYm9vbCBhcmVNYXJrc1N0YWxlKCk7Ci0gICAgICAgIGJvb2wgYXJlTWFy
a3NTdGFsZUZvclN3ZWVwKCk7CisgICAgICAgIGlubGluZSBib29sIGFyZU1hcmtzU3RhbGVGb3JT
d2VlcCgpOwogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRNYXJrc05vdFN0YWxlKCk7CiAg
ICAgICAgICAgICAKQEAgLTIxMSwxMSArMjExLDExIEBAIHB1YmxpYzoKICAgICAgICAgZW51bSBO
ZXdseUFsbG9jYXRlZE1vZGUgeyBIYXNOZXdseUFsbG9jYXRlZCwgRG9lc05vdEhhdmVOZXdseUFs
bG9jYXRlZCB9OwogICAgICAgICBlbnVtIE1hcmtzTW9kZSB7IE1hcmtzU3RhbGUsIE1hcmtzTm90
U3RhbGUgfTsKICAgICAgICAgCi0gICAgICAgIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHN3ZWVwRGVz
dHJ1Y3Rpb25Nb2RlKCk7Ci0gICAgICAgIEVtcHR5TW9kZSBlbXB0eU1vZGUoKTsKLSAgICAgICAg
U2NyaWJibGVNb2RlIHNjcmliYmxlTW9kZSgpOwotICAgICAgICBOZXdseUFsbG9jYXRlZE1vZGUg
bmV3bHlBbGxvY2F0ZWRNb2RlKCk7Ci0gICAgICAgIE1hcmtzTW9kZSBtYXJrc01vZGUoKTsKKyAg
ICAgICAgaW5saW5lIFN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlIHN3ZWVwRGVzdHJ1Y3Rpb25Nb2RlKCk7
CisgICAgICAgIGlubGluZSBFbXB0eU1vZGUgZW1wdHlNb2RlKCk7CisgICAgICAgIGlubGluZSBT
Y3JpYmJsZU1vZGUgc2NyaWJibGVNb2RlKCk7CisgICAgICAgIGlubGluZSBOZXdseUFsbG9jYXRl
ZE1vZGUgbmV3bHlBbGxvY2F0ZWRNb2RlKCk7CisgICAgICAgIGlubGluZSBNYXJrc01vZGUgbWFy
a3NNb2RlKCk7CiAgICAgICAgIAogICAgICAgICB0ZW1wbGF0ZTxib29sLCBFbXB0eU1vZGUsIFN3
ZWVwTW9kZSwgU3dlZXBEZXN0cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0
ZWRNb2RlLCBNYXJrc01vZGUsIHR5cGVuYW1lIERlc3Ryb3lGdW5jPgogICAgICAgICB2b2lkIHNw
ZWNpYWxpemVkU3dlZXAoRnJlZUxpc3QqLCBFbXB0eU1vZGUsIFN3ZWVwTW9kZSwgU3dlZXBEZXN0
cnVjdGlvbk1vZGUsIFNjcmliYmxlTW9kZSwgTmV3bHlBbGxvY2F0ZWRNb2RlLCBNYXJrc01vZGUs
IGNvbnN0IERlc3Ryb3lGdW5jJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9TbG90VmlzaXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0
b3IuaAppbmRleCAwZDJlNmUwYWE2Zi4uMWE0MjJkMmRhNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuaApAQCAtODIsMTcgKzgyLDE3IEBAIHB1YmxpYzoKICAgICBj
b25zdCBNYXJrU3RhY2tBcnJheSYgY29sbGVjdG9yTWFya1N0YWNrKCkgY29uc3QgeyByZXR1cm4g
bV9jb2xsZWN0b3JTdGFjazsgfQogICAgIGNvbnN0IE1hcmtTdGFja0FycmF5JiBtdXRhdG9yTWFy
a1N0YWNrKCkgY29uc3QgeyByZXR1cm4gbV9tdXRhdG9yU3RhY2s7IH0KICAgICAKLSAgICBWTSYg
dm0oKTsKLSAgICBjb25zdCBWTSYgdm0oKSBjb25zdDsKLSAgICBIZWFwKiBoZWFwKCkgY29uc3Q7
CisgICAgaW5saW5lIFZNJiB2bSgpOworICAgIGlubGluZSBjb25zdCBWTSYgdm0oKSBjb25zdDsK
KyAgICBpbmxpbmUgSGVhcCogaGVhcCgpIGNvbnN0OwogCiAgICAgdm9pZCBhcHBlbmQoQ29uc2Vy
dmF0aXZlUm9vdHMmKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBU
cmFpdHM+IHZvaWQgYXBwZW5kKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VCwgVHJhaXRzPiYpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4gdm9pZCBhcHBlbmRIaWRk
ZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxULCBUcmFpdHM+Jik7CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSXRlcmF0b3I+IHZvaWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5k
KTsKLSAgICB2b2lkIGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24s
IER1bWJWYWx1ZVRyYWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOwotICAgIHZvaWQgYXBw
ZW5kVmFsdWVzSGlkZGVuKGNvbnN0IFdyaXRlQmFycmllckJhc2U8VW5rbm93biwgRHVtYlZhbHVl
VHJhaXRzPFVua25vd24+PiosIHNpemVfdCBjb3VudCk7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGFwcGVuZFZhbHVlcyhjb25zdCBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24sIER1bWJWYWx1ZVRy
YWl0czxVbmtub3duPj4qLCBzaXplX3QgY291bnQpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBh
cHBlbmRWYWx1ZXNIaWRkZW4oY29uc3QgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duLCBEdW1iVmFs
dWVUcmFpdHM8VW5rbm93bj4+Kiwgc2l6ZV90IGNvdW50KTsKICAgICAKICAgICAvLyBUaGVzZSBk
b24ndCByZXF1aXJlIHlvdSB0byBwcm92ZSB0aGF0IHlvdSBoYXZlIGEgV3JpdGVCYXJyaWVyPD4u
IFRoYXQgbWFrZXMgc2Vuc2UKICAgICAvLyBmb3I6CkBAIC0xMDMsMTkgKzEwMywxOSBAQCBwdWJs
aWM6CiAgICAgLy8KICAgICAvLyBJZiB5b3UgYXJlIG5vdCBhIHJvb3QgYW5kIHlvdSBkb24ndCBr
bm93IHdoYXQga2luZCBvZiBiYXJyaWVyIHlvdSBoYXZlLCB0aGVuIHlvdQogICAgIC8vIHNob3Vs
ZG4ndCBjYWxsIHRoZXNlIG1ldGhvZHMuCi0gICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZChKU1Zh
bHVlKTsKLSAgICB2b2lkIGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUqLCBzaXplX3QpOwotICAg
IHZvaWQgYXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lk
IGFwcGVuZFVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBl
bmRVbmJhcnJpZXJlZChKU1ZhbHVlKiwgc2l6ZV90KTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
YXBwZW5kVW5iYXJyaWVyZWQoSlNDZWxsKik7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KICAgICB2b2lkIGFwcGVuZChjb25zdCBXZWFrPFQ+JiB3ZWFrKTsKICAgICAKLSAgICB2b2lk
IGFwcGVuZEhpZGRlblVuYmFycmllcmVkKEpTVmFsdWUpOwotICAgIHZvaWQgYXBwZW5kSGlkZGVu
VW5iYXJyaWVyZWQoSlNDZWxsKik7CisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFwcGVuZEhpZGRl
blVuYmFycmllcmVkKEpTVmFsdWUpOworICAgIEFMV0FZU19JTkxJTkUgdm9pZCBhcHBlbmRIaWRk
ZW5VbmJhcnJpZXJlZChKU0NlbGwqKTsKIAotICAgIGJvb2wgYWRkT3BhcXVlUm9vdCh2b2lkKik7
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcm9vdCB3YXMgbmV3LgorICAgIGlubGluZSBib29sIGFk
ZE9wYXF1ZVJvb3Qodm9pZCopOyAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHJvb3Qgd2FzIG5ldy4K
ICAgICAKLSAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKikgY29uc3Q7CisgICAgaW5s
aW5lIGJvb2wgY29udGFpbnNPcGFxdWVSb290KHZvaWQqKSBjb25zdDsKIAogICAgIGJvb2wgaXNF
bXB0eSgpIHsgcmV0dXJuIG1fY29sbGVjdG9yU3RhY2suaXNFbXB0eSgpICYmIG1fbXV0YXRvclN0
YWNrLmlzRW1wdHkoKTsgfQogCkBAIC0xNTEsOSArMTUxLDkgQEAgcHVibGljOgogICAgIC8vIHRo
aXMgdGhlbiB0aGUgc3BhY2Ugd2lsbCBiZSBmcmVlZCBhdCBlbmQgb2YgR0MuCiAgICAgdm9pZCBt
YXJrQXV4aWxpYXJ5KGNvbnN0IHZvaWQqIGJhc2UpOwogCi0gICAgdm9pZCByZXBvcnRFeHRyYU1l
bW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICBpbmxpbmUgdm9pZCByZXBvcnRFeHRyYU1lbW9yeVZp
c2l0ZWQoc2l6ZV90KTsKICNpZiBFTkFCTEUoUkVTT1VSQ0VfVVNBR0UpCi0gICAgdm9pZCByZXBv
cnRFeHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKKyAgICBpbmxpbmUgdm9pZCByZXBvcnRF
eHRlcm5hbE1lbW9yeVZpc2l0ZWQoc2l6ZV90KTsKICNlbmRpZgogICAgIAogICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvV2Vha0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFrQmxvY2su
aAppbmRleCA2ZDRmZjA3MDlkMy4uYzVlMTI0ZDdiNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL1dlYWtCbG9jay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5oCkBAIC03Nyw3ICs3Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzcGVj
aWFsaXplZFZpc2l0KENvbnRhaW5lclR5cGUmLCBTbG90VmlzaXRvciYpOwogCiAgICAgZXhwbGlj
aXQgV2Vha0Jsb2NrKENlbGxDb250YWluZXIpOwotICAgIHZvaWQgZmluYWxpemUoV2Vha0ltcGwq
KTsKKyAgICBpbmxpbmUgdm9pZCBmaW5hbGl6ZShXZWFrSW1wbCopOwogICAgIFdlYWtJbXBsKiB3
ZWFrSW1wbHMoKTsKICAgICBzaXplX3Qgd2Vha0ltcGxDb3VudCgpOwogICAgIHZvaWQgYWRkVG9G
cmVlTGlzdChGcmVlQ2VsbCoqLCBXZWFrSW1wbCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vh
a1NldC5oCmluZGV4IGRkY2Y3NDNiNTMzLi4wNTViOTFjMTI2OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1NldC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1dlYWtTZXQuaApAQCAtMzgsNyArMzgsNyBAQCBjbGFzcyBXZWFrU2V0IDogcHVibGlj
IEJhc2ljUmF3U2VudGluZWxOb2RlPFdlYWtTZXQ+IHsKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogCiBwdWJsaWM6Ci0gICAgc3RhdGljIFdlYWtJbXBsKiBhbGxvY2F0
ZShKU1ZhbHVlLCBXZWFrSGFuZGxlT3duZXIqID0gMCwgdm9pZCogY29udGV4dCA9IDApOworICAg
IGlubGluZSBzdGF0aWMgV2Vha0ltcGwqIGFsbG9jYXRlKEpTVmFsdWUsIFdlYWtIYW5kbGVPd25l
ciogPSAwLCB2b2lkKiBjb250ZXh0ID0gMCk7CiAgICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShX
ZWFrSW1wbCopOwogCiAgICAgV2Vha1NldChWTSosIENlbGxDb250YWluZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NMb29wU3RhY2suaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DTG9vcFN0YWNrLmgKaW5kZXggMWY0ZDk5ZDhi
NDMuLmZlMjhkNWQxOTA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvQ0xvb3BTdGFjay5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9DTG9vcFN0YWNrLmgKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IENMb29wU3RhY2soVk0mKTsKICAgICAgICAgfkNMb29wU3RhY2soKTsKICAgICAgICAgCi0gICAg
ICAgIGJvb2wgZW5zdXJlQ2FwYWNpdHlGb3IoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2spOworICAg
ICAgICBpbmxpbmUgYm9vbCBlbnN1cmVDYXBhY2l0eUZvcihSZWdpc3RlciogbmV3VG9wT2ZTdGFj
ayk7CiAKICAgICAgICAgYm9vbCBjb250YWluc0FkZHJlc3MoUmVnaXN0ZXIqIGFkZHJlc3MpIHsg
cmV0dXJuIChsb3dBZGRyZXNzKCkgPD0gYWRkcmVzcyAmJiBhZGRyZXNzIDwgaGlnaEFkZHJlc3Mo
KSk7IH0KICAgICAgICAgc3RhdGljIHNpemVfdCBjb21taXR0ZWRCeXRlQ291bnQoKTsKQEAgLTg4
LDcgKzg4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVsZWFzZUV4Y2Vzc0Nh
cGFjaXR5KCk7CiAgICAgICAgIHZvaWQgYWRkVG9Db21taXR0ZWRCeXRlQ291bnQobG9uZyk7CiAK
LSAgICAgICAgdm9pZCBzZXRDTG9vcFN0YWNrTGltaXQoUmVnaXN0ZXIqIG5ld1RvcE9mU3RhY2sp
OworICAgICAgICBpbmxpbmUgdm9pZCBzZXRDTG9vcFN0YWNrTGltaXQoUmVnaXN0ZXIqIG5ld1Rv
cE9mU3RhY2spOwogCiAgICAgICAgIFZNJiBtX3ZtOwogICAgICAgICBDYWxsRnJhbWUqJiBtX3Rv
cENhbGxGcmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDZjOWQzYmI0MWIwLi41NWZm
YjVhZTE3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0zMDUsMTIgKzMwNSwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlRXhjZXB0aW9uSGFu
ZGxlcnMoKTsKIAotICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwotICAgICAgICB2b2lk
IGFkZFNsb3dDYXNlKGNvbnN0IEp1bXBMaXN0Jik7Ci0gICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
KTsKLSAgICAgICAgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7Ci0gICAgICAgIHZvaWQgYWRkSnVt
cChjb25zdCBKdW1wTGlzdCYsIGludCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93VG9Ib3Qo
SnVtcCwgaW50KTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZFNsb3dDYXNlKEp1bXAp
OworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgYWRkU2xvd0Nhc2UoY29uc3QgSnVtcExpc3Qm
KTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZFNsb3dDYXNlKCk7CisgICAgICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBhZGRKdW1wKEp1bXAsIGludCk7CisgICAgICAgIEFMV0FZU19JTkxJ
TkUgdm9pZCBhZGRKdW1wKGNvbnN0IEp1bXBMaXN0JiwgaW50KTsKKyAgICAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGVtaXRKdW1wU2xvd1RvSG90KEp1bXAsIGludCk7CiAKICAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgT3A+CiAgICAgICAgIHZvaWQgY29tcGlsZU9wQ2FsbChjb25zdCBJbnN0cnVj
dGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKQEAgLTM0MywxMCArMzQzLDEwIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjb25z
dCBJbnN0cnVjdGlvbiosIENvbXBpbGVPcFN0cmljdEVxVHlwZSk7CiAgICAgICAgIGVudW0gY2xh
c3MgQ29tcGlsZU9wRXFUeXBlIHsgRXEsIE5FcSB9OwogICAgICAgICB2b2lkIGNvbXBpbGVPcEVx
SnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIENvbXBpbGVPcEVxVHlw
ZSwgaW50IGp1bXBUYXJnZXQpOwotICAgICAgICBib29sIGlzT3BlcmFuZENvbnN0YW50RG91Ymxl
KGludCBzcmMpOworICAgICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRE
b3VibGUoaW50IHNyYyk7CiAgICAgICAgIAotICAgICAgICB2b2lkIGVtaXRMb2FkRG91YmxlKGlu
dCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKLSAgICAgICAgdm9pZCBlbWl0TG9hZEludDMy
VG9Eb3VibGUoaW50IGluZGV4LCBGUFJlZ2lzdGVySUQgdmFsdWUpOworICAgICAgICBpbmxpbmUg
dm9pZCBlbWl0TG9hZERvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0ZXJJRCB2YWx1ZSk7CisgICAg
ICAgIGlubGluZSB2b2lkIGVtaXRMb2FkSW50MzJUb0RvdWJsZShpbnQgaW5kZXgsIEZQUmVnaXN0
ZXJJRCB2YWx1ZSk7CiAKICAgICAgICAgZW51bSBXcml0ZUJhcnJpZXJNb2RlIHsgVW5jb25kaXRp
b25hbFdyaXRlQmFycmllciwgU2hvdWxkRmlsdGVyQmFzZSwgU2hvdWxkRmlsdGVyVmFsdWUsIFNo
b3VsZEZpbHRlckJhc2VBbmRWYWx1ZSB9OwogICAgICAgICAvLyB2YWx1ZSByZWdpc3RlciBpbiB3
cml0ZSBiYXJyaWVyIGlzIHVzZWQgYmVmb3JlIGFueSBzY3JhdGNoIHJlZ2lzdGVycwpAQCAtMzU3
LDE4ICszNTcsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gVGhpcyBhc3N1bWVz
IHRoYXQgdGhlIHZhbHVlIHRvIHByb2ZpbGUgaXMgaW4gcmVnVDAgYW5kIHRoYXQgcmVnVDMgaXMg
YXZhaWxhYmxlIGZvcgogICAgICAgICAvLyBzY3JhdGNoLgotICAgICAgICB2b2lkIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJik7CisgICAgICAgIGlubGluZSB2b2lkIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoVmFsdWVQcm9maWxlJik7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIE1ldGFkYXRhPiB2b2lkIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoTWV0YWRhdGEmKTsKICAg
ICAgICAgdm9pZCBlbWl0VmFsdWVQcm9maWxpbmdTaXRlSWZQcm9maWxlZE9wY29kZSguLi4pOwog
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KICAgICAgICAgc3RkOjplbmFibGVfaWZfdDxz
dGQ6OmlzX3NhbWU8ZGVjbHR5cGUoT3A6Ok1ldGFkYXRhOjpwcm9maWxlKSwgVmFsdWVQcm9maWxl
Pjo6dmFsdWUsIHZvaWQ+CiAgICAgICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGVJZlByb2ZpbGVk
T3Bjb2RlKE9wIGJ5dGVjb2RlKTsKIAotICAgICAgICB2b2lkIGVtaXRBcnJheVByb2ZpbGluZ1Np
dGVXaXRoQ2VsbChSZWdpc3RlcklEIGNlbGwsIFJlZ2lzdGVySUQgaW5kZXhpbmdUeXBlLCBBcnJh
eVByb2ZpbGUqKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVj
aWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKLSAgICAgICAgdm9pZCBlbWl0QXJyYXlQcm9maWxlT3V0
T2ZCb3VuZHNTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKKyAgICAgICAgaW5saW5lIHZvaWQg
ZW1pdEFycmF5UHJvZmlsaW5nU2l0ZVdpdGhDZWxsKFJlZ2lzdGVySUQgY2VsbCwgUmVnaXN0ZXJJ
RCBpbmRleGluZ1R5cGUsIEFycmF5UHJvZmlsZSopOworICAgICAgICBpbmxpbmUgdm9pZCBlbWl0
QXJyYXlQcm9maWxlU3RvcmVUb0hvbGVTcGVjaWFsQ2FzZShBcnJheVByb2ZpbGUqKTsKKyAgICAg
ICAgaW5saW5lIHZvaWQgZW1pdEFycmF5UHJvZmlsZU91dE9mQm91bmRzU3BlY2lhbENhc2UoQXJy
YXlQcm9maWxlKik7CiAgICAgICAgIAotICAgICAgICBKSVRBcnJheU1vZGUgY2hvb3NlQXJyYXlN
b2RlKEFycmF5UHJvZmlsZSopOworICAgICAgICBpbmxpbmUgSklUQXJyYXlNb2RlIGNob29zZUFy
cmF5TW9kZShBcnJheVByb2ZpbGUqKTsKICAgICAgICAgCiAgICAgICAgIC8vIFByb3BlcnR5IGlz
IGluIHJlZ1QxLCBiYXNlIGlzIGluIHJlZ1QwLiByZWdUMiBjb250YWlucyBpbmRleGluZyB0eXBl
LgogICAgICAgICAvLyBQcm9wZXJ0eSBpcyBpbnQtY2hlY2tlZCBhbmQgemVybyBleHRlbmRlZC4g
QmFzZSBpcyBjZWxsIGNoZWNrZWQuCkBAIC0zNzgsMTIgKzM3OCwxMiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgSnVtcExpc3QgZW1pdERvdWJsZUxvYWQoY29uc3QgSW5zdHJ1Y3Rpb24qLCBQ
YXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAgICAgICAgSnVtcExpc3QgZW1pdENvbnRpZ3VvdXNM
b2FkKGNvbnN0IEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdU
eXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwogICAgICAgICBKdW1wTGlzdCBl
bWl0QXJyYXlTdG9yYWdlTG9hZChjb25zdCBJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUpOwotICAgICAgICBKdW1wTGlzdCBlbWl0TG9hZEZvckFycmF5TW9kZShjb25zdCBJbnN0
cnVjdGlvbiosIEpJVEFycmF5TW9kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAg
IEFMV0FZU19JTkxJTkUgSnVtcExpc3QgZW1pdExvYWRGb3JBcnJheU1vZGUoY29uc3QgSW5zdHJ1
Y3Rpb24qLCBKSVRBcnJheU1vZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwogCiAgICAgICAg
IEp1bXBMaXN0IGVtaXRJbnQzMkdldEJ5VmFsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkgeyByZXR1cm4gZW1pdENvbnRpZ3VvdXNHZXRCeVZh
bChpbnN0cnVjdGlvbiwgYmFkVHlwZSwgSW50MzJTaGFwZSk7IH0KLSAgICAgICAgSnVtcExpc3Qg
ZW1pdERvdWJsZUdldEJ5VmFsKGNvbnN0IEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFk
VHlwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRDb250aWd1b3VzR2V0QnlWYWwoY29uc3QgSW5z
dHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgZXhwZWN0ZWRT
aGFwZSA9IENvbnRpZ3VvdXNTaGFwZSk7Ci0gICAgICAgIEp1bXBMaXN0IGVtaXRBcnJheVN0b3Jh
Z2VHZXRCeVZhbChjb25zdCBJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUpOwor
ICAgICAgICBpbmxpbmUgSnVtcExpc3QgZW1pdERvdWJsZUdldEJ5VmFsKGNvbnN0IEluc3RydWN0
aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CisgICAgICAgIGlubGluZSBKdW1wTGlzdCBl
bWl0Q29udGlndW91c0dldEJ5VmFsKGNvbnN0IEluc3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYg
YmFkVHlwZSwgSW5kZXhpbmdUeXBlIGV4cGVjdGVkU2hhcGUgPSBDb250aWd1b3VzU2hhcGUpOwor
ICAgICAgICBpbmxpbmUgSnVtcExpc3QgZW1pdEFycmF5U3RvcmFnZUdldEJ5VmFsKGNvbnN0IElu
c3RydWN0aW9uKiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSk7CiAgICAgICAgIEp1bXBMaXN0IGVt
aXREaXJlY3RBcmd1bWVudHNHZXRCeVZhbChjb25zdCBJbnN0cnVjdGlvbiosIFBhdGNoYWJsZUp1
bXAmIGJhZFR5cGUpOwogICAgICAgICBKdW1wTGlzdCBlbWl0U2NvcGVkQXJndW1lbnRzR2V0QnlW
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKTsKICAgICAgICAg
SnVtcExpc3QgZW1pdEludFR5cGVkQXJyYXlHZXRCeVZhbChjb25zdCBJbnN0cnVjdGlvbiosIFBh
dGNoYWJsZUp1bXAmIGJhZFR5cGUsIFR5cGVkQXJyYXlUeXBlKTsKQEAgLTQyNywzMSArNDI3LDMx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBlbnVtIEZpbmFsT2JqZWN0TW9kZSB7IE1heUJl
RmluYWwsIEtub3duTm90RmluYWwgfTsKIAogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoaW50IHNyYywgSlNWYWx1ZVJlZ3MgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Vmly
dHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIHNyYyk7CisgICAgICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIEpTVmFsdWVSZWdzIHNy
Yyk7CiAKLSAgICAgICAgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0g
ICAgICAgIGRvdWJsZSBnZXRPcGVyYW5kQ29uc3RhbnREb3VibGUoaW50IHNyYyk7CisgICAgICAg
IEFMV0FZU19JTkxJTkUgaW50MzJfdCBnZXRPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Cisg
ICAgICAgIEFMV0FZU19JTkxJTkUgZG91YmxlIGdldE9wZXJhbmRDb25zdGFudERvdWJsZShpbnQg
c3JjKTsKIAogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgICAgIGJvb2wgZ2V0T3BlcmFuZENv
bnN0YW50SW50KGludCBvcDEsIGludCBvcDIsIGludCYgb3AsIGludDMyX3QmIGNvbnN0YW50KTsK
KyAgICAgICAgQUxXQVlTX0lOTElORSBib29sIGdldE9wZXJhbmRDb25zdGFudEludChpbnQgb3Ax
LCBpbnQgb3AyLCBpbnQmIG9wLCBpbnQzMl90JiBjb25zdGFudCk7CiAKLSAgICAgICAgdm9pZCBl
bWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKLSAgICAgICAgdm9pZCBlbWl0
TG9hZFBheWxvYWQoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxvYWQpOworICAgICAgICBpbmxp
bmUgdm9pZCBlbWl0TG9hZFRhZyhpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAgICAgICAg
aW5saW5lIHZvaWQgZW1pdExvYWRQYXlsb2FkKGludCBpbmRleCwgUmVnaXN0ZXJJRCBwYXlsb2Fk
KTsKIAotICAgICAgICB2b2lkIGVtaXRMb2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQg
dGFnLCBSZWdpc3RlcklEIHBheWxvYWQpOwotICAgICAgICB2b2lkIGVtaXRMb2FkKGludCBpbmRl
eCwgUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBiYXNlID0g
Y2FsbEZyYW1lUmVnaXN0ZXIpOwotICAgICAgICB2b2lkIGVtaXRMb2FkMihpbnQgaW5kZXgxLCBS
ZWdpc3RlcklEIHRhZzEsIFJlZ2lzdGVySUQgcGF5bG9hZDEsIGludCBpbmRleDIsIFJlZ2lzdGVy
SUQgdGFnMiwgUmVnaXN0ZXJJRCBwYXlsb2FkMik7CisgICAgICAgIGlubGluZSB2b2lkIGVtaXRM
b2FkKGNvbnN0IEpTVmFsdWUmIHYsIFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQp
OworICAgICAgICBpbmxpbmUgdm9pZCBlbWl0TG9hZChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgdGFn
LCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lzdGVy
KTsKKyAgICAgICAgaW5saW5lIHZvaWQgZW1pdExvYWQyKGludCBpbmRleDEsIFJlZ2lzdGVySUQg
dGFnMSwgUmVnaXN0ZXJJRCBwYXlsb2FkMSwgaW50IGluZGV4MiwgUmVnaXN0ZXJJRCB0YWcyLCBS
ZWdpc3RlcklEIHBheWxvYWQyKTsKIAotICAgICAgICB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgs
IFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgYmFzZSA9IGNh
bGxGcmFtZVJlZ2lzdGVyKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmUoaW50IGluZGV4LCBjb25z
dCBKU1ZhbHVlIGNvbnN0YW50LCBSZWdpc3RlcklEIGJhc2UgPSBjYWxsRnJhbWVSZWdpc3Rlcik7
Ci0gICAgICAgIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdpc3RlcklEIHBheWxv
YWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUlu
dDMyKGludCBpbmRleCwgVHJ1c3RlZEltbTMyIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0g
ZmFsc2UpOwotICAgICAgICB2b2lkIGVtaXRTdG9yZUNlbGwoaW50IGluZGV4LCBSZWdpc3RlcklE
IHBheWxvYWQsIGJvb2wgaW5kZXhJc0NlbGwgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgZW1pdFN0
b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9
IGZhbHNlKTsKLSAgICAgICAgdm9pZCBlbWl0U3RvcmVEb3VibGUoaW50IGluZGV4LCBGUFJlZ2lz
dGVySUQgdmFsdWUpOworICAgICAgICBpbmxpbmUgdm9pZCBlbWl0U3RvcmUoaW50IGluZGV4LCBS
ZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIGJhc2UgPSBjYWxs
RnJhbWVSZWdpc3Rlcik7CisgICAgICAgIGlubGluZSB2b2lkIGVtaXRTdG9yZShpbnQgaW5kZXgs
IGNvbnN0IEpTVmFsdWUgY29uc3RhbnQsIFJlZ2lzdGVySUQgYmFzZSA9IGNhbGxGcmFtZVJlZ2lz
dGVyKTsKKyAgICAgICAgaW5saW5lIHZvaWQgZW1pdFN0b3JlSW50MzIoaW50IGluZGV4LCBSZWdp
c3RlcklEIHBheWxvYWQsIGJvb2wgaW5kZXhJc0ludDMyID0gZmFsc2UpOworICAgICAgICBpbmxp
bmUgdm9pZCBlbWl0U3RvcmVJbnQzMihpbnQgaW5kZXgsIFRydXN0ZWRJbW0zMiBwYXlsb2FkLCBi
b29sIGluZGV4SXNJbnQzMiA9IGZhbHNlKTsKKyAgICAgICAgaW5saW5lIHZvaWQgZW1pdFN0b3Jl
Q2VsbChpbnQgaW5kZXgsIFJlZ2lzdGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQ2VsbCA9IGZh
bHNlKTsKKyAgICAgICAgaW5saW5lIHZvaWQgZW1pdFN0b3JlQm9vbChpbnQgaW5kZXgsIFJlZ2lz
dGVySUQgcGF5bG9hZCwgYm9vbCBpbmRleElzQm9vbCA9IGZhbHNlKTsKKyAgICAgICAgaW5saW5l
IHZvaWQgZW1pdFN0b3JlRG91YmxlKGludCBpbmRleCwgRlBSZWdpc3RlcklEIHZhbHVlKTsKIAot
ICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmlydHVhbFJlZ2lz
dGVySW5kZXgpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQg
dmlydHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKKyAgICAgICAgaW5saW5lIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGludCB2aXJ0dWFsUmVnaXN0ZXJJbmRleCk7
CisgICAgICAgIGlubGluZSB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChpbnQgdmly
dHVhbFJlZ2lzdGVySW5kZXgsIFJlZ2lzdGVySUQgdGFnKTsKIAogICAgICAgICB2b2lkIGNvbXBp
bGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7CiAKQEAgLTQ2MCwxMSArNDYwLDEx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRCaW5hcnlEb3VibGVPcChjb25z
dCBJbnN0cnVjdGlvbiAqLCBPcGVyYW5kVHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVt
cExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMgPSB0cnVlLCBib29sIG9w
MklzSW5SZWdpc3RlcnMgPSB0cnVlKTsKIAogI2Vsc2UgLy8gVVNFKEpTVkFMVUUzMl82NCkKLSAg
ICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGludCBzcmMsIFJlZ2lzdGVySUQgZHN0
KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKFZpcnR1YWxSZWdpc3RlciBz
cmMsIFJlZ2lzdGVySUQgZHN0KTsKLSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVy
cyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBkc3QyKTsK
LSAgICAgICAgdm9pZCBlbWl0R2V0VmlydHVhbFJlZ2lzdGVycyhWaXJ0dWFsUmVnaXN0ZXIgc3Jj
MSwgUmVnaXN0ZXJJRCBkc3QxLCBWaXJ0dWFsUmVnaXN0ZXIgc3JjMiwgUmVnaXN0ZXJJRCBkc3Qy
KTsKLSAgICAgICAgdm9pZCBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGludCBkc3QsIFJlZ2lzdGVy
SUQgZnJvbSA9IHJlZ1QwKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOworICAgICAgICBBTFdBWVNfSU5M
SU5FIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgc3JjLCBSZWdp
c3RlcklEIGRzdCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBlbWl0R2V0VmlydHVhbFJl
Z2lzdGVycyhpbnQgc3JjMSwgUmVnaXN0ZXJJRCBkc3QxLCBpbnQgc3JjMiwgUmVnaXN0ZXJJRCBk
c3QyKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXJz
KFZpcnR1YWxSZWdpc3RlciBzcmMxLCBSZWdpc3RlcklEIGRzdDEsIFZpcnR1YWxSZWdpc3RlciBz
cmMyLCBSZWdpc3RlcklEIGRzdDIpOworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZW1pdFB1
dFZpcnR1YWxSZWdpc3RlcihpbnQgZHN0LCBSZWdpc3RlcklEIGZyb20gPSByZWdUMCk7CiAgICAg
ICAgIHZvaWQgZW1pdFB1dFZpcnR1YWxSZWdpc3RlcihWaXJ0dWFsUmVnaXN0ZXIgZHN0LCBSZWdp
c3RlcklEIGZyb20gPSByZWdUMCk7CiAgICAgICAgIHZvaWQgZW1pdFN0b3JlQ2VsbChpbnQgZHN0
LCBSZWdpc3RlcklEIHBheWxvYWQsIGJvb2wgLyogb25seSB1c2VkIGluIEpTVmFsdWUzMl82NCAq
LyA9IGZhbHNlKQogICAgICAgICB7CkBAIC00NzUsMTUgKzQ3NSwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCBwYXlsb2FkKTsKICAg
ICAgICAgfQogCi0gICAgICAgIEp1bXAgZW1pdEp1bXBJZkJvdGhKU0NlbGxzKFJlZ2lzdGVySUQs
IFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lkIGVtaXRKdW1wU2xvd0Nhc2VJ
ZkpTQ2VsbChSZWdpc3RlcklEKTsKLSAgICAgICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RK
U0NlbGwoUmVnaXN0ZXJJRCk7Ci0gICAgICAgIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKFJlZ2lzdGVySUQsIGludCBWUmVnKTsKLSAgICAgICAgSnVtcCBlbWl0SnVtcElmTm90SW50
KFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQgc2NyYXRjaCk7Ci0gICAgICAgIFBh
dGNoYWJsZUp1bXAgZW1pdFBhdGNoYWJsZUp1bXBJZk5vdEludChSZWdpc3RlcklEKTsKLSAgICAg
ICAgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7Ci0gICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVtYmVyKFJlZ2lzdGVySUQpOwotICAgICAgICB2b2lk
IGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEludChSZWdpc3RlcklELCBSZWdpc3RlcklELCBSZWdpc3Rl
cklEIHNjcmF0Y2gpOworICAgICAgICBBTFdBWVNfSU5MSU5FIEp1bXAgZW1pdEp1bXBJZkJvdGhK
U0NlbGxzKFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQsIFJlZ2lzdGVySUQpOworICAgICAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmSlNDZWxsKFJlZ2lzdGVySUQpOworICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKFJlZ2lz
dGVySUQpOworICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKFJlZ2lzdGVySUQsIGludCBWUmVnKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBKdW1w
IGVtaXRKdW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBQYXRjaGFibGVKdW1wIGVtaXRQYXRjaGFibGVK
dW1wSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCk7CisgICAgICAgIEFM
V0FZU19JTkxJTkUgdm9pZCBlbWl0SnVtcFNsb3dDYXNlSWZOb3RJbnQoUmVnaXN0ZXJJRCwgUmVn
aXN0ZXJJRCwgUmVnaXN0ZXJJRCBzY3JhdGNoKTsKIAogICAgICAgICB2b2lkIGNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQgYmFzZVZSZWcsIGNvbnN0IElkZW50aWZpZXIqKTsKIApAQCAtNzE0LDEz
ICs3MTQsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZh
cmlhYmxlSW5kaXJlY3QoSlNWYWx1ZSoqIGFkZHJlc3NPZk9wZXJhbmQsIGludCB2YWx1ZSwgV2F0
Y2hwb2ludFNldCoqKTsKICAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAotICAgICAg
ICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CisgICAgICAgIEFMV0FZU19JTkxJTkUg
dm9pZCBlbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpOwogCi0gICAgICAgIHZvaWQgZW1pdFB1dElu
dFRvQ2FsbEZyYW1lSGVhZGVyKFJlZ2lzdGVySUQgZnJvbSwgaW50IGVudHJ5KTsKKyAgICAgICAg
QUxXQVlTX0lOTElORSB2b2lkIGVtaXRQdXRJbnRUb0NhbGxGcmFtZUhlYWRlcihSZWdpc3RlcklE
IGZyb20sIGludCBlbnRyeSk7CiAKLSAgICAgICAgSlNWYWx1ZSBnZXRDb25zdGFudE9wZXJhbmQo
aW50IHNyYyk7Ci0gICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7Ci0g
ICAgICAgIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRDaGFyKGludCBzcmMpOworICAgICAgICBBTFdB
WVNfSU5MSU5FIEpTVmFsdWUgZ2V0Q29uc3RhbnRPcGVyYW5kKGludCBzcmMpOworICAgICAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNPcGVyYW5kQ29uc3RhbnRJbnQoaW50IHNyYyk7CisgICAgICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc09wZXJhbmRDb25zdGFudENoYXIoaW50IHNyYyk7CiAKICAg
ICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBHZW5lcmF0b3IsIHR5cGVuYW1l
IFByb2ZpbGVkRnVuY3Rpb24sIHR5cGVuYW1lIE5vblByb2ZpbGVkRnVuY3Rpb24+CiAgICAgICAg
IHZvaWQgZW1pdE1hdGhJQ0Zhc3QoSklUVW5hcnlNYXRoSUM8R2VuZXJhdG9yPiosIGNvbnN0IElu
c3RydWN0aW9uKiwgUHJvZmlsZWRGdW5jdGlvbiwgTm9uUHJvZmlsZWRGdW5jdGlvbik7CkBAIC03
NDcsNyArNzQ3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIWl0ZXIt
PmZyb20uaXNTZXQoKSk7CiAgICAgICAgICAgICArK2l0ZXI7CiAgICAgICAgIH0KLSAgICAgICAg
dm9pZCBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiwgaW50IHZpcnR1YWxSZWdpc3RlckluZGV4KTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2
b2lkIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImLCBpbnQgdmlydHVhbFJlZ2lzdGVySW5kZXgpOwogICAgICAgICB2b2lkIGxpbmtBbGxTbG93
Q2FzZXNGb3JCeXRlY29kZU9mZnNldChWZWN0b3I8U2xvd0Nhc2VFbnRyeT4mIHNsb3dDYXNlcywK
ICAgICAgICAgICAgIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImLCB1bnNpZ25lZCBi
eXRlY29kZU9mZnNldCk7CiAKQEAgLTc1NiwxMiArNzU2LDEyIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAgICAgbGlua0FsbFNsb3dDYXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KG1fc2xvd0Nhc2Vz
LCBpdGVyLCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgfQogCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2soY29uc3QgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPik7CisgICAgICAgIEFMV0FZU19JTkxJTkUgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhjb25zdCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+KTsKICNpZiBPUyhXSU5ET1dTKSAmJiBDUFUoWDg2XzY0KQotICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrQW5kU2xv
d1BhdGhSZXR1cm5UeXBlKGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4pOworICAg
ICAgICBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tBbmRTbG93UGF0aFJldHVyblR5cGUoY29uc3QgRnVuY3Rpb25QdHI8Q0Z1bmN0
aW9uUHRyVGFnPik7CiAjZW5kaWYKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgYXBwZW5k
Q2FsbFdpdGhDYWxsRnJhbWVSb2xsYmFja09uRXhjZXB0aW9uKGNvbnN0IEZ1bmN0aW9uUHRyPENG
dW5jdGlvblB0clRhZz4pOwotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxs
V2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJlc3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVu
Y3Rpb25QdHJUYWc+LCBpbnQpOworICAgICAgICBBTFdBWVNfSU5MSU5FIE1hY3JvQXNzZW1ibGVy
OjpDYWxsIGFwcGVuZENhbGxXaXRoQ2FsbEZyYW1lUm9sbGJhY2tPbkV4Y2VwdGlvbihjb25zdCBG
dW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+KTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0SlNWYWx1ZVJl
c3VsdChjb25zdCBGdW5jdGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+LCBpbnQpOwogICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBNZXRhZGF0YT4KICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
YXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldEpTVmFsdWVSZXN1bHRXaXRoUHJvZmlsZShN
ZXRhZGF0YSYsIGNvbnN0IEZ1bmN0aW9uUHRyPENGdW5jdGlvblB0clRhZz4sIGludCk7CiAgICAg
ICAgIApAQCAtODU0LDE1ICs4NTQsMTUgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE9wPgogICAgICAgICB2b2lkIGVtaXRSaWdodFNoaWZ0RmFzdFBhdGgoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgSklUUmlnaHRTaGlmdEdlbmVyYXRv
cjo6U2hpZnRUeXBlKTsKIAotICAgICAgICB2b2lkIHVwZGF0ZVRvcENhbGxGcmFtZSgpOworICAg
ICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAKLSAgICAgICAg
Q2FsbCBlbWl0TmFrZWRDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IGZ1bmN0aW9uID0gQ29kZVB0cjxO
b1B0clRhZz4oKSk7Ci0gICAgICAgIENhbGwgZW1pdE5ha2VkVGFpbENhbGwoQ29kZVB0cjxOb1B0
clRhZz4gZnVuY3Rpb24gPSBDb2RlUHRyPE5vUHRyVGFnPigpKTsKKyAgICAgICAgQUxXQVlTX0lO
TElORSBDYWxsIGVtaXROYWtlZENhbGwoQ29kZVB0cjxOb1B0clRhZz4gZnVuY3Rpb24gPSBDb2Rl
UHRyPE5vUHRyVGFnPigpKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSBDYWxsIGVtaXROYWtlZFRh
aWxDYWxsKENvZGVQdHI8Tm9QdHJUYWc+IGZ1bmN0aW9uID0gQ29kZVB0cjxOb1B0clRhZz4oKSk7
CiAKICAgICAgICAgLy8gTG9hZHMgdGhlIGNoYXJhY3RlciB2YWx1ZSBvZiBhIHNpbmdsZSBjaGFy
YWN0ZXIgc3RyaW5nIGludG8gZHN0LgotICAgICAgICB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3Ry
aW5nKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsK
KyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGVtaXRMb2FkQ2hhcmFjdGVyU3RyaW5nKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRzdCwgSnVtcExpc3QmIGZhaWx1cmVzKTsKIAotICAgICAg
ICBpbnQganVtcFRhcmdldChjb25zdCBJbnN0cnVjdGlvbiosIGludCB0YXJnZXQpOworICAgICAg
ICBBTFdBWVNfSU5MSU5FIGludCBqdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiwgaW50IHRh
cmdldCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICB2b2lkIGVtaXRF
bnRlck9wdGltaXphdGlvbkNoZWNrKCk7CkBAIC04NzUsMjAgKzg3NSwyMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKFNBTVBMSU5HX0ZMQUdTKQotICAgICAgICB2b2lk
IHNldFNhbXBsaW5nRmxhZyhpbnQzMl90KTsKLSAgICAgICAgdm9pZCBjbGVhclNhbXBsaW5nRmxh
ZyhpbnQzMl90KTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFNhbXBsaW5nRmxhZyhp
bnQzMl90KTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIGNsZWFyU2FtcGxpbmdGbGFnKGlu
dDMyX3QpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoU0FNUExJTkdfQ09VTlRFUlMpCi0gICAgICAg
IHZvaWQgZW1pdENvdW50KEFic3RyYWN0U2FtcGxpbmdDb3VudGVyJiwgaW50MzJfdCA9IDEpOwor
ICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZW1pdENvdW50KEFic3RyYWN0U2FtcGxpbmdDb3Vu
dGVyJiwgaW50MzJfdCA9IDEpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KQotICAgICAgICB2b2lkIHNhbXBsZUluc3RydWN0aW9uKGNvbnN0IEluc3RydWN0aW9uKiwgYm9v
bCA9IGZhbHNlKTsKKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNhbXBsZUluc3RydWN0aW9u
KGNvbnN0IEluc3RydWN0aW9uKiwgYm9vbCA9IGZhbHNlKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KENPREVCTE9DS19TQU1QTElORykKLSAgICAgICAgdm9pZCBzYW1wbGVDb2RlQmxvY2soQ29kZUJs
b2NrKik7CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzYW1wbGVDb2RlQmxvY2soQ29kZUJs
b2NrKik7CiAjZWxzZQogICAgICAgICB2b2lkIHNhbXBsZUNvZGVCbG9jayhDb2RlQmxvY2sqKSB7
fQogI2VuZGlmCkBAIC05MTEsNyArOTExLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8v
IElmIHlvdSBuZWVkIHRvIGNoZWNrIGEgdmFsdWUgZnJvbSB0aGUgbWV0YWRhdGEgdGFibGUgYW5k
IHlvdSBuZWVkIGl0IHRvCiAgICAgICAgIC8vIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBmYXN0
IGFuZCBzbG93IHBhdGgsIHRoZW4geW91IHdhbnQgdG8gdXNlIHRoaXMuCiAgICAgICAgIC8vIEl0
IHdpbGwgZ2l2ZSB0aGUgc2xvdyBwYXRoIHRoZSBzYW1lIHZhbHVlIHJlYWQgYnkgdGhlIGZhc3Qg
cGF0aC4KLSAgICAgICAgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0VG9TY29wZSk7
CisgICAgICAgIEFMV0FZU19JTkxJTkUgR2V0UHV0SW5mbyBjb3BpZWRHZXRQdXRJbmZvKE9wUHV0
VG9TY29wZSk7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEJpbmFyeU9wPgogICAgICAgICBB
cml0aFByb2ZpbGUgY29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAppbmRleCBlNzA2NDdmZmI1Ny4uM2I4NWNiZjU3MGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCkBAIC0xODUsNyArMTg1LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgdm9pZCB2YWxpZGF0ZVJlZmVyZW5jZXMoY29uc3QgVHJhY2tlZFJlZmVy
ZW5jZXMmKTsKICAgICAKLSAgICBKU1ZhbHVlIGV4ZWN1dGUoVk0qLCBQcm90b0NhbGxGcmFtZSop
OworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZSBleGVjdXRlKFZNKiwgUHJvdG9DYWxsRnJhbWUq
KTsKICAgICAKICAgICB2b2lkKiBzdGFydCgpIHsgcmV0dXJuIGRhdGFBZGRyZXNzQXRPZmZzZXQo
MCk7IH0KICAgICB2aXJ0dWFsIHNpemVfdCBzaXplKCkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQnV0dGVyZmx5LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9CdXR0ZXJmbHkuaAppbmRleCA1MGZmOGYwOGZkOS4uZWM4NjExYTBjY2EgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0J1dHRlcmZseS5oCkBAIC0xNDcsMTAgKzE0
NywxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHVu
c2lnbmVkIGF2YWlsYWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2Fw
YWNpdHksIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGF2YWls
YWJsZUNvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiwgdW5zaWduZWQgdmVjdG9yTGVu
Z3RoKTsKKyAgICBBTFdBWVNfSU5MSU5FIHN0YXRpYyB1bnNpZ25lZCBhdmFpbGFibGVDb250aWd1
b3VzVmVjdG9yTGVuZ3RoKFN0cnVjdHVyZSosIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CiAgICAg
CiAgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgdW5zaWduZWQgb3B0aW1hbENvbnRpZ3VvdXNWZWN0
b3JMZW5ndGgoc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIG9wdGltYWxDb250aWd1b3VzVmVjdG9yTGVuZ3RoKFN0cnVj
dHVyZSosIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCk7CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMg
dW5zaWduZWQgb3B0aW1hbENvbnRpZ3VvdXNWZWN0b3JMZW5ndGgoU3RydWN0dXJlKiwgdW5zaWdu
ZWQgdmVjdG9yTGVuZ3RoKTsKICAgICAKICAgICAvLyBUaGlzIG1ldGhvZCBpcyBoZXJlIG5vdCBq
dXN0IGJlY2F1c2UgaXQncyBoYW5keSwgYnV0IHRvIHJlbWluZCB5b3UgdGhhdAogICAgIC8vIHRo
ZSB3aG9sZSBwb2ludCBvZiBidXR0ZXJmbGllcyBpcyB0byBkbyBldmlsIHBvaW50ZXIgYXJpdGht
ZXRpYy4KQEAgLTE2NiwxMiArMTY2LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgcHRyZGlmZl90
IG9mZnNldE9mUHVibGljTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGluZ0hlYWRlcigp
ICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mUHVibGljTGVuZ3RoKCk7IH0KICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mVmVjdG9yTGVuZ3RoKCkgeyByZXR1cm4gb2Zmc2V0T2ZJbmRleGlu
Z0hlYWRlcigpICsgSW5kZXhpbmdIZWFkZXI6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCk7IH0KIAot
ICAgIHN0YXRpYyBCdXR0ZXJmbHkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBKU09iamVj
dCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJ
bkJ5dGVzLCBHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKLSAgICBzdGF0aWMgQnV0dGVy
Zmx5KiBjcmVhdGVVbmluaXRpYWxpemVkKFZNJiwgSlNPYmplY3QqIGludGVuZGVkT3duZXIsIHNp
emVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhp
bmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7CisgICAgaW5saW5l
IHN0YXRpYyBCdXR0ZXJmbHkqIHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQoVk0mLCBKU09iamVjdCog
aW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0
eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5
dGVzLCBHQ0RlZmVycmFsQ29udGV4dCogPSBudWxscHRyKTsKKyAgICBpbmxpbmUgc3RhdGljIEJ1
dHRlcmZseSogY3JlYXRlVW5pbml0aWFsaXplZChWTSYsIEpTT2JqZWN0KiBpbnRlbmRlZE93bmVy
LCBzaXplX3QgcHJlQ2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0lu
ZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCi0gICAg
c3RhdGljIEJ1dHRlcmZseSogdHJ5Q3JlYXRlKFZNJiB2bSwgSlNPYmplY3QqLCBzaXplX3QgcHJl
Q2FwYWNpdHksIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhc0luZGV4aW5nSGVhZGVy
LCBjb25zdCBJbmRleGluZ0hlYWRlciYgaW5kZXhpbmdIZWFkZXIsIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyk7Ci0gICAgc3RhdGljIEJ1dHRlcmZseSogY3JlYXRlKFZNJiwgSlNP
YmplY3QqIGludGVuZGVkT3duZXIsIHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHksIGJvb2wgaGFzSW5kZXhpbmdIZWFkZXIsIGNvbnN0IEluZGV4aW5nSGVhZGVyJiwg
c2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKLSAgICBzdGF0aWMgQnV0dGVyZmx5
KiBjcmVhdGUoVk0mLCBKU09iamVjdCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKik7CisgICAg
aW5saW5lIHN0YXRpYyBCdXR0ZXJmbHkqIHRyeUNyZWF0ZShWTSYgdm0sIEpTT2JqZWN0Kiwgc2l6
ZV90IHByZUNhcGFjaXR5LCBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGlu
Z0hlYWRlciwgY29uc3QgSW5kZXhpbmdIZWFkZXImIGluZGV4aW5nSGVhZGVyLCBzaXplX3QgaW5k
ZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlubGluZSBzdGF0aWMgQnV0dGVyZmx5KiBj
cmVhdGUoVk0mLCBKU09iamVjdCogaW50ZW5kZWRPd25lciwgc2l6ZV90IHByZUNhcGFjaXR5LCBz
aXplX3QgcHJvcGVydHlDYXBhY2l0eSwgYm9vbCBoYXNJbmRleGluZ0hlYWRlciwgY29uc3QgSW5k
ZXhpbmdIZWFkZXImLCBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOworICAgIGlu
bGluZSBzdGF0aWMgQnV0dGVyZmx5KiBjcmVhdGUoVk0mLCBKU09iamVjdCogaW50ZW5kZWRPd25l
ciwgU3RydWN0dXJlKik7CiAgICAgCiAgICAgSW5kZXhpbmdIZWFkZXIqIGluZGV4aW5nSGVhZGVy
KCkgeyByZXR1cm4gSW5kZXhpbmdIZWFkZXI6OmZyb20odGhpcyk7IH0KICAgICBjb25zdCBJbmRl
eGluZ0hlYWRlciogaW5kZXhpbmdIZWFkZXIoKSBjb25zdCB7IHJldHVybiBJbmRleGluZ0hlYWRl
cjo6ZnJvbSh0aGlzKTsgfQpAQCAtMjA3LDkgKzIwNyw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAg
ICB2b2lkKiBiYXNlKHNpemVfdCBwcmVDYXBhY2l0eSwgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkp
IHsgcmV0dXJuIHByb3BlcnR5U3RvcmFnZSgpIC0gcHJvcGVydHlDYXBhY2l0eSAtIHByZUNhcGFj
aXR5OyB9Ci0gICAgdm9pZCogYmFzZShTdHJ1Y3R1cmUqKTsKKyAgICBpbmxpbmUgdm9pZCogYmFz
ZShTdHJ1Y3R1cmUqKTsKIAotICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd0FycmF5
UmlnaHQoCisgICAgaW5saW5lIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd0FycmF5Umln
aHQoCiAgICAgICAgIEJ1dHRlcmZseSosIFZNJiwgSlNPYmplY3QqIGludGVuZGVkT3duZXIsIFN0
cnVjdHVyZSogb2xkU3RydWN0dXJlLAogICAgICAgICBzaXplX3QgcHJvcGVydHlDYXBhY2l0eSwg
Ym9vbCBoYWRJbmRleGluZ0hlYWRlciwKICAgICAgICAgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAKQEAg
LTIxOSwxMyArMjE5LDEzIEBAIHB1YmxpYzoKICAgICAvLyBtZXRob2RzIGlzIG5vdCBleGhhdXN0
aXZlIGFuZCBpcyBub3QgaW50ZW5kZWQgdG8gZW5jYXBzdWxhdGUgYWxsIHBvc3NpYmxlIGFsbG9j
YXRpb24KICAgICAvLyBtb2RlcyBvZiBidXR0ZXJmbGllcyAtIHRoZXJlIGFyZSBjb2RlIHBhdGhz
IHRoYXQgYWxsb2NhdGUgYnV0dGVyZmxpZXMgYnkgY2FsbGluZwogICAgIC8vIGRpcmVjdGx5IGlu
dG8gSGVhcDo6dHJ5QWxsb2NhdGVTdG9yYWdlLgotICAgIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0
ZU9yR3Jvd1Byb3BlcnR5U3RvcmFnZShCdXR0ZXJmbHkqLCBWTSYsIEpTT2JqZWN0KiBpbnRlbmRl
ZE93bmVyLCBTdHJ1Y3R1cmUqLCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5l
d1Byb3BlcnR5Q2FwYWNpdHkpOwotICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoVk0mLCBK
U09iamVjdCogaW50ZW5kZWRPd25lciwgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUsIHNpemVfdCBw
cm9wZXJ0eUNhcGFjaXR5LCBib29sIGhhZEluZGV4aW5nSGVhZGVyLCBzaXplX3Qgb2xkSW5kZXhp
bmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRl
cyk7IC8vIEFzc3VtZXMgdGhhdCBwcmVDYXBhY2l0eSBpcyB6ZXJvLCBhbmQgYXNzZXJ0cyBhcyBt
dWNoLgotICAgIEJ1dHRlcmZseSogZ3Jvd0FycmF5UmlnaHQoVk0mLCBKU09iamVjdCogaW50ZW5k
ZWRPd25lciwgU3RydWN0dXJlKiwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVz
KTsKLSAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwgSlNPYmplY3QqIGludGVuZGVkT3du
ZXIsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVyLCBz
aXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBhY2l0
eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzKTsKLSAgICBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwgSlNPYmplY3QqIGlu
dGVuZGVkT3duZXIsIFN0cnVjdHVyZSosIHNpemVfdCBuZXdQcmVDYXBhY2l0eSwgc2l6ZV90IG5l
d0luZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsgLy8gQXNzdW1lcyB0aGF0IHlvdSdyZSBub3Qg
Y2hhbmdpbmcgd2hldGhlciBvciBub3QgdGhlIG9iamVjdCBoYXMgYW4gaW5kZXhpbmcgaGVhZGVy
LgotICAgIEJ1dHRlcmZseSogdW5zaGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90
cyk7Ci0gICAgQnV0dGVyZmx5KiBzaGlmdChTdHJ1Y3R1cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90
cyk7CisgICAgaW5saW5lIHN0YXRpYyBCdXR0ZXJmbHkqIGNyZWF0ZU9yR3Jvd1Byb3BlcnR5U3Rv
cmFnZShCdXR0ZXJmbHkqLCBWTSYsIEpTT2JqZWN0KiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUq
LCBzaXplX3Qgb2xkUHJvcGVydHlDYXBhY2l0eSwgc2l6ZV90IG5ld1Byb3BlcnR5Q2FwYWNpdHkp
OworICAgIGlubGluZSBCdXR0ZXJmbHkqIGdyb3dBcnJheVJpZ2h0KFZNJiwgSlNPYmplY3QqIGlu
dGVuZGVkT3duZXIsIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlLCBzaXplX3QgcHJvcGVydHlDYXBh
Y2l0eSwgYm9vbCBoYWRJbmRleGluZ0hlYWRlciwgc2l6ZV90IG9sZEluZGV4aW5nUGF5bG9hZFNp
emVJbkJ5dGVzLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOyAvLyBBc3N1
bWVzIHRoYXQgcHJlQ2FwYWNpdHkgaXMgemVybywgYW5kIGFzc2VydHMgYXMgbXVjaC4KKyAgICBp
bmxpbmUgQnV0dGVyZmx5KiBncm93QXJyYXlSaWdodChWTSYsIEpTT2JqZWN0KiBpbnRlbmRlZE93
bmVyLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3SW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwor
ICAgIGlubGluZSBCdXR0ZXJmbHkqIHJlc2l6ZUFycmF5KFZNJiwgSlNPYmplY3QqIGludGVuZGVk
T3duZXIsIHNpemVfdCBwcm9wZXJ0eUNhcGFjaXR5LCBib29sIG9sZEhhc0luZGV4aW5nSGVhZGVy
LCBzaXplX3Qgb2xkSW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMsIHNpemVfdCBuZXdQcmVDYXBh
Y2l0eSwgYm9vbCBuZXdIYXNJbmRleGluZ0hlYWRlciwgc2l6ZV90IG5ld0luZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKKyAgICBpbmxpbmUgQnV0dGVyZmx5KiByZXNpemVBcnJheShWTSYsIEpT
T2JqZWN0KiBpbnRlbmRlZE93bmVyLCBTdHJ1Y3R1cmUqLCBzaXplX3QgbmV3UHJlQ2FwYWNpdHks
IHNpemVfdCBuZXdJbmRleGluZ1BheWxvYWRTaXplSW5CeXRlcyk7IC8vIEFzc3VtZXMgdGhhdCB5
b3UncmUgbm90IGNoYW5naW5nIHdoZXRoZXIgb3Igbm90IHRoZSBvYmplY3QgaGFzIGFuIGluZGV4
aW5nIGhlYWRlci4KKyAgICBpbmxpbmUgQnV0dGVyZmx5KiB1bnNoaWZ0KFN0cnVjdHVyZSosIHNp
emVfdCBudW1iZXJPZlNsb3RzKTsKKyAgICBpbmxpbmUgQnV0dGVyZmx5KiBzaGlmdChTdHJ1Y3R1
cmUqLCBzaXplX3QgbnVtYmVyT2ZTbG90cyk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAppbmRleCA1NGU4NDYzMWQ3
Ni4uNDQzOWNmMmZjNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmgKQEAgLTExNCwxOCArMTE0LDE4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgSWRlbnRpZmll
ciBmcm9tU3RyaW5nKFZNKiwgY29uc3QgY2hhciAoJmNoYXJhY3RlcnMpW2NoYXJhY3RlcnNDb3Vu
dF0pOwogICAgIHRlbXBsYXRlPHVuc2lnbmVkIGNoYXJhY3RlcnNDb3VudD4KICAgICBzdGF0aWMg
SWRlbnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IGNoYXIgKCZjaGFyYWN0ZXJz
KVtjaGFyYWN0ZXJzQ291bnRdKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZN
KiwgY29uc3QgTENoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9t
U3RyaW5nKFZNKiwgY29uc3QgVUNoYXIqLCBpbnQgbGVuZ3RoKTsKLSAgICBzdGF0aWMgSWRlbnRp
ZmllciBmcm9tU3RyaW5nKFZNKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIElkZW50aWZp
ZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBBdG9taWNTdHJpbmdJbXBsKik7Ci0gICAgc3RhdGlj
IElkZW50aWZpZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsK
LSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFN0cmlu
ZyYpOwotICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3Qg
Y2hhciopOworICAgIGlubGluZSBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNKiwgY29u
c3QgTENoYXIqLCBpbnQgbGVuZ3RoKTsKKyAgICBpbmxpbmUgc3RhdGljIElkZW50aWZpZXIgZnJv
bVN0cmluZyhWTSosIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCk7CisgICAgaW5saW5lIHN0YXRp
YyBJZGVudGlmaWVyIGZyb21TdHJpbmcoVk0qLCBjb25zdCBTdHJpbmcmKTsKKyAgICBpbmxpbmUg
c3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhFeGVjU3RhdGUqLCBBdG9taWNTdHJpbmdJbXBs
Kik7CisgICAgaW5saW5lIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwg
Y29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgaW5saW5lIHN0YXRpYyBJZGVudGlmaWVyIGZyb21T
dHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgU3RyaW5nJik7CisgICAgaW5saW5lIHN0YXRpYyBJZGVu
dGlmaWVyIGZyb21TdHJpbmcoRXhlY1N0YXRlKiwgY29uc3QgY2hhciopOwogICAgIHN0YXRpYyBJ
ZGVudGlmaWVyIGZyb21TdHJpbmcoVk0qIHZtLCBjb25zdCBWZWN0b3I8TENoYXI+JiBjaGFyYWN0
ZXJzKSB7IHJldHVybiBmcm9tU3RyaW5nKHZtLCBjaGFyYWN0ZXJzLmRhdGEoKSwgY2hhcmFjdGVy
cy5zaXplKCkpOyB9CiAKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tVWlkKFZNKiwgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7Ci0gICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVVpZChFeGVjU3Rh
dGUqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLSAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9t
VWlkKGNvbnN0IFByaXZhdGVOYW1lJik7CisgICAgaW5saW5lIHN0YXRpYyBJZGVudGlmaWVyIGZy
b21VaWQoVk0qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBpbmxpbmUgc3RhdGljIElk
ZW50aWZpZXIgZnJvbVVpZChFeGVjU3RhdGUqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAg
ICBpbmxpbmUgc3RhdGljIElkZW50aWZpZXIgZnJvbVVpZChjb25zdCBQcml2YXRlTmFtZSYpOwog
CiAgICAgc3RhdGljIElkZW50aWZpZXIgY3JlYXRlTENoYXJGcm9tVUNoYXIoVk0qIHZtLCBjb25z
dCBVQ2hhciogcywgaW50IGxlbmd0aCkgeyByZXR1cm4gSWRlbnRpZmllcih2bSwgYWRkOCh2bSwg
cywgbGVuZ3RoKSk7IH0KIApAQCAtMTU2LDggKzE1Niw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBTdHJpbmdJbXBsKiBhLCBjb25zdCBTdHJpbmdJbXBsKiBiKSB7IHJl
dHVybiA6OmVxdWFsKGEsIGIpOyB9CiAKICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgd2l0aCBzdHJp
bmcgbGl0ZXJhbHMuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJlZjxTdHJpbmdJbXBs
PiBhZGQoVk0qLCBjb25zdCBjaGFyKik7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFJl
ZjxTdHJpbmdJbXBsPiBhZGQoRXhlY1N0YXRlKiwgY29uc3QgY2hhciopOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIGlubGluZSBzdGF0aWMgUmVmPFN0cmluZ0ltcGw+IGFkZChWTSosIGNvbnN0IGNo
YXIqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBpbmxpbmUgc3RhdGljIFJlZjxTdHJpbmdJbXBs
PiBhZGQoRXhlY1N0YXRlKiwgY29uc3QgY2hhciopOwogCiAgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CiAKQEAgLTE3MCw4ICsxNzAsOCBAQCBwcml2YXRlOgogCiAgICAgSWRlbnRp
ZmllcihWTSogdm0sIGNvbnN0IExDaGFyKiBzLCBpbnQgbGVuZ3RoKSA6IG1fc3RyaW5nKGFkZCh2
bSwgcywgbGVuZ3RoKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0b21pYygpKTsgfQog
ICAgIElkZW50aWZpZXIoVk0qIHZtLCBjb25zdCBVQ2hhciogcywgaW50IGxlbmd0aCkgOiBtX3N0
cmluZyhhZGQodm0sIHMsIGxlbmd0aCkpIHsgQVNTRVJUKG1fc3RyaW5nLmltcGwoKS0+aXNBdG9t
aWMoKSk7IH0KLSAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSosIEF0b21pY1N0cmluZ0ltcGwqKTsK
LSAgICBJZGVudGlmaWVyKEV4ZWNTdGF0ZSosIGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIGlu
bGluZSBJZGVudGlmaWVyKEV4ZWNTdGF0ZSosIEF0b21pY1N0cmluZ0ltcGwqKTsKKyAgICBpbmxp
bmUgSWRlbnRpZmllcihFeGVjU3RhdGUqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICBJZGVu
dGlmaWVyKFZNKiB2bSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpIDogbV9zdHJpbmcoYWRkKHZtLCBz
dHJpbmcuaW1wbCgpKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1wbCgpLT5pc0F0b21pYygpKTsgfQog
ICAgIElkZW50aWZpZXIoVk0qIHZtLCBTdHJpbmdJbXBsKiByZXApIDogbV9zdHJpbmcoYWRkKHZt
LCByZXApKSB7IEFTU0VSVChtX3N0cmluZy5pbXBsKCktPmlzQXRvbWljKCkpOyB9CiAKQEAgLTI4
MiwxMCArMjgyLDEwIEBAIEFMV0FZU19JTkxJTkUgT3B0aW9uYWw8dWludDMyX3Q+IHBhcnNlSW5k
ZXgoY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKICAgICByZXR1cm4gcGFyc2VJbmRleCgq
dWlkKTsKIH0KIAotSlNWYWx1ZSBpZGVudGlmaWVyVG9KU1ZhbHVlKFZNJiwgY29uc3QgSWRlbnRp
ZmllciYpOworaW5saW5lIEpTVmFsdWUgaWRlbnRpZmllclRvSlNWYWx1ZShWTSYsIGNvbnN0IElk
ZW50aWZpZXImKTsKIC8vIFRoaXMgd2lsbCBzdHJpbmdpZnkgcHJpdmF0ZSBzeW1ib2xzLiBXaGVu
IGxlYWtpbmcgSlNWYWx1ZXMgdG8KIC8vIG5vbi1pbnRlcm5hbCBjb2RlLCBtYWtlIHN1cmUgdG8g
dXNlIHRoaXMgZnVuY3Rpb24gYW5kIG5vdCB0aGUgYWJvdmUgb25lLgotSlNWYWx1ZSBpZGVudGlm
aWVyVG9TYWZlUHVibGljSlNWYWx1ZShWTSYsIGNvbnN0IElkZW50aWZpZXImKTsKK2lubGluZSBK
U1ZhbHVlIGlkZW50aWZpZXJUb1NhZmVQdWJsaWNKU1ZhbHVlKFZNJiwgY29uc3QgSWRlbnRpZmll
ciYpOwogCiAvLyBGSVhNRTogSXQgbWF5IGJlIGJldHRlciBmb3IgdGhpcyB0byBqdXN0IGJlIGEg
dHlwZWRlZiBmb3IgUHRySGFzaCwgc2luY2UgUHRySGFzaCBtYXkgYmUgY2hlYXBlciB0bwogLy8g
Y29tcHV0ZSB0aGFuIGxvYWRpbmcgdGhlIFN0cmluZ0ltcGwncyBoYXNoIGZyb20gbWVtb3J5LiBU
aGF0IGNoYW5nZSB3b3VsZCBhbHNvIHJlZHVjZSB0aGUgbGlrZWxpaG9vZCBvZgpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5kZXhpbmdIZWFkZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZGV4aW5nSGVhZGVyLmgKaW5kZXggNWQ3ZTZkZTFh
YzEuLjg5MDBhYTdlOTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmRleGluZ0hlYWRlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
ZGV4aW5nSGVhZGVyLmgKQEAgLTExNCw4ICsxMTQsOCBAQCBwdWJsaWM6CiAgICAgCiAgICAgLy8g
VGhlc2UgbWV0aG9kcyBhcmUgbm90IHN0YW5kYWxvbmUgaW4gdGhlIHNlbnNlIHRoYXQgdGhleSBj
YW5ub3QgYmUKICAgICAvLyB1c2VkIG9uIGEgY29weSBvZiB0aGUgSW5kZXhpbmdIZWFkZXIuCi0g
ICAgc2l6ZV90IHByZUNhcGFjaXR5KFN0cnVjdHVyZSopOwotICAgIHNpemVfdCBpbmRleGluZ1Bh
eWxvYWRTaXplSW5CeXRlcyhTdHJ1Y3R1cmUqKTsKKyAgICBpbmxpbmUgc2l6ZV90IHByZUNhcGFj
aXR5KFN0cnVjdHVyZSopOworICAgIGlubGluZSBzaXplX3QgaW5kZXhpbmdQYXlsb2FkU2l6ZUlu
Qnl0ZXMoU3RydWN0dXJlKik7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9JbmZlcnJlZFR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVy
cmVkVHlwZS5oCmluZGV4IDliODZmNGM3ZDAyLi5jNjgwNDg3NmJkOSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRUeXBlLmgKQEAgLTIzNCw3ICsyMzQsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICAKLSAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KFZNJik7CisgICAgaW5saW5lIHZvaWQgZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkoVk0mKTsKIAogcHJpdmF0ZToKICAgICBJbmZlcnJlZFR5cGUoVk0m
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXkuaAppbmRleCA0ODc3ZWI4NmFh
MS4uMGI3NDA1YjI2NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5LmgK
QEAgLTk0LDE2ICs5NCwxNiBAQCBwdWJsaWM6CiAgICAgLy8gT0sgdG8gdXNlIG9uIG5ldyBhcnJh
eXMsIGJ1dCBub3QgaWYgaXQgbWlnaHQgYmUgYSBSZWdFeHBNYXRjaEFycmF5IG9yIFJ1bnRpbWVB
cnJheS4KICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHNldExlbmd0aChFeGVjU3RhdGUqLCB1
bnNpZ25lZCwgYm9vbCB0aHJvd0V4Y2VwdGlvbiA9IGZhbHNlKTsKIAotICAgIHZvaWQgcHVzaElu
bGluZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgcHVzaElu
bGluZShFeGVjU3RhdGUqLCBKU1ZhbHVlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIHB1
c2goRXhlY1N0YXRlKiwgSlNWYWx1ZSk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgSlNWYWx1ZSBw
b3AoRXhlY1N0YXRlKik7CiAKICAgICBKU0FycmF5KiBmYXN0U2xpY2UoRXhlY1N0YXRlJiwgdW5z
aWduZWQgc3RhcnRJbmRleCwgdW5zaWduZWQgY291bnQpOwogCi0gICAgYm9vbCBjYW5GYXN0Q29w
eShWTSYsIEpTQXJyYXkqIG90aGVyQXJyYXkpOwotICAgIGJvb2wgY2FuRG9GYXN0SW5kZXhlZEFj
Y2VzcyhWTSYpOworICAgIGlubGluZSBib29sIGNhbkZhc3RDb3B5KFZNJiwgSlNBcnJheSogb3Ro
ZXJBcnJheSk7CisgICAgaW5saW5lIGJvb2wgY2FuRG9GYXN0SW5kZXhlZEFjY2VzcyhWTSYpOwog
ICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBOb25BcnJheSBpZiB0aGUgaW5kZXhpbmcgdHlw
ZXMgYXJlIG5vdCBjb21wYXRhYmxlIGZvciBjb3B5aW5nLgotICAgIEluZGV4aW5nVHlwZSBtZXJn
ZUluZGV4aW5nVHlwZUZvckNvcHlpbmcoSW5kZXhpbmdUeXBlIG90aGVyKTsKKyAgICBpbmxpbmUg
SW5kZXhpbmdUeXBlIG1lcmdlSW5kZXhpbmdUeXBlRm9yQ29weWluZyhJbmRleGluZ1R5cGUgb3Ro
ZXIpOwogICAgIGJvb2wgYXBwZW5kTWVtY3B5KEV4ZWNTdGF0ZSosIFZNJiwgdW5zaWduZWQgc3Rh
cnRJbmRleCwgSlNBcnJheSogb3RoZXJBcnJheSk7CiAKICAgICBlbnVtIFNoaWZ0Q291bnRNb2Rl
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlCdWZm
ZXJWaWV3LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmll
dy5oCmluZGV4IGVmN2ViZTFhZDJhLi5hMTRlY2ZmNGYyNiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUJ1ZmZlclZpZXcuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5QnVmZmVyVmlldy5oCkBAIC0xNTcsMTkgKzE1Nywx
OSBAQCBwdWJsaWM6CiAgICAgVHlwZWRBcnJheU1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZTsgfQogICAgIGJvb2wgaGFzQXJyYXlCdWZmZXIoKSBjb25zdCB7IHJldHVybiBKU0M6Omhh
c0FycmF5QnVmZmVyKG1vZGUoKSk7IH0KICAgICAKLSAgICBib29sIGlzU2hhcmVkKCk7CisgICAg
aW5saW5lIGJvb2wgaXNTaGFyZWQoKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBBcnJheUJ1ZmZl
ciogdW5zaGFyZWRCdWZmZXIoKTsKLSAgICBBcnJheUJ1ZmZlciogcG9zc2libHlTaGFyZWRCdWZm
ZXIoKTsKKyAgICBpbmxpbmUgQXJyYXlCdWZmZXIqIHBvc3NpYmx5U2hhcmVkQnVmZmVyKCk7CiAg
ICAgSlNBcnJheUJ1ZmZlciogdW5zaGFyZWRKU0J1ZmZlcihFeGVjU3RhdGUqIGV4ZWMpOwogICAg
IEpTQXJyYXlCdWZmZXIqIHBvc3NpYmx5U2hhcmVkSlNCdWZmZXIoRXhlY1N0YXRlKiBleGVjKTsK
LSAgICBSZWZQdHI8QXJyYXlCdWZmZXJWaWV3PiB1bnNoYXJlZEltcGwoKTsKKyAgICBpbmxpbmUg
UmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdW5zaGFyZWRJbXBsKCk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gcG9zc2libHlTaGFyZWRJbXBsKCk7CiAgICAg
Ym9vbCBpc05ldXRlcmVkKCkgeyByZXR1cm4gaGFzQXJyYXlCdWZmZXIoKSAmJiAhdmVjdG9yKCk7
IH0KICAgICB2b2lkIG5ldXRlcigpOwogICAgIAogICAgIHZvaWQqIHZlY3RvcigpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yLmdldE1heUJlTnVsbCgpOyB9CiAgICAgCi0gICAgdW5zaWduZWQgYnl0
ZU9mZnNldCgpOworICAgIGlubGluZSB1bnNpZ25lZCBieXRlT2Zmc2V0KCk7CiAgICAgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KIAogICAgIERFQ0xBUkVfRVhQ
T1JUX0lORk87CkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBwdHJkaWZm
X3Qgb2Zmc2V0T2ZMZW5ndGgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUJ1ZmZl
clZpZXcsIG1fbGVuZ3RoKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZNb2RlKCkg
eyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlCdWZmZXJWaWV3LCBtX21vZGUpOyB9CiAg
ICAgCi0gICAgc3RhdGljIFJlZlB0cjxBcnJheUJ1ZmZlclZpZXc+IHRvV3JhcHBlZChWTSYsIEpT
VmFsdWUpOworICAgIGlubGluZSBzdGF0aWMgUmVmUHRyPEFycmF5QnVmZmVyVmlldz4gdG9XcmFw
cGVkKFZNJiwgSlNWYWx1ZSk7CiAKIHByaXZhdGU6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQXJy
YXlCdWZmZXIqIHNsb3dEb3duQW5kV2FzdGVNZW1vcnkoKTsKQEAgLTE4Nyw3ICsxODcsNyBAQCBw
cml2YXRlOgogcHJvdGVjdGVkOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0
b3I7CiAKLSAgICBBcnJheUJ1ZmZlciogZXhpc3RpbmdCdWZmZXJJbkJ1dHRlcmZseSgpOworICAg
IGlubGluZSBBcnJheUJ1ZmZlciogZXhpc3RpbmdCdWZmZXJJbkJ1dHRlcmZseSgpOwogCiAgICAg
c3RhdGljIFN0cmluZyB0b1N0cmluZ05hbWUoY29uc3QgSlNPYmplY3QqLCBFeGVjU3RhdGUqKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCmluZGV4IDE5NTc1
MjhmMjYwLi4xMGNjNWY4YjE3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNDSlNWYWx1ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWUuaApAQCAtMTIyLDggKzEyMiw4IEBAIGVudW0gV2hpY2hWYWx1ZVdvcmQgewogICAg
IFBheWxvYWRXb3JkCiB9OwogCi1pbnQ2NF90IHRyeUNvbnZlcnRUb0ludDUyKGRvdWJsZSk7Ci1i
b29sIGlzSW50NTIoZG91YmxlKTsKK2lubGluZSBpbnQ2NF90IHRyeUNvbnZlcnRUb0ludDUyKGRv
dWJsZSk7CitpbmxpbmUgYm9vbCBpc0ludDUyKGRvdWJsZSk7CiAKIGVudW0gY2xhc3MgU291cmNl
Q29kZVJlcHJlc2VudGF0aW9uIDogdWludDhfdCB7CiAgICAgT3RoZXIsCkBAIC0xNjUsOCArMTY1
LDggQEAgcHVibGljOgogCiAjZW5kaWYKIAotICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGUoSlNWYWx1ZSk7Ci0gICAgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEVuY29kZWRKU1ZhbHVlKTsK
KyAgICBpbmxpbmUgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGVuY29kZShKU1ZhbHVlKTsKKyAgICBp
bmxpbmUgc3RhdGljIEpTVmFsdWUgZGVjb2RlKEVuY29kZWRKU1ZhbHVlKTsKIAogICAgIGVudW0g
SlNOdWxsVGFnIHsgSlNOdWxsIH07CiAgICAgZW51bSBKU1VuZGVmaW5lZFRhZyB7IEpTVW5kZWZp
bmVkIH07CkBAIC0xNzUsMTA4ICsxNzUsMTA4IEBAIHB1YmxpYzoKICAgICBlbnVtIEpTQ2VsbFRh
ZyB7IEpTQ2VsbFR5cGUgfTsKICAgICBlbnVtIEVuY29kZUFzRG91YmxlVGFnIHsgRW5jb2RlQXNE
b3VibGUgfTsKIAotICAgIEpTVmFsdWUoKTsKLSAgICBKU1ZhbHVlKEpTTnVsbFRhZyk7Ci0gICAg
SlNWYWx1ZShKU1VuZGVmaW5lZFRhZyk7Ci0gICAgSlNWYWx1ZShKU1RydWVUYWcpOwotICAgIEpT
VmFsdWUoSlNGYWxzZVRhZyk7Ci0gICAgSlNWYWx1ZShKU0NlbGwqIHB0cik7Ci0gICAgSlNWYWx1
ZShjb25zdCBKU0NlbGwqIHB0cik7CisgICAgaW5saW5lIEpTVmFsdWUoKTsKKyAgICBpbmxpbmUg
SlNWYWx1ZShKU051bGxUYWcpOworICAgIGlubGluZSBKU1ZhbHVlKEpTVW5kZWZpbmVkVGFnKTsK
KyAgICBpbmxpbmUgSlNWYWx1ZShKU1RydWVUYWcpOworICAgIGlubGluZSBKU1ZhbHVlKEpTRmFs
c2VUYWcpOworICAgIGlubGluZSBKU1ZhbHVlKEpTQ2VsbCogcHRyKTsKKyAgICBpbmxpbmUgSlNW
YWx1ZShjb25zdCBKU0NlbGwqIHB0cik7CiAKICAgICAvLyBOdW1iZXJzCi0gICAgSlNWYWx1ZShF
bmNvZGVBc0RvdWJsZVRhZywgZG91YmxlKTsKLSAgICBleHBsaWNpdCBKU1ZhbHVlKGRvdWJsZSk7
Ci0gICAgZXhwbGljaXQgSlNWYWx1ZShjaGFyKTsKLSAgICBleHBsaWNpdCBKU1ZhbHVlKHVuc2ln
bmVkIGNoYXIpOwotICAgIGV4cGxpY2l0IEpTVmFsdWUoc2hvcnQpOwotICAgIGV4cGxpY2l0IEpT
VmFsdWUodW5zaWduZWQgc2hvcnQpOwotICAgIGV4cGxpY2l0IEpTVmFsdWUoaW50KTsKLSAgICBl
eHBsaWNpdCBKU1ZhbHVlKHVuc2lnbmVkKTsKLSAgICBleHBsaWNpdCBKU1ZhbHVlKGxvbmcpOwot
ICAgIGV4cGxpY2l0IEpTVmFsdWUodW5zaWduZWQgbG9uZyk7Ci0gICAgZXhwbGljaXQgSlNWYWx1
ZShsb25nIGxvbmcpOwotICAgIGV4cGxpY2l0IEpTVmFsdWUodW5zaWduZWQgbG9uZyBsb25nKTsK
LQotICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgSlNWYWx1ZSYgb3RoZXIpIGNvbnN0OwotICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBKU1ZhbHVlJiBvdGhlcikgY29uc3Q7Ci0KLSAgICBib29sIGlzSW50MzIoKSBjb25zdDsKLSAg
ICBib29sIGlzVUludDMyKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0RvdWJsZSgpIGNvbnN0OwotICAg
IGJvb2wgaXNUcnVlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0ZhbHNlKCkgY29uc3Q7Ci0KLSAgICBp
bnQzMl90IGFzSW50MzIoKSBjb25zdDsKLSAgICB1aW50MzJfdCBhc1VJbnQzMigpIGNvbnN0Owot
ICAgIGludDY0X3QgYXNBbnlJbnQoKSBjb25zdDsKLSAgICBkb3VibGUgYXNEb3VibGUoKSBjb25z
dDsKLSAgICBib29sIGFzQm9vbGVhbigpIGNvbnN0OwotICAgIGRvdWJsZSBhc051bWJlcigpIGNv
bnN0OworICAgIEFMV0FZU19JTkxJTkUgSlNWYWx1ZShFbmNvZGVBc0RvdWJsZVRhZywgZG91Ymxl
KTsKKyAgICBpbmxpbmUgZXhwbGljaXQgSlNWYWx1ZShkb3VibGUpOworICAgIGlubGluZSBleHBs
aWNpdCBKU1ZhbHVlKGNoYXIpOworICAgIGlubGluZSBleHBsaWNpdCBKU1ZhbHVlKHVuc2lnbmVk
IGNoYXIpOworICAgIGlubGluZSBleHBsaWNpdCBKU1ZhbHVlKHNob3J0KTsKKyAgICBpbmxpbmUg
ZXhwbGljaXQgSlNWYWx1ZSh1bnNpZ25lZCBzaG9ydCk7CisgICAgaW5saW5lIGV4cGxpY2l0IEpT
VmFsdWUoaW50KTsKKyAgICBpbmxpbmUgZXhwbGljaXQgSlNWYWx1ZSh1bnNpZ25lZCk7CisgICAg
aW5saW5lIGV4cGxpY2l0IEpTVmFsdWUobG9uZyk7CisgICAgaW5saW5lIGV4cGxpY2l0IEpTVmFs
dWUodW5zaWduZWQgbG9uZyk7CisgICAgaW5saW5lIGV4cGxpY2l0IEpTVmFsdWUobG9uZyBsb25n
KTsKKyAgICBpbmxpbmUgZXhwbGljaXQgSlNWYWx1ZSh1bnNpZ25lZCBsb25nIGxvbmcpOworCisg
ICAgaW5saW5lIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdDsKKyAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdDsKKyAgICBpbmxpbmUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEpTVmFsdWUmIG90aGVyKSBjb25zdDsKKworICAgIGlubGluZSBi
b29sIGlzSW50MzIoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc1VJbnQzMigpIGNvbnN0Owor
ICAgIGlubGluZSBib29sIGlzRG91YmxlKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNUcnVl
KCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNGYWxzZSgpIGNvbnN0OworCisgICAgaW5saW5l
IGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIGlubGluZSB1aW50MzJfdCBhc1VJbnQzMigp
IGNvbnN0OworICAgIGlubGluZSBpbnQ2NF90IGFzQW55SW50KCkgY29uc3Q7CisgICAgaW5saW5l
IGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworICAgIGlubGluZSBib29sIGFzQm9vbGVhbigpIGNv
bnN0OworICAgIGlubGluZSBkb3VibGUgYXNOdW1iZXIoKSBjb25zdDsKICAgICAKLSAgICBpbnQz
Ml90IGFzSW50MzJGb3JBcml0aG1ldGljKCkgY29uc3Q7IC8vIEJvb2xlYW4gYmVjb21lcyBhbiBp
bnQsIGJ1dCBvdGhlcndpc2UgbGlrZSBhc0ludDMyKCkuCisgICAgaW5saW5lIGludDMyX3QgYXNJ
bnQzMkZvckFyaXRobWV0aWMoKSBjb25zdDsgLy8gQm9vbGVhbiBiZWNvbWVzIGFuIGludCwgYnV0
IG90aGVyd2lzZSBsaWtlIGFzSW50MzIoKS4KIAogICAgIC8vIFF1ZXJ5aW5nIHRoZSB0eXBlLgot
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0OwotICAgIGJvb2wgaXNGdW5jdGlvbihWTSYpIGNvbnN0
OwotICAgIGJvb2wgaXNDYWxsYWJsZShWTSYsIENhbGxUeXBlJiwgQ2FsbERhdGEmKSBjb25zdDsK
LSAgICBib29sIGlzQ29uc3RydWN0b3IoVk0mKSBjb25zdDsKLSAgICBib29sIGlzQ29uc3RydWN0
b3IoVk0mLCBDb25zdHJ1Y3RUeXBlJiwgQ29uc3RydWN0RGF0YSYpIGNvbnN0OwotICAgIGJvb2wg
aXNVbmRlZmluZWQoKSBjb25zdDsKLSAgICBib29sIGlzTnVsbCgpIGNvbnN0OwotICAgIGJvb2wg
aXNVbmRlZmluZWRPck51bGwoKSBjb25zdDsKLSAgICBib29sIGlzQm9vbGVhbigpIGNvbnN0Owot
ICAgIGJvb2wgaXNBbnlJbnQoKSBjb25zdDsKLSAgICBib29sIGlzTnVtYmVyKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc1N0cmluZygpIGNvbnN0OwotICAgIGJvb2wgaXNCaWdJbnQoKSBjb25zdDsKLSAg
ICBib29sIGlzU3ltYm9sKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1ByaW1pdGl2ZSgpIGNvbnN0Owot
ICAgIGJvb2wgaXNHZXR0ZXJTZXR0ZXIoKSBjb25zdDsKLSAgICBib29sIGlzQ3VzdG9tR2V0dGVy
U2V0dGVyKCkgY29uc3Q7Ci0gICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OwotICAgIGJvb2wgaW5o
ZXJpdHMoVk0mLCBjb25zdCBDbGFzc0luZm8qKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc0Vt
cHR5KCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNGdW5jdGlvbihWTSYpIGNvbnN0OworICAg
IGlubGluZSBib29sIGlzQ2FsbGFibGUoVk0mLCBDYWxsVHlwZSYsIENhbGxEYXRhJikgY29uc3Q7
CisgICAgaW5saW5lIGJvb2wgaXNDb25zdHJ1Y3RvcihWTSYpIGNvbnN0OworICAgIGlubGluZSBi
b29sIGlzQ29uc3RydWN0b3IoVk0mLCBDb25zdHJ1Y3RUeXBlJiwgQ29uc3RydWN0RGF0YSYpIGNv
bnN0OworICAgIGlubGluZSBib29sIGlzVW5kZWZpbmVkKCkgY29uc3Q7CisgICAgaW5saW5lIGJv
b2wgaXNOdWxsKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBj
b25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc0Jvb2xlYW4oKSBjb25zdDsKKyAgICBpbmxpbmUgYm9v
bCBpc0FueUludCgpIGNvbnN0OworICAgIGlubGluZSBib29sIGlzTnVtYmVyKCkgY29uc3Q7Cisg
ICAgaW5saW5lIGJvb2wgaXNTdHJpbmcoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc0JpZ0lu
dCgpIGNvbnN0OworICAgIGlubGluZSBib29sIGlzU3ltYm9sKCkgY29uc3Q7CisgICAgaW5saW5l
IGJvb2wgaXNQcmltaXRpdmUoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc0dldHRlclNldHRl
cigpIGNvbnN0OworICAgIGlubGluZSBib29sIGlzQ3VzdG9tR2V0dGVyU2V0dGVyKCkgY29uc3Q7
CisgICAgaW5saW5lIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpbmhl
cml0cyhWTSYsIGNvbnN0IENsYXNzSW5mbyopIGNvbnN0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFRhcmdldD4gYm9vbCBpbmhlcml0cyhWTSYpIGNvbnN0OwogICAgIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvT3JOdWxsKFZNJikgY29uc3Q7CiAgICAgICAgIAogICAgIC8vIEV4dHJhY3Rpbmcg
dGhlIHZhbHVlLgogICAgIGJvb2wgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSosIFdURjo6U3RyaW5nJikg
Y29uc3Q7CiAgICAgV1RGOjpTdHJpbmcgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OyAvLyBu
dWxsIHN0cmluZyBpZiBub3QgYSBzdHJpbmcKLSAgICBKU09iamVjdCogZ2V0T2JqZWN0KCkgY29u
c3Q7IC8vIDAgaWYgbm90IGFuIG9iamVjdAorICAgIGlubGluZSBKU09iamVjdCogZ2V0T2JqZWN0
KCkgY29uc3Q7IC8vIDAgaWYgbm90IGFuIG9iamVjdAogCiAgICAgLy8gRXh0cmFjdGluZyBpbnRl
Z2VyIHZhbHVlcy4KLSAgICBib29sIGdldFVJbnQzMih1aW50MzJfdCYpIGNvbnN0OworICAgIEFM
V0FZU19JTkxJTkUgYm9vbCBnZXRVSW50MzIodWludDMyX3QmKSBjb25zdDsKICAgICAgICAgCiAg
ICAgLy8gQmFzaWMgY29udmVyc2lvbnMuCi0gICAgSlNWYWx1ZSB0b1ByaW1pdGl2ZShFeGVjU3Rh
dGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKLSAgICBi
b29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1
ZSYpOworICAgIGlubGluZSBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUgPSBOb1ByZWZlcmVuY2UpIGNvbnN0OworICAgIGlubGluZSBib29sIGdl
dFByaW1pdGl2ZU51bWJlcihFeGVjU3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSYpOwog
CiAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgVHJpU3RhdGUgcHVy
ZVRvQm9vbGVhbigpIGNvbnN0OworICAgIGlubGluZSBUcmlTdGF0ZSBwdXJlVG9Cb29sZWFuKCkg
Y29uc3Q7CiAKICAgICAvLyB0b051bWJlciBjb252ZXJzaW9uIGlzIGV4cGVjdGVkIHRvIGJlIHNp
ZGUgZWZmZWN0IGZyZWUgaWYgYW4gZXhjZXB0aW9uIGhhcwogICAgIC8vIGJlZW4gc2V0IGluIHRo
ZSBFeGVjU3RhdGUgYWxyZWFkeS4KLSAgICBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29u
c3Q7CisgICAgQUxXQVlTX0lOTElORSBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3Q7
CiAgICAgCi0gICAgVmFyaWFudDxKU0JpZ0ludCosIGRvdWJsZT4gdG9OdW1lcmljKEV4ZWNTdGF0
ZSopIGNvbnN0OwotICAgIFZhcmlhbnQ8SlNCaWdJbnQqLCBpbnQzMl90PiB0b0JpZ0ludE9ySW50
MzIoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSBWYXJpYW50PEpTQmlnSW50
KiwgZG91YmxlPiB0b051bWVyaWMoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgQUxXQVlTX0lOTElO
RSBWYXJpYW50PEpTQmlnSW50KiwgaW50MzJfdD4gdG9CaWdJbnRPckludDMyKEV4ZWNTdGF0ZSop
IGNvbnN0OwogCiAgICAgLy8gdG9OdW1iZXIgY29udmVyc2lvbiBpZiBpdCBjYW4gYmUgZG9uZSB3
aXRob3V0IHNpZGUgZWZmZWN0cy4KICAgICBPcHRpb25hbDxkb3VibGU+IHRvTnVtYmVyRnJvbVBy
aW1pdGl2ZSgpIGNvbnN0OwogCiAgICAgSlNTdHJpbmcqIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNv
bnN0OyAvLyBPbiBleGNlcHRpb24sIHRoaXMgcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLgogICAg
IEpTU3RyaW5nKiB0b1N0cmluZ09yTnVsbChFeGVjU3RhdGUqKSBjb25zdDsgLy8gT24gZXhjZXB0
aW9uLCB0aGlzIHJldHVybnMgbnVsbCwgdG8gbWFrZSBleGNlcHRpb24gY2hlY2tzIGZhc3Rlci4K
LSAgICBJZGVudGlmaWVyIHRvUHJvcGVydHlLZXkoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgQUxX
QVlTX0lOTElORSBJZGVudGlmaWVyIHRvUHJvcGVydHlLZXkoRXhlY1N0YXRlKikgY29uc3Q7CiAg
ICAgV1RGOjpTdHJpbmcgdG9XVEZTdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgSlNPYmpl
Y3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwotICAgIEpTT2JqZWN0KiB0b09iamVjdChF
eGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OworICAgIGlubGluZSBKU09iamVjdCog
dG9PYmplY3QoRXhlY1N0YXRlKikgY29uc3Q7CisgICAgaW5saW5lIEpTT2JqZWN0KiB0b09iamVj
dChFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCopIGNvbnN0OwogCiAgICAgLy8gSW50ZWdlciBj
b252ZXJzaW9ucy4KICAgICBKU19FWFBPUlRfUFJJVkFURSBkb3VibGUgdG9JbnRlZ2VyKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGRvdWJsZSB0b0ludGVnZXJQcmVz
ZXJ2ZU5hTihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBpbnQzMl90IHRvSW50MzIoRXhlY1N0YXRl
KikgY29uc3Q7Ci0gICAgdWludDMyX3QgdG9VSW50MzIoRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAg
dWludDMyX3QgdG9JbmRleChFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBlcnJvck5hbWUpIGNvbnN0
OworICAgIEFMV0FZU19JTkxJTkUgaW50MzJfdCB0b0ludDMyKEV4ZWNTdGF0ZSopIGNvbnN0Owor
ICAgIGlubGluZSB1aW50MzJfdCB0b1VJbnQzMihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBpbmxp
bmUgdWludDMyX3QgdG9JbmRleChFeGVjU3RhdGUqLCBjb25zdCBjaGFyKiBlcnJvck5hbWUpIGNv
bnN0OwogICAgIGRvdWJsZSB0b0xlbmd0aChFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgIC8vIEZs
b2F0aW5nIHBvaW50IGNvbnZlcnNpb25zICh0aGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24g
Zm9yIFdlYkNvcmU7CkBAIC0yODQsNDAgKzI4NCw0MCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgdG9G
bG9hdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0Pih0
b051bWJlcihleGVjKSk7IH0KIAogICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0
b09iamVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCi0gICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwg
UHJvcGVydHlOYW1lKSBjb25zdDsKLSAgICBKU1ZhbHVlIGdldChFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIFByb3BlcnR5U2xvdCYpIGNvbnN0OwotICAgIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSos
IHVuc2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7Ci0gICAgSlNWYWx1ZSBnZXQoRXhlY1N0YXRl
KiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKLSAgICBKU1Zh
bHVlIGdldChFeGVjU3RhdGUqLCB1aW50NjRfdCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIEFM
V0FZU19JTkxJTkUgSlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25zdDsK
KyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JikgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGdldChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpIGNvbnN0OworICAgIEFMV0FZU19JTkxJTkUg
SlNWYWx1ZSBnZXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNs
b3QmKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUgZ2V0KEV4ZWNTdGF0ZSosIHVp
bnQ2NF90IHByb3BlcnR5TmFtZSkgY29uc3Q7CiAKLSAgICBib29sIGdldFByb3BlcnR5U2xvdChF
eGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpIGNvbnN0OworICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCBnZXRQcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5O
b0V4Y2VwdGlvbj4gdHlwZW5hbWUgc3RkOjpyZXN1bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRp
b24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBlIGdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUq
LCBQcm9wZXJ0eU5hbWUsIENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25zdDsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDYWxsYmFja1doZW5Ob0V4Y2VwdGlvbj4gdHlwZW5hbWUgc3RkOjpyZXN1
bHRfb2Y8Q2FsbGJhY2tXaGVuTm9FeGNlcHRpb24oYm9vbCwgUHJvcGVydHlTbG90Jik+Ojp0eXBl
IGdldFByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYs
IENhbGxiYWNrV2hlbk5vRXhjZXB0aW9uKSBjb25zdDsKIAogICAgIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90JikgY29uc3Q7CiAK
LSAgICBib29sIHB1dChFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3Bl
cnR5U2xvdCYpOwotICAgIGJvb2wgcHV0SW5saW5lKEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwg
SlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgaW5saW5lIGJvb2wgcHV0KEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CisgICAgQUxXQVlT
X0lOTElORSBib29sIHB1dElubGluZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUs
IFB1dFByb3BlcnR5U2xvdCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgcHV0VG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNsb3Qm
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIHB1dFRvUHJpbWl0aXZlQnlJbmRleChFeGVj
U3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cp
OwotICAgIGJvb2wgcHV0QnlJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIGJvb2wgc2hvdWxkVGhyb3cpOworICAgIGlubGluZSBib29sIHB1dEJ5SW5kZXgo
RXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29sIHNob3VsZFRo
cm93KTsKIAotICAgIEpTVmFsdWUgdG9UaGlzKEV4ZWNTdGF0ZSosIEVDTUFNb2RlKSBjb25zdDsK
KyAgICBpbmxpbmUgSlNWYWx1ZSB0b1RoaXMoRXhlY1N0YXRlKiwgRUNNQU1vZGUpIGNvbnN0Owog
Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2
Mik7CisgICAgaW5saW5lIHN0YXRpYyBib29sIGVxdWFsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdjEs
IEpTVmFsdWUgdjIpOwogICAgIHN0YXRpYyBib29sIGVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiwg
SlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7Ci0gICAgc3RhdGljIGJvb2wgZXF1YWxTbG93Q2FzZUlu
bGluZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKLSAgICBzdGF0aWMgYm9v
bCBzdHJpY3RFcXVhbChFeGVjU3RhdGUqLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKKyAgICBB
TFdBWVNfSU5MSU5FIHN0YXRpYyBib29sIGVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiwg
SlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7CisgICAgaW5saW5lIHN0YXRpYyBib29sIHN0cmljdEVx
dWFsKEV4ZWNTdGF0ZSosIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOwogICAgIHN0YXRpYyBib29s
IHN0cmljdEVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7
Ci0gICAgc3RhdGljIGJvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqLCBK
U1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKLSAgICBzdGF0aWMgVHJpU3RhdGUgcHVyZVN0cmljdEVx
dWFsKEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOworICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIGJv
b2wgc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqLCBKU1ZhbHVlIHYxLCBKU1Zh
bHVlIHYyKTsKKyAgICBpbmxpbmUgc3RhdGljIFRyaVN0YXRlIHB1cmVTdHJpY3RFcXVhbChKU1Zh
bHVlIHYxLCBKU1ZhbHVlIHYyKTsKIAotICAgIGJvb2wgaXNDZWxsKCkgY29uc3Q7Ci0gICAgSlND
ZWxsKiBhc0NlbGwoKSBjb25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc0NlbGwoKSBjb25zdDsKKyAg
ICBBTFdBWVNfSU5MSU5FIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgYm9vbCBpc1ZhbGlkQ2FsbGVlKCk7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZU9y
TnVsbCgpIGNvbnN0OwotICAgIEpTVmFsdWUgc3RydWN0dXJlT3JVbmRlZmluZWQoKSBjb25zdDsK
KyAgICBpbmxpbmUgU3RydWN0dXJlKiBzdHJ1Y3R1cmVPck51bGwoKSBjb25zdDsKKyAgICBpbmxp
bmUgSlNWYWx1ZSBzdHJ1Y3R1cmVPclVuZGVmaW5lZCgpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAgICAgdm9pZCBkdW1wSW5D
b250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25zdDsKQEAgLTMyNSw3ICszMjUs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wRm9yQmFja3RyYWNlKFByaW50U3RyZWFtJikgY29u
c3Q7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU09iamVjdCogc3ludGhlc2l6ZVByb3RvdHlw
ZShFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBib29sIHJlcXVpcmVPYmplY3RDb2VyY2libGUoRXhl
Y1N0YXRlKikgY29uc3Q7CisgICAgQUxXQVlTX0lOTElORSBib29sIHJlcXVpcmVPYmplY3RDb2Vy
Y2libGUoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAvLyBDb25zdGFudHMgdXNlZCBmb3IgSW50
NTIuIEludDUyIGlzbid0IHBhcnQgb2YgSlNWYWx1ZSByaWdodCBub3csIGJ1dCBKU1ZhbHVlcyBt
YXkgYmUKICAgICAvLyBjb252ZXJ0ZWQgdG8gSW50NTJzIGFuZCBiYWNrIGFnYWluLgpAQCAtMzU1
LDEyICszNTUsMTIgQEAgcHVibGljOgogICAgICAqIGNlbGwsIGludGVnZXIgYW5kIGJvb2wgdmFs
dWVzIHRoZSBsb3dlciAzMiBiaXRzICh0aGUgJ3BheWxvYWQnKSBjb250YWluIHRoZSBwb2ludGVy
CiAgICAgICogaW50ZWdlciBvciBib29sZWFuIHZhbHVlOyBpbiB0aGUgY2FzZSBvZiBhbGwgb3Ro
ZXIgdGFncyB0aGUgcGF5bG9hZCBpcyAwLgogICAgICAqLwotICAgIHVpbnQzMl90IHRhZygpIGNv
bnN0OwotICAgIGludDMyX3QgcGF5bG9hZCgpIGNvbnN0OworICAgIGlubGluZSB1aW50MzJfdCB0
YWcoKSBjb25zdDsKKyAgICBpbmxpbmUgaW50MzJfdCBwYXlsb2FkKCkgY29uc3Q7CiAKICAgICAv
LyBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIExMSW50IEMgTG9vcCBpbnRlcnByZXRl
ciBhbmQgT1NSRXhpdCBjb2RlIHdobyBuZWVkcwogICAgIC8vIHN5bnRoZXNpemUgSlNWYWx1ZSBm
cm9tIGl0cyAicmVnaXN0ZXIicyBob2xkaW5nIHRhZyBhbmQgcGF5bG9hZCB2YWx1ZXMuCi0gICAg
ZXhwbGljaXQgSlNWYWx1ZShpbnQzMl90IHRhZywgaW50MzJfdCBwYXlsb2FkKTsKKyAgICBpbmxp
bmUgZXhwbGljaXQgSlNWYWx1ZShpbnQzMl90IHRhZywgaW50MzJfdCBwYXlsb2FkKTsKIAogI2Vs
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAvKgpAQCAtNjIzLDkgKzYyMyw5IEBAIGlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgSlNWYWx1ZSBhLCBjb25zdCBKU0NlbGwqIGIpIHsgcmV0dXJuIGEg
IT0gSlNWYWx1ZShiCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEpTQ2VsbCogYSwgY29u
c3QgSlNWYWx1ZSBiKSB7IHJldHVybiBKU1ZhbHVlKGEpICE9IGI7IH0KIAogCi1ib29sIGlzVGhp
c1ZhbHVlQWx0ZXJlZChjb25zdCBQdXRQcm9wZXJ0eVNsb3QmLCBKU09iamVjdCogYmFzZU9iamVj
dCk7CitBTFdBWVNfSU5MSU5FIGJvb2wgaXNUaGlzVmFsdWVBbHRlcmVkKGNvbnN0IFB1dFByb3Bl
cnR5U2xvdCYsIEpTT2JqZWN0KiBiYXNlT2JqZWN0KTsKIAogLy8gU2VlIHNlY3Rpb24gNy4yLjk6
IGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXNhbWV2YWx1ZQotYm9vbCBzYW1l
VmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBhLCBKU1ZhbHVlIGIpOworQUxXQVlTX0lOTElORSBi
b29sIHNhbWVWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGEsIEpTVmFsdWUgYik7CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAppbmRleCA5
ZThiYTYwZDlmNi4uMzA4YTMzYzIzZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ2VsbC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q2VsbC5oCkBAIC05NCwyOCArOTQsMjggQEAgcHVibGljOgogICAgIHN0YXRpYyBKU0NlbGwqIHNl
ZW5NdWx0aXBsZUNhbGxlZU9iamVjdHMoKSB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8SlNDZWxsKj4o
c3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KIAogICAgIGVudW0gQ3JlYXRpbmdFYXJseUNl
bGxUYWcgeyBDcmVhdGluZ0Vhcmx5Q2VsbCB9OwotICAgIEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2Vs
bFRhZyk7CisgICAgaW5saW5lIEpTQ2VsbChDcmVhdGluZ0Vhcmx5Q2VsbFRhZyk7CiAgICAgCiBw
cm90ZWN0ZWQ6Ci0gICAgSlNDZWxsKFZNJiwgU3RydWN0dXJlKik7CisgICAgaW5saW5lIEpTQ2Vs
bChWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CiAKIHB1YmxpYzoKICAgICAvLyBRdWVyeWluZyB0aGUgdHlwZS4KLSAg
ICBib29sIGlzU3RyaW5nKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0JpZ0ludCgpIGNvbnN0OwotICAg
IGJvb2wgaXNTeW1ib2woKSBjb25zdDsKLSAgICBib29sIGlzT2JqZWN0KCkgY29uc3Q7Ci0gICAg
Ym9vbCBpc0dldHRlclNldHRlcigpIGNvbnN0OwotICAgIGJvb2wgaXNDdXN0b21HZXR0ZXJTZXR0
ZXIoKSBjb25zdDsKLSAgICBib29sIGlzUHJveHkoKSBjb25zdDsKLSAgICBib29sIGlzRnVuY3Rp
b24oVk0mKTsKLSAgICBib29sIGlzQ2FsbGFibGUoVk0mLCBDYWxsVHlwZSYsIENhbGxEYXRhJik7
Ci0gICAgYm9vbCBpc0NvbnN0cnVjdG9yKFZNJik7Ci0gICAgYm9vbCBpc0NvbnN0cnVjdG9yKFZN
JiwgQ29uc3RydWN0VHlwZSYsIENvbnN0cnVjdERhdGEmKTsKLSAgICBib29sIGluaGVyaXRzKFZN
JiwgY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNTdHJpbmcoKSBj
b25zdDsKKyAgICBpbmxpbmUgYm9vbCBpc0JpZ0ludCgpIGNvbnN0OworICAgIGlubGluZSBib29s
IGlzU3ltYm9sKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKKyAg
ICBpbmxpbmUgYm9vbCBpc0dldHRlclNldHRlcigpIGNvbnN0OworICAgIGlubGluZSBib29sIGlz
Q3VzdG9tR2V0dGVyU2V0dGVyKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNQcm94eSgpIGNv
bnN0OworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Z1bmN0aW9uKFZNJik7CisgICAgaW5saW5l
IGJvb2wgaXNDYWxsYWJsZShWTSYsIENhbGxUeXBlJiwgQ2FsbERhdGEmKTsKKyAgICBpbmxpbmUg
Ym9vbCBpc0NvbnN0cnVjdG9yKFZNJik7CisgICAgaW5saW5lIGJvb2wgaXNDb25zdHJ1Y3RvcihW
TSYsIENvbnN0cnVjdFR5cGUmLCBDb25zdHJ1Y3REYXRhJik7CisgICAgaW5saW5lIGJvb2wgaW5o
ZXJpdHMoVk0mLCBjb25zdCBDbGFzc0luZm8qKSBjb25zdDsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUYXJnZXQ+IGJvb2wgaW5oZXJpdHMoVk0mKSBjb25zdDsKLSAgICBib29sIGlzQVBJVmFsdWVX
cmFwcGVyKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNBUElWYWx1ZVdyYXBwZXIoKSBjb25z
dDsKICAgICAKICAgICAvLyBFYWNoIGNlbGwgaGFzIGEgYnVpbHQtaW4gbG9jay4gQ3VycmVudGx5
IGl0J3Mgc2ltcGx5IGF2YWlsYWJsZSBmb3IgdXNlIGlmIHlvdSBuZWVkIGl0LiBJdCdzCiAgICAg
Ly8gYSBmdWxsLWJsb3duIFdURjo6TG9jay4gTm90ZSB0aGF0IHRoaXMgbG9jayBpcyBjdXJyZW50
bHkgdXNlZCBpbiBKU0FycmF5IGFuZCB0aGF0IGxvY2sncwpAQCAtMTI2LDIxICsxMjYsMjEgQEAg
cHVibGljOgogICAgIC8vIGF1dG8gbG9ja2VyID0gaG9sZExvY2soY2VsbC0+Y2VsbExvY2tlcigp
KTsKICAgICBKU0NlbGxMb2NrJiBjZWxsTG9jaygpIHsgcmV0dXJuICpyZWludGVycHJldF9jYXN0
PEpTQ2VsbExvY2sqPih0aGlzKTsgfQogICAgIAotICAgIEpTVHlwZSB0eXBlKCkgY29uc3Q7Ci0g
ICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlwZUFuZE1pc2MoKSBjb25zdDsKLSAgICBJbmRleGlu
Z1R5cGUgaW5kZXhpbmdNb2RlKCkgY29uc3Q7Ci0gICAgSW5kZXhpbmdUeXBlIGluZGV4aW5nVHlw
ZSgpIGNvbnN0OworICAgIGlubGluZSBKU1R5cGUgdHlwZSgpIGNvbnN0OworICAgIGlubGluZSBJ
bmRleGluZ1R5cGUgaW5kZXhpbmdUeXBlQW5kTWlzYygpIGNvbnN0OworICAgIGlubGluZSBJbmRl
eGluZ1R5cGUgaW5kZXhpbmdNb2RlKCkgY29uc3Q7CisgICAgaW5saW5lIEluZGV4aW5nVHlwZSBp
bmRleGluZ1R5cGUoKSBjb25zdDsKICAgICBTdHJ1Y3R1cmVJRCBzdHJ1Y3R1cmVJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RydWN0dXJlSUQ7IH0KLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNv
bnN0OwotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlKFZNJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRT
dHJ1Y3R1cmUoVk0mLCBTdHJ1Y3R1cmUqKTsKKyAgICBpbmxpbmUgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUoKSBjb25zdDsKKyAgICBpbmxpbmUgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoVk0mKSBjb25zdDsK
KyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKik7CiAg
ICAgdm9pZCBzZXRTdHJ1Y3R1cmVJRERpcmVjdGx5KFN0cnVjdHVyZUlEIGlkKSB7IG1fc3RydWN0
dXJlSUQgPSBpZDsgfQogICAgIHZvaWQgY2xlYXJTdHJ1Y3R1cmUoKSB7IG1fc3RydWN0dXJlSUQg
PSAwOyB9CiAKICAgICBUeXBlSW5mbzo6SW5saW5lVHlwZUZsYWdzIGlubGluZVR5cGVGbGFncygp
IGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3M7IH0KICAgICAKLSAgICBib29sIG1heUJlUHJvdG90eXBl
KCkgY29uc3Q7Ci0gICAgdm9pZCBkaWRCZWNvbWVQcm90b3R5cGUoKTsKKyAgICBpbmxpbmUgYm9v
bCBtYXlCZVByb3RvdHlwZSgpIGNvbnN0OworICAgIGlubGluZSB2b2lkIGRpZEJlY29tZVByb3Rv
dHlwZSgpOwogCiAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lKFZNJikgY29uc3Q7CiAKQEAgLTE2
MiwxMCArMTYyLDEwIEBAIHB1YmxpYzoKICAgICAvLyBCYXNpYyBjb252ZXJzaW9ucy4KICAgICBK
U19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJl
ZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogICAgIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNT
dGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJikgY29uc3Q7Ci0gICAgYm9vbCB0b0Jvb2xl
YW4oRXhlY1N0YXRlKikgY29uc3Q7Ci0gICAgVHJpU3RhdGUgcHVyZVRvQm9vbGVhbigpIGNvbnN0
OworICAgIGlubGluZSBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICBpbmxp
bmUgVHJpU3RhdGUgcHVyZVRvQm9vbGVhbigpIGNvbnN0OwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKLSAgICBKU09iamVjdCogdG9PYmpl
Y3QoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqKSBjb25zdDsKKyAgICBpbmxpbmUgSlNPYmpl
Y3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgdm9pZCBkdW1wVG9TdHJlYW0oY29uc3QgSlNDZWxsKiwgUHJpbnRTdHJlYW0mKTsKQEAgLTE3
MywyNSArMTczLDI1IEBAIHB1YmxpYzoKICAgICBzaXplX3QgZXN0aW1hdGVkU2l6ZUluQnl0ZXMo
Vk0mKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgc2l6ZV90IGVzdGltYXRl
ZFNpemUoSlNDZWxsKiwgVk0mKTsKIAotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdE91dHB1dENvbnN0cmFp
bnRzKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgaW5saW5lIHN0YXRpYyB2b2lkIHZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBpbmxpbmUgc3RhdGljIHZvaWQg
dmlzaXRPdXRwdXRDb25zdHJhaW50cyhKU0NlbGwqLCBTbG90VmlzaXRvciYpOwogCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCosIEhlYXBTbmFw
c2hvdEJ1aWxkZXImKTsKIAogICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09i
amVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCi0gICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
Vk0mKSBjb25zdDsKLSAgICBjb25zdCBNZXRob2RUYWJsZSogbWV0aG9kVGFibGUoVk0mKSBjb25z
dDsKKyAgICBBTFdBWVNfSU5MSU5FIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKFZNJikgY29u
c3Q7CisgICAgaW5saW5lIGNvbnN0IE1ldGhvZFRhYmxlKiBtZXRob2RUYWJsZShWTSYpIGNvbnN0
OwogICAgIHN0YXRpYyBib29sIHB1dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOwogICAgIHN0YXRpYyBib29sIHB1dEJ5SW5kZXgo
SlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBib29s
IHNob3VsZFRocm93KTsKLSAgICBib29sIHB1dElubGluZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5h
bWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBw
dXRJbmxpbmUoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCBQdXRQcm9wZXJ0eVNs
b3QmKTsKICAgICAgICAgCiAgICAgc3RhdGljIGJvb2wgZGVsZXRlUHJvcGVydHkoSlNDZWxsKiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0
eUJ5SW5kZXgoSlNDZWxsKiwgRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKIAog
ICAgIHN0YXRpYyBKU1ZhbHVlIHRvVGhpcyhKU0NlbGwqLCBFeGVjU3RhdGUqLCBFQ01BTW9kZSk7
CiAKLSAgICBzdGF0aWMgYm9vbCBjYW5Vc2VGYXN0R2V0T3duUHJvcGVydHkoY29uc3QgU3RydWN0
dXJlJik7Ci0gICAgSlNWYWx1ZSBmYXN0R2V0T3duUHJvcGVydHkoVk0mLCBTdHJ1Y3R1cmUmLCBQ
cm9wZXJ0eU5hbWUpOworICAgIGlubGluZSBzdGF0aWMgYm9vbCBjYW5Vc2VGYXN0R2V0T3duUHJv
cGVydHkoY29uc3QgU3RydWN0dXJlJik7CisgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGZhc3RH
ZXRPd25Qcm9wZXJ0eShWTSYsIFN0cnVjdHVyZSYsIFByb3BlcnR5TmFtZSk7CiAKICAgICAvLyBU
aGUgcmVjb21tZW5kZWQgaWRpb20gZm9yIHVzaW5nIGNlbGxTdGF0ZSgpIGlzIHRvIHN3aXRjaCBv
biBpdCBvciBwZXJmb3JtIGFuID09IGNvbXBhcmlzb24gb24gaXQKICAgICAvLyBkaXJlY3RseS4g
V2UgZGVsaWJlcmF0ZWx5IGF2b2lkIGhlbHBlcnMgZm9yIHRoaXMsIGJlY2F1c2Ugd2Ugd2FudCB0
cmFuc3BhcmVuY3kgYWJvdXQgaG93IHRoZSB2YXJpb3VzCkBAIC0yNDEsOCArMjQxLDggQEAgcHVi
bGljOgogICAgIHN0YXRpYyBjb25zdCBUeXBlZEFycmF5VHlwZSBUeXBlZEFycmF5U3RvcmFnZVR5
cGUgPSBOb3RUeXBlZEFycmF5OwogcHJvdGVjdGVkOgogCi0gICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYpOwotICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBDcmVhdGlu
Z0Vhcmx5Q2VsbFRhZyk7CisgICAgaW5saW5lIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKKyAg
ICBpbmxpbmUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIFN0cnVjdHVyZSosIENyZWF0aW5nRWFy
bHlDZWxsVGFnKTsKIAogICAgIC8vIER1bW15IGltcGxlbWVudGF0aW9ucyBvZiBvdmVycmlkZS1h
YmxlIHN0YXRpYyBmdW5jdGlvbnMgZm9yIGNsYXNzZXMgdG8gcHV0IGluIHRoZWlyIE1ldGhvZFRh
YmxlCiAgICAgc3RhdGljIEpTVmFsdWUgZGVmYXVsdFZhbHVlKGNvbnN0IEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSk7CkBAIC0yODAsMTAgKzI4MCwxMCBAQCBw
cml2YXRlOgogCiBjbGFzcyBKU0NlbGxMb2NrIDogcHVibGljIEpTQ2VsbCB7CiBwdWJsaWM6Ci0g
ICAgdm9pZCBsb2NrKCk7Ci0gICAgYm9vbCB0cnlMb2NrKCk7Ci0gICAgdm9pZCB1bmxvY2soKTsK
LSAgICBib29sIGlzTG9ja2VkKCkgY29uc3Q7CisgICAgaW5saW5lIHZvaWQgbG9jaygpOworICAg
IGlubGluZSBib29sIHRyeUxvY2soKTsKKyAgICBpbmxpbmUgdm9pZCB1bmxvY2soKTsKKyAgICBp
bmxpbmUgYm9vbCBpc0xvY2tlZCgpIGNvbnN0OwogcHJpdmF0ZToKICAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIGxvY2tTbG93KCk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tT
bG93KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKaW5kZXgg
MWU3NzYzMmI1MTEuLmRmYmM1MThiYmQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5oCkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNp
YyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yLCBjb25zdCBET01KSVQ6OlNpZ25hdHVyZSogPSBudWxs
cHRyKTsKICAgICAKLSAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlV2l0aEludmFsaWRhdGVk
UmVhbGxvY2F0aW9uV2F0Y2hwb2ludChWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUq
KTsKKyAgICBpbmxpbmUgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJl
YWxsb2NhdGlvbldhdGNocG9pbnQoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7
CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwg
RnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBj
cmVhdGUoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKiwgU3RydWN0dXJlKik7CkBA
IC05Myw5ICs5Myw5IEBAIHB1YmxpYzoKICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQogCiAgICAgLy8gVG8gY2FsbCBh
bnkgb2YgdGhlc2UgbWV0aG9kcyBpbmNsdWRlIEpTRnVuY3Rpb25JbmxpbmVzLmgKLSAgICBib29s
IGlzSG9zdEZ1bmN0aW9uKCkgY29uc3Q7Ci0gICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBqc0V4ZWN1
dGFibGUoKSBjb25zdDsKLSAgICBJbnRyaW5zaWMgaW50cmluc2ljKCkgY29uc3Q7CisgICAgaW5s
aW5lIGJvb2wgaXNIb3N0RnVuY3Rpb24oKSBjb25zdDsKKyAgICBpbmxpbmUgRnVuY3Rpb25FeGVj
dXRhYmxlKiBqc0V4ZWN1dGFibGUoKSBjb25zdDsKKyAgICBpbmxpbmUgSW50cmluc2ljIGludHJp
bnNpYygpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgY29uc3QgU291cmNlQ29kZSog
c291cmNlQ29kZSgpIGNvbnN0OwogCkBAIC0xMDcsOCArMTA3LDggQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBU
eXBlSW5mbyhKU0Z1bmN0aW9uVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOyAKICAgICB9
CiAKLSAgICBUYWdnZWROYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbigpOwotICAgIFRhZ2dl
ZE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yKCk7CisgICAgaW5saW5lIFRhZ2dlZE5h
dGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uKCk7CisgICAgaW5saW5lIFRhZ2dlZE5hdGl2ZUZ1
bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yKCk7CiAKICAgICBzdGF0aWMgQ29uc3RydWN0VHlwZSBn
ZXRDb25zdHJ1Y3REYXRhKEpTQ2VsbCosIENvbnN0cnVjdERhdGEmKTsKICAgICBzdGF0aWMgQ2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoSlNDZWxsKiwgQ2FsbERhdGEmKTsKQEAgLTEzMCw3ICsxMzAsNyBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3JhcmVEYXRhLmdldCgpOwogICAgIH0KIAotICAg
IEZ1bmN0aW9uUmFyZURhdGEqIGVuc3VyZVJhcmVEYXRhQW5kQWxsb2NhdGlvblByb2ZpbGUoRXhl
Y1N0YXRlKiwgdW5zaWduZWQgaW5saW5lQ2FwYWNpdHkpOworICAgIGlubGluZSBGdW5jdGlvblJh
cmVEYXRhKiBlbnN1cmVSYXJlRGF0YUFuZEFsbG9jYXRpb25Qcm9maWxlKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGlubGluZUNhcGFjaXR5KTsKIAogICAgIEZ1bmN0aW9uUmFyZURhdGEqIHJhcmVEYXRh
KCkKICAgICB7CkBAIC0xNDMsMTcgKzE0MywxNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBy
YXJlRGF0YTsKICAgICB9CiAKLSAgICBib29sIGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgY29u
c3Q7Ci0gICAgYm9vbCBpc0J1aWx0aW5GdW5jdGlvbigpIGNvbnN0OworICAgIGlubGluZSBib29s
IGlzSG9zdE9yQnVpbHRpbkZ1bmN0aW9uKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaXNCdWls
dGluRnVuY3Rpb24oKSBjb25zdDsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzSG9zdEZ1
bmN0aW9uTm9uSW5saW5lKCkgY29uc3Q7Ci0gICAgYm9vbCBpc0NsYXNzQ29uc3RydWN0b3JGdW5j
dGlvbigpIGNvbnN0OworICAgIGlubGluZSBib29sIGlzQ2xhc3NDb25zdHJ1Y3RvckZ1bmN0aW9u
KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEZ1bmN0aW9uTmFtZShFeGVjU3RhdGUqLCBKU1ZhbHVl
IG5hbWUpOwogCiAgICAgLy8gUmV0dXJucyB0aGUgX19wcm90b19fIGZvciB0aGUgfHRoaXN8IHZh
bHVlIGlmIHRoaXMgSlNGdW5jdGlvbiB3ZXJlIHRvIGJlIGNvbnN0cnVjdGVkLgogICAgIEpTT2Jq
ZWN0KiBwcm90b3R5cGVGb3JDb25zdHJ1Y3Rpb24oVk0mLCBFeGVjU3RhdGUqKTsKIAotICAgIGJv
b2wgY2FuVXNlQWxsb2NhdGlvblByb2ZpbGUoKTsKKyAgICBpbmxpbmUgYm9vbCBjYW5Vc2VBbGxv
Y2F0aW9uUHJvZmlsZSgpOwogICAgIGJvb2wgY2FuVXNlQWxsb2NhdGlvblByb2ZpbGVOb25Jbmxp
bmUoKTsKIAogICAgIGVudW0gY2xhc3MgUHJvcGVydHlTdGF0dXMgewpAQCAtMTY1LDcgKzE2NSw3
IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIEpTRnVuY3Rp
b24oVk0mLCBKU0dsb2JhbE9iamVjdCosIFN0cnVjdHVyZSopOwotICAgIEpTRnVuY3Rpb24oVk0m
LCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKiwgU3RydWN0dXJlKik7CisgICAgaW5saW5l
IEpTRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKiwgU3RydWN0dXJl
Kik7CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgTmF0aXZlRXhlY3V0YWJsZSosIGlu
dCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYpOwpAQCAtMTkzLDggKzE5Myw4IEBAIHByaXZhdGU6CiAgICAgRnVuY3Rpb25SYXJlRGF0YSog
YWxsb2NhdGVBbmRJbml0aWFsaXplUmFyZURhdGEoRXhlY1N0YXRlKiwgc2l6ZV90IGlubGluZUNh
cGFjaXR5KTsKICAgICBGdW5jdGlvblJhcmVEYXRhKiBpbml0aWFsaXplUmFyZURhdGEoRXhlY1N0
YXRlKiwgc2l6ZV90IGlubGluZUNhcGFjaXR5KTsKIAotICAgIGJvb2wgaGFzUmVpZmllZExlbmd0
aCgpIGNvbnN0OwotICAgIGJvb2wgaGFzUmVpZmllZE5hbWUoKSBjb25zdDsKKyAgICBpbmxpbmUg
Ym9vbCBoYXNSZWlmaWVkTGVuZ3RoKCkgY29uc3Q7CisgICAgaW5saW5lIGJvb2wgaGFzUmVpZmll
ZE5hbWUoKSBjb25zdDsKICAgICB2b2lkIHJlaWZ5TGVuZ3RoKFZNJik7CiAgICAgdm9pZCByZWlm
eU5hbWUoVk0mLCBFeGVjU3RhdGUqKTsKICAgICB2b2lkIHJlaWZ5TmFtZShWTSYsIEV4ZWNTdGF0
ZSosIFN0cmluZyBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbE9iamVjdC5oCmluZGV4IGVmNTk3ZmI3ODgzLi5iMDExZDM2ODgyZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCkBAIC00NzYsMTIgKzQ3
NiwxMiBAQCBwdWJsaWM6CiAgICAgUG9pc29uZWRVbmlxdWVQdHI8T2JqZWN0UHJvcGVydHlDaGFu
Z2VBZGFwdGl2ZVdhdGNocG9pbnQ8SW5saW5lV2F0Y2hwb2ludFNldD4+IG1fc2V0UHJvdG90eXBl
QWRkV2F0Y2hwb2ludDsKICAgICBQb2lzb25lZFVuaXF1ZVB0cjxPYmplY3RQcm9wZXJ0eUNoYW5n
ZUFkYXB0aXZlV2F0Y2hwb2ludDxJbmxpbmVXYXRjaHBvaW50U2V0Pj4gbV9udW1iZXJQcm90b3R5
cGVUb1N0cmluZ1dhdGNocG9pbnQ7CiAKLSAgICBib29sIGlzQXJyYXlQcm90b3R5cGVJdGVyYXRv
clByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKLSAgICBib29sIGlzTWFwUHJvdG90eXBl
SXRlcmF0b3JQcm90b2NvbEZhc3RBbmROb25PYnNlcnZhYmxlKCk7Ci0gICAgYm9vbCBpc1NldFBy
b3RvdHlwZUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOwotICAgIGJvb2wg
aXNTdHJpbmdQcm90b3R5cGVJdGVyYXRvclByb3RvY29sRmFzdEFuZE5vbk9ic2VydmFibGUoKTsK
LSAgICBib29sIGlzTWFwUHJvdG90eXBlU2V0RmFzdEFuZE5vbk9ic2VydmFibGUoKTsKLSAgICBi
b29sIGlzU2V0UHJvdG90eXBlQWRkRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKKyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaXNBcnJheVByb3RvdHlwZUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2Jz
ZXJ2YWJsZSgpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcFByb3RvdHlwZUl0ZXJhdG9y
UHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBp
c1NldFByb3RvdHlwZUl0ZXJhdG9yUHJvdG9jb2xGYXN0QW5kTm9uT2JzZXJ2YWJsZSgpOworICAg
IEFMV0FZU19JTkxJTkUgYm9vbCBpc1N0cmluZ1Byb3RvdHlwZUl0ZXJhdG9yUHJvdG9jb2xGYXN0
QW5kTm9uT2JzZXJ2YWJsZSgpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc01hcFByb3RvdHlw
ZVNldEZhc3RBbmROb25PYnNlcnZhYmxlKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIGlzU2V0
UHJvdG90eXBlQWRkRmFzdEFuZE5vbk9ic2VydmFibGUoKTsKIAogICAgIGJvb2wgbV9ldmFsRW5h
YmxlZCB7IHRydWUgfTsKICAgICBib29sIG1fd2ViQXNzZW1ibHlFbmFibGVkIHsgdHJ1ZSB9OwpA
QCAtODU3LDkgKzg1Nyw5IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdm9pZCBoYXZlQUJhZFRp
bWUoVk0mKTsKICAgICAgICAgCi0gICAgYm9vbCBvYmplY3RQcm90b3R5cGVJc1NhbmUoKTsKLSAg
ICBib29sIGFycmF5UHJvdG90eXBlQ2hhaW5Jc1NhbmUoKTsKLSAgICBib29sIHN0cmluZ1Byb3Rv
dHlwZUNoYWluSXNTYW5lKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIG9iamVjdFByb3RvdHlw
ZUlzU2FuZSgpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBhcnJheVByb3RvdHlwZUNoYWluSXNT
YW5lKCk7CisgICAgQUxXQVlTX0lOTElORSBib29sIHN0cmluZ1Byb3RvdHlwZUNoYWluSXNTYW5l
KCk7CiAKICAgICB2b2lkIHNldFByb2ZpbGVHcm91cCh1bnNpZ25lZCB2YWx1ZSkgeyBjcmVhdGVS
YXJlRGF0YUlmTmVlZGVkKCk7IG1fcmFyZURhdGEtPnByb2ZpbGVHcm91cCA9IHZhbHVlOyB9CiAg
ICAgdW5zaWduZWQgcHJvZmlsZUdyb3VwKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5oCmluZGV4IDE5MmRiNWVlZWE3Li4xZDVkOTdlMTkzYiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCkBAIC0xNzIsNyArMTcyLDcgQEAgcHVi
bGljOgogCiAgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KEpTT2JqZWN0KiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKLSAgICBib29s
IGdldE93blByb3BlcnR5U2xvdElubGluZShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpOworICAgIGlubGluZSBib29sIGdldE93blByb3BlcnR5U2xvdElubGluZShFeGVj
U3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogCiAgICAgLy8gVGhlIGtleSBk
aWZmZXJlbmNlIGJldHdlZW4gdGhpcyBhbmQgZ2V0T3duUHJvcGVydHlTbG90IGlzIHRoYXQgZ2V0
T3duUHJvcGVydHlTbG90CiAgICAgLy8gY3VycmVudGx5IHJldHVybnMgaW5jb3JyZWN0IHJlc3Vs
dHMgZm9yIHRoZSBET00gd2luZG93ICh3aXRoIG5vbi1vd24gcHJvcGVydGllcykKQEAgLTE5Myw3
ICsxOTMsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2J1dHRlcmZseS0+dmVjdG9yTGVu
Z3RoKCk7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBib29sIHB1dElubGluZUZvckpTT2JqZWN0
KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlT
bG90Jik7CisgICAgQUxXQVlTX0lOTElORSBzdGF0aWMgYm9vbCBwdXRJbmxpbmVGb3JKU09iamVj
dChKU0NlbGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5
U2xvdCYpOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHB1dChKU0Nl
bGwqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFByb3BlcnR5U2xvdCYp
OwogICAgIC8vIHB1dEJ5SW5kZXggYXNzdW1lcyB0aGF0IHRoZSByZWNlaXZlciBpcyB0aGlzIEpT
Q2VsbCBvYmplY3QuCkBAIC01ODYsNyArNTg2LDcgQEAgcHVibGljOgogICAgIC8vICAtIHRoZSBw
cm9wZXJ0eSBuYW1lIGlzIGFzc3VtZWQgdG8gbm90IGJlIGFuIGluZGV4LgogICAgIGJvb2wgcHV0
RGlyZWN0KFZNJiwgUHJvcGVydHlOYW1lLCBKU1ZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzID0g
MCk7CiAgICAgYm9vbCBwdXREaXJlY3QoVk0mLCBQcm9wZXJ0eU5hbWUsIEpTVmFsdWUsIFB1dFBy
b3BlcnR5U2xvdCYpOwotICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQ
cm9wZXJ0eU5hbWUsIEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMgPSAwKTsKKyAgICBpbmxp
bmUgdm9pZCBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyA9IDApOwogICAgIGJvb2wgcHV0RGlyZWN0Tm9uSW5k
ZXhBY2Nlc3NvcihWTSYsIFByb3BlcnR5TmFtZSwgR2V0dGVyU2V0dGVyKiwgdW5zaWduZWQgYXR0
cmlidXRlcyk7CiAgICAgYm9vbCBwdXREaXJlY3RBY2Nlc3NvcihFeGVjU3RhdGUqLCBQcm9wZXJ0
eU5hbWUsIEdldHRlclNldHRlciosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIGJvb2wgcHV0RGlyZWN0Q3VzdG9tQWNjZXNzb3IoVk0mLCBQcm9wZXJ0eU5hbWUs
IEpTVmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpAQCAtNTk4LDkgKzU5OCw5IEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGhhc1Byb3BlcnR5KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIHByb3BlcnR5TmFtZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVyaWMo
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlw
ZSkgY29uc3Q7CiAgICAgYm9vbCBoYXNQcm9wZXJ0eUdlbmVyaWMoRXhlY1N0YXRlKiwgdW5zaWdu
ZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZSkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNPd25Qcm9wZXJ0eShFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5U2xvdCYpIGNvbnN0OwotICAgIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJv
cGVydHlOYW1lKSBjb25zdDsKLSAgICBib29sIGhhc093blByb3BlcnR5KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKSBjb25zdDsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzT3duUHJvcGVydHkoRXhl
Y1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKSBjb25zdDsKKyAgICBBTFdBWVNf
SU5MSU5FIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKSBjb25z
dDsKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgaGFzT3duUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5z
aWduZWQpIGNvbnN0OwogCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVsZXRl
UHJvcGVydHkoSlNDZWxsKiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgYm9vbCBkZWxldGVQcm9wZXJ0eUJ5SW5kZXgoSlNDZWxsKiwgRXhl
Y1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1lKTsKQEAgLTg4Miw4ICs4ODIsOCBAQCBwdWJs
aWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUq
LCBDYWxsRGF0YSYsIENhbGxUeXBlJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFN0cmluZyYg
ZXJyb3JNZXNzYWdlKTsKIAotICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmUoVk0mLCBQ
cm9wZXJ0eU5hbWUpOwotICAgIGJvb2wgY2FuUGVyZm9ybUZhc3RQdXRJbmxpbmVFeGNsdWRpbmdQ
cm90byhWTSYpOworICAgIEFMV0FZU19JTkxJTkUgYm9vbCBjYW5QZXJmb3JtRmFzdFB1dElubGlu
ZShWTSYsIFByb3BlcnR5TmFtZSk7CisgICAgQUxXQVlTX0lOTElORSBib29sIGNhblBlcmZvcm1G
YXN0UHV0SW5saW5lRXhjbHVkaW5nUHJvdG8oVk0mKTsKIAogICAgIERFQ0xBUkVfRVhQT1JUX0lO
Rk87CiAKQEAgLTEwNjgsNyArMTA2OCw3IEBAIHByaXZhdGU6CiAgICAgQ29udGlndW91c0pTVmFs
dWVzIHRyeU1ha2VXcml0YWJsZUNvbnRpZ3VvdXNTbG93KFZNJik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgQXJyYXlTdG9yYWdlKiBlbnN1cmVBcnJheVN0b3JhZ2VTbG93KFZNJik7CiAKLSAgICBQ
cm9wZXJ0eU9mZnNldCBwcmVwYXJlVG9QdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihWTSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgU3RydWN0dXJlSUQsIFN0cnVjdHVyZSop
OworICAgIEFMV0FZU19JTkxJTkUgUHJvcGVydHlPZmZzZXQgcHJlcGFyZVRvUHV0RGlyZWN0V2l0
aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFN0
cnVjdHVyZUlELCBTdHJ1Y3R1cmUqKTsKIAogICAgIEF1eGlsaWFyeUJhcnJpZXI8QnV0dGVyZmx5
Kj4gbV9idXR0ZXJmbHk7CiAjaWYgQ1BVKEFERFJFU1MzMikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTdHJpbmdJbmxpbmVzLmgKaW5kZXggMTlkNDc1NmUwYzEuLmEyZGI3
Mjc4ZWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Z0lubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZ0lu
bGluZXMuaApAQCAtMjksNyArMjksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLWJvb2wg
SlNTdHJpbmc6OmVxdWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIG90aGVyKSBjb25zdAor
aW5saW5lIGJvb2wgSlNTdHJpbmc6OmVxdWFsKEV4ZWNTdGF0ZSogZXhlYywgSlNTdHJpbmcqIG90
aGVyKSBjb25zdAogewogICAgIGlmIChpc1JvcGUoKSB8fCBvdGhlci0+aXNSb3BlKCkpCiAgICAg
ICAgIHJldHVybiBlcXVhbFNsb3dDYXNlKGV4ZWMsIG90aGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFdyYXBwYWJsZS5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvanMvU2NyaXB0V3JhcHBhYmxlLmgKaW5kZXggNjU1Y2UxNDdiM2IuLjgyYTM4M2Zh
MjU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFi
bGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRXcmFwcGFibGUuaApA
QCAtNDMsOSArNDMsOSBAQCBjbGFzcyBKU0RPTU9iamVjdDsKIAogY2xhc3MgU2NyaXB0V3JhcHBh
YmxlIHsKIHB1YmxpYzoKLSAgICBKU0RPTU9iamVjdCogd3JhcHBlcigpIGNvbnN0OwotICAgIHZv
aWQgc2V0V3JhcHBlcihKU0RPTU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKiwgdm9pZCop
OwotICAgIHZvaWQgY2xlYXJXcmFwcGVyKEpTRE9NT2JqZWN0Kik7CisgICAgaW5saW5lIEpTRE9N
T2JqZWN0KiB3cmFwcGVyKCkgY29uc3Q7CisgICAgaW5saW5lIHZvaWQgc2V0V3JhcHBlcihKU0RP
TU9iamVjdCosIEpTQzo6V2Vha0hhbmRsZU93bmVyKiwgdm9pZCopOworICAgIGlubGluZSB2b2lk
IGNsZWFyV3JhcHBlcihKU0RPTU9iamVjdCopOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRGVy
aXZlZD4KICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mV3JhcHBlcigpIHsgcmV0dXJuIENB
U1RfT0ZGU0VUKERlcml2ZWQqLCBTY3JpcHRXcmFwcGFibGUqKSArIE9CSkVDVF9PRkZTRVRPRihT
Y3JpcHRXcmFwcGFibGUsIG1fd3JhcHBlcik7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>